JVM-04 调优实战

Ubuntu 14.04 + Tomcat 性能优化实战:系统/JVM/Nginx 三层调优 Tomcat 是 Java Web 应用最主流的轻量级容器,其性能表现高度依赖底层操作系统与 JVM 的协同。在 Ubuntu 14.04 这类已停止维护的老版本系统上,内核调度、文件描述符限制、TCP 栈参数与现代 Java 应用的高并发模型存在天然不匹配,极易引发线程阻塞、Full GC 频发、连接拒绝等雪崩问题。优化本质不是单点参数调整,而是构建系统层(ulimit/sysctl)、JVM 层(CMS 垃圾回收/堆内存精算)和反向代理层(Nginx 流量管控/静态资源卸载)的三级防御体系。本文聚焦真实 阅读详情

1、Jdk自带的常见命令

一般通过命令行工具查询某个进程的信息,都需要进程号。

[root@VM-0-8-centos ~]# jps
14084 Launcher
14136 Csdn
12172 RemoteMavenServer36
7724 Jps

1.1 java -heap (pid)

查看垃圾收集器信息,初始化堆内存配置,堆空间内存占用情况

C:\Users\Administrator>jmap -heap 14136
Attaching to process ID 14136, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.152-b16

using thread-local object allocation.
Parallel GC with 6 thread(s)

Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 4282384384 (4084.0MB)
   NewSize                  = 89128960 (85.0MB)
   MaxNewSize               = 1427111936 (1361.0MB)
   OldSize                  = 179306496 (171.0MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 67108864 (64.0MB)
   used     = 64722984 (61.724647521972656MB)
   free     = 2385880 (2.2753524780273438MB)
   96.44476175308228% used
From Space:
   capacity = 11010048 (10.5MB)
   used     = 0 (0.0MB)
   free     = 11010048 (10.5MB)
   0.0% used
To Space:
   capacity = 11010048 (10.5MB)
   used     = 0 (0.0MB)
   free     = 11010048 (10.5MB)
   0.0% used
PS Old Generation
   capacity = 179306496 (171.0MB)
   used     = 0 (0.0MB)
   free     = 179306496 (171.0MB)
   0.0% used

7197 interned Strings occupying 679784 bytes.

1.2 jmap(java memory map) 查看内存问题

1.2.1 jmap -histo (pid) >./log.txt

查看进程的内存信息,实例个数及所占空间

C:\Users\Administrator>jmap -histo 14136

 num     #instances         #bytes  class name
----------------------------------------------
   1:         67958       35515848  [B
   2:         95675        6862512  [C
   3:         22976        5717688  [I
   4:         68342        1640208  java.lang.String
   5:         40269        1288608  java.util.HashMap$Node
   6:         24330         973200  java.util.HashMap$KeyIterator
   7:         11248         889968  [Ljava.util.HashMap$Node;
   8:         11974         574752  java.util.HashMap
   9:         12713         568792  [Ljava.lang.Object;
  10:          7151         457664  java.util.regex.Matcher
  11:         11897         409448  [Ljava.lang.String;
  12:         10051         321632  sun.security.util.DerInputBuffer
  13:         11023         264552  sun.security.util.DerInputStream
  14:          7174         229568  sun.security.util.DerValue
  15:          9527         228648  java.util.ArrayList
  16:          9411         225864  sun.security.x509.X509AttributeName
  17:          1843         211448  java.lang.Class
  18:          9530         152480  java.util.HashSet

备注:

  • num :序号
  • instances: 实例数量
  • bytes :占用空间大小
  • class name :类名称([C is a char[],[S is a short[],[I is a int[],[B is a byte[])
1.2.2 jmap -dump:live,format=b,file=jvm.hprof (pid)

生成的jvm.hprof文件,可以下载下来放入jvisualvm.exe文件,来分析生成文件的时刻JVM内存的情况。更好的实践则是在环境中运行时,设置参数. -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./jvm.dump ,保证内存异常时,生产该文件以便分析异常的原因。
在这里插入图片描述

1.3 jstack 查看虚拟机栈问题

1.3.1 jstack 查找死锁

先找到运行进程的进程号,本机:5516 JstackFountDealLock。下方代码运行,线程0和线程1各自先锁住1个对象,5秒后再去锁另一个对象,此时会造成死锁。

public class JstackFountDealLock {
    private static Object lock1 = new Object();
    private static Object lock2 = new Object();

    public static void main(String[] args) {

        new Thread(()->{
            synchronized (lock1){
                System.out.println("锁对象lock1");
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (lock2){
                    System.out.println("锁对象lock2");
                }
            }
        }).start();

        new Thread(()->{
            synchronized (lock2){
                System.out.println("锁对象lock2");
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (lock1){
                    System.out.println("锁对象lock1");
                }
            }
        }).start();

        System.out.println("main线程结束");
    }
}

查看Jstack 5516 ,省略其中无用信息。Found 1 deadlock.

2021-08-22 22:04:06
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.152-b16 mixed mode):

"Thread-1" #12 prio=5 os_prio=0 tid=0x000000001f04c800 nid=0x1048 waiting for monitor entry [0x000000001f9ee000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at com.huawei.jvm.JstackFountDealLock.lambda$main$1(JstackFountDealLock.java:40)
        - waiting to lock <0x000000076b0a3308> (a java.lang.Object)
        - locked <0x000000076b0a3318> (a java.lang.Object)
        at com.huawei.jvm.JstackFountDealLock$$Lambda$2/2074407503.run(Unknown Source)
        at java.lang.Thread.run(Thread.java:748)

"Thread-0" #11 prio=5 os_prio=0 tid=0x000000001f04c000 nid=0x34a8 waiting for monitor entry [0x000000001f8ee000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at com.huawei.jvm.JstackFountDealLock.lambda$main$0(JstackFountDealLock.java:25)
        - waiting to lock <0x000000076b0a3318> (a java.lang.Object)
        - locked <0x000000076b0a3308> (a java.lang.Object)
        at com.huawei.jvm.JstackFountDealLock$$Lambda$1/558638686.run(Unknown Source)
        at java.lang.Thread.run(Thread.java:748)

Found one Java-level deadlock:
=============================
"Thread-1":
  waiting to lock monitor 0x00000000030fbb88 (object 0x000000076b0a3308, a java.lang.Object),
  which is held by "Thread-0"
"Thread-0":
  waiting to lock monitor 0x00000000030fe418 (object 0x000000076b0a3318, a java.lang.Object),
  which is held by "Thread-1"

Java stack information for the threads listed above:
===================================================
"Thread-1":
        at com.huawei.jvm.JstackFountDealLock.lambda$main$1(JstackFountDealLock.java:40)
        - waiting to lock <0x000000076b0a3308> (a java.lang.Object)
        - locked <0x000000076b0a3318> (a java.lang.Object)
        at com.huawei.jvm.JstackFountDealLock$$Lambda$2/2074407503.run(Unknown Source)
        at java.lang.Thread.run(Thread.java:748)
"Thread-0":
        at com.huawei.jvm.JstackFountDealLock.lambda$main$0(JstackFountDealLock.java:25)
        - waiting to lock <0x000000076b0a3318> (a java.lang.Object)
        - locked <0x000000076b0a3308> (a java.lang.Object)
        at com.huawei.jvm.JstackFountDealLock$$Lambda$1/558638686.run(Unknown Source)
        at java.lang.Thread.run(Thread.java:748)

Found 1 deadlock.

用jvisualvm看也是一样的结果。
在这里插入图片描述

1.3.1 jstack 查看CPU飙升问题

1、准备环境
准备一个无限循环的方法,保持CPU不停运算。

public class Math4Cpu {
    public static final int initData = 666;
    public static User user = new User(); 
    public int compute() { 
        //一个方法对应一块栈帧内存区域 12
        int a = 1; 
        int b = 2;
        int c = (a + b) * 10; 
        return c; 
    }
    public static void main(String[] args) {
        Math4Cpu math = new Math4Cpu();
         while (true){ 
             math.compute(); 
         } 
    } 
}

在linux中运行java的字节码文件

java com.asky.jvm.Math4Cpu

通过top命令 #实时查看系统运行情况,检测CPU、内存、进程等。发现此时PID:24400 的进程CPU占用高达97.3%
在这里插入图片描述
2、检查问题所在

top -p <pid>   #(21508) 查看单进程的恶性西情况

在这里插入图片描述
查看当前进程的详细线程情况
按住shift+h —> H
在这里插入图片描述
拿到CPU占用超高的线程号PID 24401(十进制) —> 转化为十六进制 —> 5f51 (十六进制)
执行jstack查看

jstack 24400|grep -A 10 5f51 #jstack (进程pid) | grep -A 100 pid(java线程号)

从报错中的代码行数,可见端谜。
在这里插入图片描述

1.4 jinfo 查看系统属性

1.4.1 jinfo -flags pid 查看JVM启动命令
[root@VM-0-8-centos /]# jinfo -flags 26611
Attaching to process ID 26611, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.302-b08
Non-default VM flags: -XX:CICompilerCount=2 -XX:InitialHeapSize=31457280 -XX:MaxHeapSize=482344960 -XX:MaxNewSize=160759808 -XX:MinHeapDeltaBytes=196608 -XX:NewSize=10485760 -XX:OldSize=20971520 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops 
Command line:  
1.4.2 jinfo -sysprops pid 查看java系统参数

在这里插入图片描述

1.5 Jstat 最常用命令

jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。
命令的格式如下: jstat [-命令选项] [vmid] [间隔时间(毫秒)] [查询次数]
注意:使用的jdk版本是jdk8

1.5.1 Jstat -gc pid 查看垃圾回收情况

1)单次查看gc回收情况

S0C :suvivor0区容量(单位KB)
S0U :suvivor0使用量
EC:Eden区容量
EU:Eden区使用量
OC:老年代容量
OU:老年代使用量
MC:元空间容量
MU:元空间使用量
CCSC:压缩类空间大小
CCUS:压缩类空间使用大小
YGC:Young gc自启动后执行的次数
YGCT:young gc耗费的时间,单位s
FGC:full gc的次数
FGCT:full gc耗费的时间,单位s
GCT:young gc和full gc话费的时间之和,单位s

[root@VM-0-8-centos /]# jstat -gc 26611 
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
1024.0 1024.0  0.0    0.0    8192.0   507.9    20480.0      0.0     4480.0 875.6  384.0   76.6       0    0.000   0      0.000    0.000

2)每个1000毫秒运行1次,累计运行10次

stat -gc pid 1000 10
[root@VM-0-8-centos /]# jstat -gc 30343 1000 10
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
1024.0 1024.0  0.0    0.0    8192.0   507.9    20480.0      0.0     4480.0 875.6  384.0   76.6       0    0.000   0      0.000    0.000
1024.0 1024.0  0.0    0.0    8192.0   507.9    20480.0      0.0     4480.0 875.6  384.0   76.6       0    0.000   0      0.000    0.000
1024.0 1024.0  0.0    0.0    8192.0   507.9    20480.0      0.0     4480.0 875.6  384.0   76.6       0    0.000   0      0.000    0.000
1024.0 1024.0  0.0    0.0    8192.0   507.9    20480.0      0.0     4480.0 875.6  384.0   76.6       0    0.000   0      0.000    0.000
1024.0 1024.0  0.0    0.0    8192.0   507.9    20480.0      0.0     4480.0 875.6  384.0   76.6       0    0.000   0      0.000    0.000
1024.0 1024.0  0.0    0.0    8192.0   507.9    20480.0      0.0     4480.0 875.6  384.0   76.6       0    0.000   0      0.000    0.000
1024.0 1024.0  0.0    0.0    8192.0   507.9    20480.0      0.0     4480.0 875.6  384.0   76.6       0    0.000   0      0.000    0.000
1024.0 1024.0  0.0    0.0    8192.0   507.9    20480.0      0.0     4480.0 875.6  384.0   76.6       0    0.000   0      0.000    0.000
1024.0 1024.0  0.0    0.0    8192.0   507.9    20480.0      0.0     4480.0 875.6  384.0   76.6       0    0.000   0      0.000    0.000
1024.0 1024.0  0.0    0.0    8192.0   507.9    20480.0      0.0     4480.0 875.6  384.0   76.6       0    0.000   0      0.000    0.000

Full GC的频率应该控制在几个小时-几天发生/1次。

Ubuntu 20.04 搭建稳定低延迟 Minecraft 服务器实战指南 Minecraft 服务器本质是 Java 长时运行的高并发网络应用,其稳定性高度依赖操作系统内核、JVM 版本与服务治理机制的协同。Ubuntu 20.04 凭借成熟稳定的 5.4 内核、长期安全支持及对 OpenJDK 8 的深度适配,成为中小规模 Minecraft 服务端部署的黄金基线;而 openjdk-8-jre-headless 不仅规避图形栈依赖与许可证风险,更通过精简运行时显著降低内存开销与启动异常率。结合 PaperMC 的异步区块加载与细粒度配置能力,可系统性优化 TPS、网络延迟与内 阅读详情

相关推荐

Ubuntu 20.04 + Docker 部署 Metabase 最稳实践指南

Metabase 是一款面向中小团队的开源 BI 工具,以低代码 SQL 编辑器和开箱即用体验著称;其运行依赖 Java 11+ 运行时、嵌入式 H2 或外部数据库,以及稳定的服务托管环境。Docker 容器化部署通过镜像封装 Java 环境与应用逻辑,有效解耦操作系统差异,规避 Ubuntu 下常见的 Java 版本冲突、权限异常、systemd 集成故障等问题。相比 JAR 直跑或 Snap 安装,Docker 方式在 Ubuntu 20.04(内核 5.4,LTS 支持至 2025)上具备启动快、升级

weixin_30555515的博客 420

Ubuntu 18.04下Tomcat 9手动部署与JVM调优实战指南

Tomcat 是 Java Web 应用最主流的 Servlet 容器,其运行依赖于稳定、兼容且可精细调控的 JVM 环境。理解 Tomcat 启动流程、类加载机制与连接器原理,是保障 Web 服务高可用的基础;而 JVM 内存模型(尤其是 Metaspace、堆内存与 GC 策略)直接影响应用在低配环境下的稳定性。在 Ubuntu 18.04 这类长期支持但内核与 cgroup 版本受限的系统中,OpenJDK 11 成为兼顾兼容性、安全更新与内存管理能力的最优选。本文聚焦真实生产约束——老旧硬件、遗留

weixin_33693070的博客 364

【JVM调优实战】04-JVM内存结构

现代 JVM 普遍采用分代收集┌─────────────────────── 堆 (Heap) ────────────────────────┐│ ││ 新生代 (Young Generation) 老年代 (Old Generation)││ └────────┴──────┴──────┘ │ 长期存活对象 │ ││ (默认占比 8 : 1 : 1) │ │ ││ └─────── -Xmn 控制大小 ──────────┘ └── -XX:NewRatio ─┘ ││ │。

gaochufukanyongren的博客 13

JVM (一)

Jvm

weixin_49884716的博客 449

Ubuntu下为RK3568开发板搭建Qt交叉编译环境:手把手教你配置Qt Creator和远程调试

本文详细介绍了在Ubuntu系统下为RK3568开发板搭建Qt交叉编译环境的完整流程,包括工具链配置、Qt源码交叉编译、Qt Creator环境设置以及远程调试技巧。通过手把手教程,开发者可以快速掌握RK3568平台的Qt开发环境搭建方法,实现高效的应用开发和部署。

weixin_30776273的博客 374

SE-0526激光避障雷达扫描传感器输入输出连线方法及PLC联机实例说明

SE-0526激光避障雷达扫描传感器广泛应用于原材料运输与处理、移动装配、托盘或货架运输、产成品自动运输、生产线自动对接,餐厅自助送餐等AGV小车、服务机器人、仓储机器人、无人叉车导航、避障、定位等。 本文重点介绍SE-0526激光避障雷达扫描传感器输入输出连线方法及PLC联机实例说明。

华翔天诚科技 2695

JVM简记3-栈

文章目录JVM-栈和方法1.程序计数器2.虚拟机栈栈帧局部变量表操作数栈动态链接方法返回3.本地方法栈4.方法执行jvm JIT运行方式JIT使用JIT优化1)公共子表达式消除2)方法内联3)方法逃逸分析4)对象的栈上内存分配5)标量替换6)同步锁消除5.方法调用 JVM-栈和方法 仅做学习内容的简单记录 1.程序计数器 程序计数器(Program Counter Register),也叫PC寄存器,是一块较小的内存空间,它可以看作是当前线程所执行的字节码指令的行号指示器。字节码解释器的工作就是通过改变

endless_fighting的博客 526

Cadence AMS数模混合仿真:从零搭建高效验证环境的实战指南

本文是Cadence AMS数模混合仿真的实战指南,详细介绍了如何从零搭建高效的芯片验证环境。内容涵盖环境准备、Testbench创建、核心Config视图与ADE设置、仿真运行调试及性能加速技巧,旨在帮助工程师解决SoC设计中数字与模拟模块的集成验证难题,确保芯片设计一次成功。

weixin_29164091的博客 320

19.jvm内存结构部分——堆_内存诊断_jmap

堆内存变化以及实时诊断(jps,jmap -heap pid) 堆内存信息: Heap Configuration(堆内存配置信息) maxHeapSize(最大堆内存信息) 垃圾回收时的内存划分: 最大新生代的内存(MaxNewSize),还有老年代的内存(OldSize) 新创建的一个对象,它都会使用一个叫eden Space区............

tgbyhn31的博客 1442

PyCharm旧版本下载地址

快捷找到PyCharm历史版本下载地址

piaopiaolanghua的专栏 4431

如何解决Elsevier和IEEE期刊之间参考文献的转换问题

Elsevier期刊和IEEE旗下的期刊两者模版互相转换的时候,会发现Elsevier模版的参考文献是存放在.bib文件下的,然后在.tex文件中直接引用即可。3. 在IEEE的.tex文件中的\end{document}命令行之前,添加下面的这句话(ps:\bibliography{**}中的**名称即为.bib文件的名称)如何将Elsevier的参考文献快速的转成IEEE期刊可用的格式,是本博客需要解决的问题。2. 将下载好的.bib文件,上传到IEEE的latex文件中。

薰珞婷紫小亭子的博客 1675

深入理解JVM

深入理解JVM 日期:2011年07月28日 分类:技术, 编程相关, 网站运营相关 带着问题去学习,jvm分析 1 2 3 4 5 6 7 [root@localhost ~]# jstat -gcutil 3461 2000 S0     S1     E      O  

lantian0802的专栏 1277

Flink上传的Jar包去了哪里?大数据

在使用Flink时,我们通常会将应用程序打包成Jar文件并将其上传到Flink集群以执行。总结起来,Flink上传的Jar包实际上会暂时存储在JobManager的本地文件系统中的一个临时目录中。在上传过程中,Flink会将Jar文件存储在JobManager的本地文件系统中的一个临时目录中。一般来说,Flink会在。希望本文对你解答了Flink上传的Jar包去了哪里的疑问,并且能够帮助你更好地理解Flink的工作原理。接下来,我们可以使用Flink命令行工具将Jar文件提交到Flink集群。

AlianBlank的博客 865

java怎么打印内存情况,如何打印java对象的内存使用情况

用户按如下方式打印java对象:num #instances #bytes class name----------------------------------------------1: 395984 32564344 [C2: 388697 9328728 java.lang.String3: ...

weixin_27719109的博客 2954

【微信小程序】微信小程序 manifest.json 配置 ES6 转 ES5 开关:3步让你的代码兼容性更强

ES6(ECMAScript 6)是 JavaScript 的最新标准,引入了许多新的语法和特性,如箭头函数、模板字符串、解构赋值等。然而,不是所有的环境都支持 ES6,特别是旧版本的浏览器和一些特定的运行环境。为了确保代码的兼容性,我们需要将 ES6 代码转换为 ES5 代码。通过本文的详细讲解,相信你已经学会了如何在文件中配置微信小程序的 ES6 转 ES5 开关。这个小小的配置步骤能够显著提高代码的兼容性和稳定性。如果你有任何问题或需要进一步的帮助,欢迎随时留言交流。

java专栏 1359

【数据集处理】中国地面气候资料日值数据集(V3.0)(含MATLAB全代码)

简介数据集数据处理

WW、forever的博客 1万+

【JVM调优实战100例】04——方法区调优实战(上)

方法区是java虚拟机中所有线程共享的共享区域,主要存放类的结构相关信息(成员变量,方法、构造器的代码),运行时常量池,类加载器。方法区在虚拟机启动时被创建,在逻辑上属于堆的组成部分(具体产商实现时不一定遵守逻辑上的划分标准)。...

半旧518的博客 618

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Ubuntu 18.04部署Tomcat 9实战:JVM调优与systemd服务精控

Apache Tomcat 是 Java Web 应用最主流的 Servlet 容器,其运行稳定性高度依赖底层操作系统与 JVM 的协同。在 Linux 环境中,尤其是长期服役的 Ubuntu 18.04 这类 EOL 系统,Tomcat 的部署远不止于解压启动——它涉及 systemd 服务管理机制、JVM 内存模型与 Linux OOM Killer 的博弈、文件权限与 AppArmor 安全策略的适配,以及 JDK 版本兼容性引发的 GC 行为差异。本文聚焦 Tomcat 9 在 Ubuntu 18.

weixin_33804582的博客 522

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Ubuntu 18.04 手动部署 Tomcat 9 实战:多实例、JVM 调优与日志治理

Tomcat 是 Java Web 应用最主流的 Servlet 容器,其运行时环境稳定性直接决定后端服务可用性。理解 Tomcat 架构原理(如 CATALINA_HOME/CATALINA_BASE 分离机制、JVM 启动流程、日志委托模型)是实现高可靠部署的前提。在 Ubuntu 18.04 这类长期支撑型系统上,手动部署 Tomcat 9 而非 apt 安装,可规避路径强绑定、权限僵化与日志割裂等运维风险,显著提升环境可审计性与可复现性。该方案天然支持单机多实例隔离、精细化 JVM 参数控制(如 G

weixin_34326558的博客 346

Ubuntu 20.04 原生部署 Elastic Stack 8.12.2 实战指南

Elastic Stack 是构建日志分析、全文检索与可观测性平台的核心技术栈,其核心组件 Elasticsearch、Logstash 和 Kibana 的协同运行依赖严格的版本兼容性、系统级调优与安全配置。在 Ubuntu 20.04 这类长期支持的生产环境操作系统中,单纯依赖 Docker 或一键脚本极易因内核参数(如 vm.max_map_count)、JVM 内存限制、systemd 服务管理逻辑及 TLS 认证机制不匹配而失败。本文聚焦真实生产约束,详解如何通过 APT 原生安装、版本锁定(El

angou6476的博客 354

LoadRunner 性能测试实战——从理论到 JMeter 上机全链路覆盖(含悦购图书商城实战)

本文通过华为云ECS集群部署的"悦购图书商城"实战项目,系统介绍了性能测试从理论到实践的全流程。采用JMeter 5.6.3作为LoadRunner的替代工具,详细解析了性能测试基础概念、工具使用、脚本开发、场景设计、监控分析和优化调整等核心环节。通过4台服务器构建完整测试环境(被测系统、负载生成、监控和报告),并提供了LoadRunner与JMeter的核心概念映射表,帮助读者在开源工具上实现企业级性能测试能力。文章包含大量实战案例和典型性能指标解读,适合测试工程师系统学习性能测试方法论和工具链应用。

cpyaxjq的博客 225

JVM性能调优实践——JVM篇

前言 在遇到实际性能问题时,除了关注系统性能指标。还要结合应用程序的系统的日志、堆栈信息、GClog、threaddump等数据进行问题分析和定位。关于性能指标分析可以参考前一篇JVM性能调优实践——性能指标分析。 JVM的调优和故障处理可以使用JDK的几个常用命令工具。因为本文是基于Docker容器内部的Springboot服务。需要调整一下docker容器的启动参数,才可以使用jma...

马猴烧酒└(┐卍^o^)卍ドゥルルル~楪詩月「YUZURIHA SHIZUKI」 3万+

JVM 调优命令&工具使用

top命令查看进程占用资源情况 jps 命令 查看 java进程 jstack 命令 关注WATTING 查看死锁问题 jstat -gc pid 查看 GC 情况 jinfo pid 查看 jvm 常用信息 arthas [推荐] 安装&启动 使用 jmap 命令 [生产环境慎用! 会造成生产环境卡顿!!!!] 使用jvisualvm 进行查看 d...

张伯毅的专栏 7857

JVM调优实战:解决CMS concurrent-abortable-preclean LongGC的问题

1. 背景 1.1 多个业务线的应用出现LongGC告警 最近一段时间,经常收到CAT报出来的Long GC告警(配置为大于3秒的为Longgc)。 2. 分析前的一些JVM背景知识回顾 2.1 JVM堆内存划分 新生代(Young Generation) 新生代内被划分为三个区:Eden,from survivor,to survivor。大多数对象在新生代被创建。Minor GC针对的...

思码堂 1万+

JVM虚拟机(七)JVM调优的工具

JVM虚拟机(七)JVM调优的工具

ACGkaka的博客 1632

JVM(Java虚拟机)详解(JVM 内存模型、堆、GC、直接内存、性能调优)

JVM(Java虚拟机)详解(JVM 内存模型、堆、GC、直接内存、性能调优)

墨鸦的博客 4万+
上一篇: JVM-03 垃圾收集器
下一篇: 服务化-mysql-06 单机实现mysql8.0主从数据库同步
旧梦昂志
博客等级 码龄7年 3724粉丝 68原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旧梦昂志

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值