cup占用率高:java
第一步:找到占用CPU太高的进程的pidlinux
使用top命令,而后按shift+p按照CPU排序工具
第二步:找到进程中消耗资源最高的线程的idspa
使用top -Hp [进程id]线程
第三步:将线程id转换为16进制(字母要小写)orm
使用echo 'obase=16;[线程id]' | bc或者printf "%x\n" [线程id]
【bc是linux的计算器命令】blog
第四步:查看线程状态信息排序
执行jstack [进程id] |grep -A 10 [线程id的16进制]”进程
第五步:导出堆栈异常信息内存
执行jstack [进程id] |grep -A 10 [线程id的16进制] > xxx.txt
下载至本地sz xxx.txt
内存占用较高:找到内存占用高的线程后,使用 jmap -dump:format=b,file=dumpfile.dat [pid]将内存信息down下来,pid为线程id,使用java自带工具
java visual vm:打开jdk/bin/jvisualvm,装入dump文件便可;
查看某进程号下的gc状况:jstat -gc 12538 5000
即会每5秒一次显示进程号为12538的java进成的GC状况,
字段说明: 显示内容说明以下(部分结果是经过其余其余参数显示的,暂不说明): S0C:年轻代中第一个survivor(幸存区)的容量 (字节) S1C:年轻代中第二个survivor(幸存区)的容量 (字节) S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节) S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节) EC:年轻代中Eden(伊甸园)的容量 (字节) EU:年轻代中Eden(伊甸园)目前已使用空间 (字节) OC:Old代的容量 (字节) OU:Old代目前已使用空间 (字节) PC:Perm(持久代)的容量 (字节) PU:Perm(持久代)目前已使用空间 (字节) YGC:从应用程序启动到采样时年轻代中gc次数 YGCT:从应用程序启动到采样时年轻代中gc所用时间(s) FGC:从应用程序启动到采样时old代(全gc)gc次数 FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s) GCT:从应用程序启动到采样时gc用的总时间(s) NGCMN:年轻代(young)中初始化(最小)的大小 (字节) NGCMX:年轻代(young)的最大容量 (字节) NGC:年轻代(young)中当前的容量 (字节) OGCMN:old代中初始化(最小)的大小 (字节) OGCMX:old代的最大容量 (字节) OGC:old代当前新生成的容量 (字节) PGCMN:perm代中初始化(最小)的大小 (字节) PGCMX:perm代的最大容量 (字节) PGC:perm代当前新生成的容量 (字节) S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比 S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比 E:年轻代中Eden(伊甸园)已使用的占当前容量百分比 O:old代已使用的占当前容量百分比 P:perm代已使用的占当前容量百分比 S0CMX:年轻代中第一个survivor(幸存区)的最大容量 (字节) S1CMX :年轻代中第二个survivor(幸存区)的最大容量 (字节) ECMX:年轻代中Eden(伊甸园)的最大容量 (字节) DSS:当前须要survivor(幸存区)的容量 (字节)(Eden区已满) TT: 持有次数限制 MTT : 最大持有次数限制