分析Java代码问题的最有效的工具仍然是java thread dump,对于support人员来说尤其重要,原因:
- 任何操作系统平台下都可以使用。
- 在多数情况下,可以在生产环境中使用。
- 和操作系统提供的工具相比,java thread dump给出的信息是直白的,直接对应到应用代码。
- 它对被分析的系统干扰很小,因此能反应真实的问题。而其它很多profiling或Instrument工具本身对JVM运行有很大的干扰,经常不能暴露出真正的问题,而且这种工具不能用于生产系统。
收集thread dump
1. Unix/Linux:
kill -3 <JVM pid>,对于在当前控制台运行的JVM,在console窗口敲Ctrl-\
2. 在Solaris OS下:
<ctrl>-’’ (Control-Backslash)
kill -QUIT <pid>
3. 在AIX上用IBM的JVM:
内存溢出时默认地会产生javacore文件(关于cpu的)和heapdump文件(关于内存的)。如果没有参照下列方法:
选择一个cluster成员,设置环境变量:
export IBM_HEAPDUMP=true
export IBM_HEAP_DUMP=true
export IBM_HEAPDUMP_OUTOFMEMORY=true
export IBM_HEAPDUMPDIR=<directory path>
用set命令检查参数设置,确保没有设置DISABLE_JAVADUMP
4. 在Windows下:
可以在JVM的console窗口上敲Ctrl-Break,只能得到当前窗口运行JVM的 thread dump,无法得到后台运行的jvm的thread dump。
根据不同的设置,thread dump会输出到当前控制台上或应用服务器的日志里。为了方便获取threaddump信息,最好将标准输出重定向到一个文件
- 任何操作系统平台下都可以使用。
- 在多数情况下,可以在生产环境中使用。
- 和操作系统提供的工具相比,java thread dump给出的信息是直白的,直接对应到应用代码。
- 它对被分析的系统干扰很小,因此能反应真实的问题。而其它很多profiling或Instrument工具本身对JVM运行有很大的干扰,经常不能暴露出真正的问题,而且这种工具不能用于生产系统。
收集thread dump
1. Unix/Linux:
kill -3 <JVM pid>,对于在当前控制台运行的JVM,在console窗口敲Ctrl-\
2. 在Solaris OS下:
<ctrl>-’’ (Control-Backslash)
kill -QUIT <pid>
3. 在AIX上用IBM的JVM:
内存溢出时默认地会产生javacore文件(关于cpu的)和heapdump文件(关于内存的)。如果没有参照下列方法:
选择一个cluster成员,设置环境变量:
export IBM_HEAPDUMP=true
export IBM_HEAP_DUMP=true
export IBM_HEAPDUMP_OUTOFMEMORY=true
export IBM_HEAPDUMPDIR=<directory path>
用set命令检查参数设置,确保没有设置DISABLE_JAVADUMP
4. 在Windows下:
可以在JVM的console窗口上敲Ctrl-Break,只能得到当前窗口运行JVM的 thread dump,无法得到后台运行的jvm的thread dump。
根据不同的设置,thread dump会输出到当前控制台上或应用服务器的日志里。为了方便获取threaddump信息,最好将标准输出重定向到一个文件