Jvm虚拟机参数调优教程

发布时间:2026/7/8 5:09:08
Jvm虚拟机参数调优教程 一jmap1jmap -histo 进程号此命令可以用来查看内存信息实例个数以及占用内存大小jmap -histo 进程号 ./log.txt打开log文件如下num序号instances实例数bytes占用空间大小class name类名称 [C is a char[] [S is a short[] [I is a int[]2jmap -heap 进程号查看堆内存信息3堆内存dumpjmap -dump:formatb,filetest.hprof 进程号也可以设置内存溢出自动导出dump文件内存很大的时候可能会导不出来-XX:HeapDumpOnOutOfMemoryError-XX:HeapDumpPath./ 路径4冷知识如果在jmap命令查询结果中发现某个对象特别多特别大但是具体在代码中找不到产生的地方那么可以这么想既然产生的那么多那执行这段逻辑的代码肯定占用cpu比较多使用jstack命令或者导出dump文件导入jdk的VisualVM工具中抽样器的CPU中可以看出耗时很长的地方从而快速定位到代码位置。二jstack1jstack 进程号查看进程信息如果进程中存在线程死锁那么输出的结果最后会直接给出来具体死锁线程信息和线程的堆栈信息Thread-1线程名prio5优先级5tid0x00000001fa9e000 线程idnid0x2d64 线程对应的本地线程标识nidBLOCKED线程状态2jstack找出cpu最高的线程堆栈信息1使用命令top -ppid显示你的java进程的内存情况 pid是进程号2按H获取每个线程的内存情况3找到内存和cpu占用占用最高的线程tid4转16进制得到0x4cd05执行jstackpid| grep -A 10 0x4cd0得到线程堆栈信息中0x4cd0这个线程所在行的最后10行从堆栈中可以发现导致cpu飙高的调用方法6查看堆栈信息找出可能存在问题的代码三jinfo1jinfo -flags 进程号查看正在运行的Java应用程序的扩展参数查看jvm的参数jinfo -flags 进程号2jinfo -sysprops 进程号查看java系统参数jinfo -sysprops 进程号四jstat非常重要jstat命令可以查看堆内存各部分的使用量以及加载类的数量。命令格式如下jstat [-命令选项] [vmid] [间隔时间毫秒] [查询次数]注意使用的jdk版本是1.81垃圾回收统计jstat -gc pid 最常用可以评估程序内存使用及GC压力整体情况S0C第一个幸存区的大小单位KBS1C第二个幸存区的大小S0U第一个幸存区的使用大小S1U第二个幸存区的使用大小EC伊甸园区的大小EU伊甸园区的使用大小OC老年代大小MC方法去大小元空间MU方法区使用大小CCSC压缩类空间大小CCSU压缩类空间使用大小YGC年轻代垃圾回收次数YGCT年轻代垃圾回收消耗时间单位SFGC老年代垃圾回收次数FGCT老年代垃圾回收消耗时间单位SGCT垃圾回收消耗总时间单位Sjstat -gc 1000 10 每一秒执行一次共执行十次五阿里巴巴Arthas调优工具Arthas是阿里巴巴在2018年9月开源的Java诊断工具支持jdk6采用命令行交互模式可以方便的定位诊断线上程序运行问题。Arthas官方文档十分详细详见https://alibaba.github.io/arthas1arthas使用github下载arthaswget https://alibaba.github.io/arthas/arthas-boot.jargitee下载arthaswget https://arthas.gitee.io/arthas-boot.jar用java -jar运行即可可以识别机器上所有java进程