Linux系统下查看JVM进程信息

最近在调试公司的CS改造程序,发现当客户端运行一段时间后会造成CPU占用率过高卡死的现象。因为某些原因我发到现场亲自调试。就顺便学习一下Linux下怎么抓取JVM中某一线程的运行情况。

  1. 查看java进程的pid。(定位目标)
  2. 使用jmap查看JVM heap dump信息。(初步判断JVM资源使用情况)
  3. 通过top命令查看进程CPU使用情况 。
  4. 通过top名称查看进程的线程id
  5. 通过jstack来查看对应线程情况。

一步一步来看:

1.使用jps查看java的进程ID(我预先跑了一个jar包程序)

进程ID为31300
Linux系统下查看JVM进程信息

2. 使用 jmap -dump:live,file=b.map pid 生成javaa堆存储快照。

Linux系统下查看JVM进程信息

使用 jmap -heap PID 生成java堆的详细信息、使用 jmap -histo PID 生成java堆中对象的相关信息,包含数量以及占用的空间大小

Linux系统下查看JVM进程信息
对象信息太多就不展示了。

3.使用top命令来查看cup使用情况

Linux系统下查看JVM进程信息

然后使用top -p PID -H 来把我们关心的进程的线程摘出来

Linux系统下查看JVM进程信息

4.最后使用jstack命令来查看我们的线程情况。

上一步我们使用top命令查看到的进程pid要转化成16进制的,然后使用jstack pid|grep 16进制的线程id 来查看 我们关注的线程的信息。

我这里查看31312的线程信息 转化成16位为7a50
Linux系统下查看JVM进程信息
这就是线程的信息。