一、Windows
1、Control + Break
转向服务器的标准输出窗口并按下Control + Break组合键, 之后需要将线程堆栈、内存堆栈信息复制到文件中。
示例还是中的示例:
了解String类的intern()方法--从Java7开始,字符串常量池从Heap空间移动到Metaspace空间
下面是heap信息:
2、jmap
1、先运行目标程序
2、查看pid
3、用jmap抓取jmap -dump:live,format=b,file=test.bin 9328
3、jstack
4、JVM参数之-XX:+HeapDumpOnOutOfMemoryError(导出内存溢出的堆信息(hprof文件))见JVM参数之-XX:+HeapDumpOnOutOfMemoryError(导出内存溢出的堆信息(hprof文件))
二、UNIX/ Linux
首先查找到服务器的进程号(process id), 然后获取堆栈.
1. ps –ef | grep java
2. kill -3 <pid>
注意一定要谨慎, 一步不慎就可能让服务器进程被杀死!
JVM 自带的工具获取线程堆栈:
JDK自带命令行工具获取PID并做ThreadDump:
1. jps
2.jmap
jmap -dump:live,format=b,file=/home/appdeploy/appTest/test.bin 81301
生成的结果为:
3、jstack
[appdeploy@cnsz22vl2175 appTest]$ jstack 81301 >a.bin
将Thread Dump导入到a.bin文件
详细介绍见三、jdk工具之jstack(Java Stack Trace)
4.使用JVisualVM
Threads 标签页下的ThreadDump按钮.
5、JVM参数之-XX:+HeapDumpOnOutOfMemoryError(导出内存溢出的堆信息(hprof文件))见JVM参数之-XX:+HeapDumpOnOutOfMemoryError(导出内存溢出的堆信息(hprof文件))
6、jvisualVM通过JMX连接远程服务器,再用jvisual导出hprof文件
7、jvisualVM通过jstatd连接远程服务器,再用jvisual导出hprof文件
WebLogic 自带的获取 thread dump的工具:
1. webLogic.Admin 工具
a. 打开命令提示符, 通过运行<DOMAIN_HOME>/bin/setDomain.env设置相关类路径
b. 执行下面的命令
java weblogic.Admin -url t3://localhost:7001 -username weblogic -password weblogic1 THREAD_DUMP
注意: Thread Dump 会打印到标准输出, 如nohup日志或者进程窗口.
2. 使用 Admin Console
a. 登录 Admin Console , 点击对应的服务器
b. 点击Server à Monitoring àThreads
c. 点击: Dump Thread Stack 按钮
3. 使用WLST (WebLogic Scripting Tool)
connect(‘weblogic’,'weblogic1’,’t3://localhost:7001’)
cd(‘Servers’)
cd(‘AdminServer’)
threadDump()
disconnect()
exit()
注意: 线程堆栈将会保存在运行wlst的当前目录下.
4. 使用utils.ThreadDumper
用法:
C:\bea\wlserver_10.3\server\lib>java -cp weblogic.jar utils.ThreadDumper
Broadcast Thread dumps disabled: must specify weblogic.debug.dumpThreadAddr and
weblogic.debug.dumpThreadPort
Exception in thread "main" java.lang.IllegalArgumentException: Port out of range
:-1
at java.net.DatagramPacket.setPort(Unknown Source)
at java.net.DatagramPacket.<init>(Unknown Source)
at java.net.DatagramPacket.<init>(Unknown Source)
at utils.ThreadDumper.sendDumpMsg(ThreadDumper.java:124)
at utils.ThreadDumper.main(ThreadDumper.java:145)
5. 如果服务器是作为Windows服务的方式运行, 请运行下列命令:
WL_HOME\bin\beasvc -dump -svcname:service-name
其它一些获取Thread Dump的工具有jrcmd, jrmc(JRockit VM自带) ,Samurai, JProfiler等, 还可通过JMX编程的方式获取, 如JDK自带示例代码:
$JAVA_HOME\demo\management\FullThreadDump