手机扫一扫访问本页内容

微信扫描点右上角"···"分享到好友或朋友圈

关闭
微信扫一扫可打开小程序

微信长按图片或搜“分享录”可打开小程序

关闭

Linux环境排查Java项目占高CPU、内存等的方法

首先进入Linux服务器通过“top”命令查看是哪些进程造成了高CPU、内存等并记下其“PID”、“USER”等信息以便进一步做排查。

也可以通过“ps -aux|grep java”命令直接查看“java”进程的PID,再通过“top -H -n 1 -p 2754”命令查看该进程下的线程情况,这里可以看到PID为“2755”的线程占的CPU最高。

然后可以用jdk自带的“jstack”堆栈跟踪工具打印出具体日志,具体使用命令可以通过“jstack -h”查看,这里用“jstack -l 2754 > ./dump.log”将日志保存到当前目录的“dump.log”文件中,通过“cat dump.log”查看该日志。

java线程中的nid(即native thread id,也就是对应本地线程中的LWPID,上面已通过“ps -Lf 2754”查出其LWP跟PID相同)是使用16进制的,将占CPU最高的“2755”线程转换成十六进制为“0xac3”,从而可以找到造成CPU飙升的具体原因就是“Test.java”这个类的第四行。

这里通过“at Test.main(Test.java:4)” -> “”main” #1 prio=5 os_prio=0 tid=0x00007fa98804b800 nid=0xac3 runnable [0x00007fa98f452000]”日志简单介绍一下线程堆栈里面的一些信息,其中0x00007fa98f452000为线程内存地址、runnable为线程状态、nid为线程对应本地线程ID、tid为线程ID、os_prio为线程操作系统优先级、prio为线程优先级、#1为线程序号、main为线程名称。

另外,可能由于查错PID会造成“Unable to open socket file: target process not responding or HotSpot VM not loaded”,具体如下。

[root@#localhost test]#  jstack -l 2755 > ./dump.log
2291: Unable to open socket file: target process not responding or HotSpot VM not loaded
The -F option can be used when the target process is not responding

以上就是通过jdk自带的jstack工具排查Linux环境中Java项目占高CPU、内存的方法,还可以通过jstat、jmap、jvisualvm、JProfiler、MAT等做相关排查。


历史上的今天:

展开阅读全文


上一篇:

下一篇:

服务器又要到期了鼓励一下吧
您还可以访问本站的小程序、公众号等所有端,或者下载APP, 在小程序、APP上可以评论文章以及保存图片还有在线客服哦,如您有任何疑问或建议可向作者提出意见反馈
扫码打开小程序可评论文章保存图片,在“我的”有实时在线客服哦,看效果?
关注我的公众号为您分享各类有用信息
分享录多端跨平台系统