JVM内存问题定位
2017-06-26 11:49
232 查看
一、查看机器资源使用状态:
使用top命令,内存占用较高的那个PID对应的进程一般就是JVM了
二、查看Swap状态:
使用free-m命令,一般内存占用过高会导致swap占用也偏高,看看swap占用比例,如何超过50%,就比较危险了
三、确认swap占用:
cat/proc/$PID/smaps|grep'Swap'|sort
四、找出该进程内最耗费CPU的线程,可以使用
TIME列就是各个Java线程耗费的CPU时间,CPU时间最长的是线程ID为XX的线程,用
得到XX的十六进制值为xx,下面会用到。
OK,下一步终于轮到jstack上场了,它用来输出进程XX的堆栈信息,然后根据线程ID的十六进制值grep,如下:
使用top命令,内存占用较高的那个PID对应的进程一般就是JVM了
二、查看Swap状态:
使用free-m命令,一般内存占用过高会导致swap占用也偏高,看看swap占用比例,如何超过50%,就比较危险了
三、确认swap占用:
cat/proc/$PID/smaps|grep'Swap'|sort
四、找出该进程内最耗费CPU的线程,可以使用
1)ps-Lfppid 2)ps-mppid-oTHREAD,tid,time 3)top-Hppid 用第三个,输出如下:
TIME列就是各个Java线程耗费的CPU时间,CPU时间最长的是线程ID为XX的线程,用
printf"%x\n"$XX
得到XX的十六进制值为xx,下面会用到。
OK,下一步终于轮到jstack上场了,它用来输出进程XX的堆栈信息,然后根据线程ID的十六进制值grep,如下:
root@ubuntu:/#jstack$XX|grep$xx
如果报错:sun.jvm.hotspot.debugger.DebuggerException:get_thread_regsfailedforalwp,请参考:http://zhangshaoxiong.blog.51cto.com/4408282/1310166 附,查看swap占用的脚本:
#!/bin/bash #获取swap使用情况 functiongetSwap(){ SUM=0 OVERALL=0 forDIRin`find/proc/-maxdepth1-typed|egrep"^/proc/[0-9]"` do PID=`echo${DIR}|cut-d/-f3` PROGNAME=`ps-p${PID}-ocomm--no-headers` forSWAPin`grepSwap${DIR}/smaps2>/dev/null|awk'{print$2}'` do letSUM=$SUM+$SWAP done if[[${SUM}-gt0]];then echo"$PID$SUM$PROGNAME" fi letOVERALL=$OVERALL+$SUM SUM=0 done echo"swap总使用量:$OVERALL" } functionsorted(){ echo"PIDSwap_usedProgram" getSwap echo"$?"|sort-n-t''-k2r-k1|awk'{print$1$2$3}' } sorted
相关文章推荐
- 请问JVM参数_定位检查内存溢出问题
- 干货|JVM内存模型和常规问题定位手段
- Tomcat 的JVM 内存溢出问题的解决
- Tomcat 的JVM 内存溢出问题的解决
- Linux系统性能问题定位-内存泄露
- JAVA开发(4) -JVM 内存溢出问题的解决
- 调优JVM内存,并解决OutOfMemoryError,StackOverflowError等异常问题
- 调优JVM内存,并解决OutOfMemoryError,StackOverflowError等异常问题
- 内存不足引起的SIGKILL:一个缓冲区不断增长问题的定位与解决
- 关于jvm的内存限制的问题的解决办法
- 调优JVM内存,并解决OutOfMemoryError,StackOverflowError等异常问题
- JVM内存的设置(解决eclipse下out of memory问题)
- 关于设置JVM内存大小的问题
- tomcat 的jvm 内存溢出问题的解决及JVM性能调优
- tomcat 的jvm 内存溢出问题的解决
- iOS下CLLocationManager多次定位引起内存访问错误的问题解决
- jvm探查内存不足/内存泄漏问题
- jvm内存问题和String到底有没有长度限制
- 内存不足引起的SIGKILL:一个缓冲区不断增长问题的定位与解决(解释SIGKILL原因)
- linux下内存的统计和内存泄露类问题的定位