JVM 线程资源消耗
今天和客户交流ITCAMfAD功能时,客户希望对单个JVM中线程资源消耗,包括线程的CPU,内存消耗进行统计。确实这部分信息在ITCAMfAD中不能直接得到,只能得到JVM中线程的列表,和之间从属关系,以及线程优先级等等。
在Windows下有一个很好的工具pslist,需要的可以从这下载:http://technet.microsoft.com/en-us/sysinternals/bb896682.aspx
可以直接获取如下信息:
pslist -d <Java PID> Tid Pri Cswtch State User Time Kernel Time Elapsed Time 2908 8 2025 Wait:Executive 0:00:00.359 0:00:01.312 1:48:08.046 4344 15 157 Wait:UserReq 0:00:00.218 0:00:00.015 1:48:07.921 4836 15 415456 Wait:UserReq 0:00:00.000 0:00:00.000 1:48:07.921 2496 8 1 Wait:UserReq 0:00:00.000 0:00:00.000 1:48:07.796 4648 9 1 Wait:UserReq 0:00:00.000 0:00:00.000 1:48:07.796 3116 9 7 Wait:UserReq 0:00:00.000 0:00:00.000 1:48:07.796 5268 8 189 Wait:UserReq 0:00:00.015 0:00:00.000 1:48:07.796 5220 7 6991523 Running 1:47:42.031 0:00:01.218 1:48:05.593 3932 9 2 Wait:UserReq 0:00:00.000 0:00:00.000 1:48:05.125
但是在UNIX下和Linux则没搜索到这么方便的工具,必须结合IBM Thread and Monitor Dump Analyzer for Java和部分命令来诊断。
AIX下查看线程的命令是:AIX: ps -mp <PID> -o THREAD
Linux查看线程命令是:Linux: ps -Lf <PID>
这里有一篇详细介绍如何通过javacore来真的JVM线程相关问题的帖子:利用 Java dump 进行 JVM 故障诊断