前言
Java性能排查基本操作,本文的排查环境是 Linux。
Java性能相关
gc(健康度) , 堆栈(gc不掉的数据), 线程(cpu竞争)
查看jvm进程 root用户登陆,jps(JVM Process Status Tools) 查看堆内对象是否正常 jmap -histo 61367 | more jstat(JVM Statistics Monitoring Tools) jstat主要用于监控虚拟机的各种运行状态信息,如类的装载、内存、垃圾回收、JIT编译器等 jstat [option vmid [interval [s|ms] [vount] ] ] 参数interval和count分别表示查询间隔和查询次数,如每1毫秒查询一次进程20445的垃圾回收情况,监控20次,命令如下所示: jstat –gc 20445 1 20 -------------------------------------------------------------- Option Function -class 监视类的装载、卸载数量以及类的装载总空间和耗费时间等 -gc 监视Java堆,包含eden、2个survivor区、old区和永久带区域的容量、已用空间、GC时间合计等信息 -gccapcity 监视内容与-gc相同,但输出主要关注Java区域用到的最大和最小空间 -gcutil 监视内容与-gc相同,但输出主要关注已使用空间占总空间的百分比 -gccause 与-gcutil输出信息相同,额外输出导致上次GC产生的原因 -gcnew 监控新生代的GC情况 -gcnewcapacity 与-gcnew监控信息相同,输出主要关注使用到的最大和最小空间 -gcold 监控老生代的GC情况 -gcoldcapacity 与-gcold监控信息相同,输出主要关注使用到的最大和最小空间 -gcpermcapacity 输出永久带用到的最大和最小空间 -compiler 输出JIT编译器编译过的方法、耗时信息 -printcompilation 输出已经被JIT编译的方法 example: jstat -gcutil jpsPid 1000 10 -------------------------------------------------------------- top H show all thread by process P 按cpu占用排序 M 按内存占用排序 1 显示cpu个数 -------------------------------------------------------------- 查找占用cpu高的java线程: top -H -p javaId // 找出java thread id printf '0x%x\n' java thread id // 转16进制 jstack jstack用于JVM当前时刻的线程快照,又称threaddump文件,它是JVM当前每一条线程正在执行的堆栈信息的集合。生成线程快照的主要目的是为了定位线程出现长时间停顿的原因,如线程死锁、死循环、请求外部时长过长导致线程停顿的原因。通过jstack我们就可以知道哪些进程在后台做些什么?在等待什么资源等! jstack [option] vmid -------------------------------------------------------------- Option Function -F 当正常输出的请求不响应时强制输出线程堆栈 -l 除堆栈信息外,显示关于锁的附加信息 -m 显示native方法的堆栈信息 示例:jstack -l 20445 jstack Pid > jstack.log 打印堆栈 java堆的经验值: Space Option Occupancy Factor Java heap -Xmx 3x or 4x old generation space occupancy after full garbage collection Perm Generation -MaxPermSize 1.2 or 1.5x perm generation space occupancy after full garbage collection Young Generation -Xmn 1x or 1.5x young generation space occupancy after full garbage collection Old Generation 2x or 3x old generation space occupancy after full garbage collection
优化思路
- 调整分区的比例;
- 尽可能的让gc发生在年轻代中;
- 年轻代的大小,起始值,最大值,设置一样;
- 设置他进阶的生命周期和进阶允许大小设置。