目前很多企业的后台服务都是 java 服务,在故障出现时能及时 dump jvm 内存和线程栈对于故障的分析及定位是非常重要的。接下来介绍如何进行 dump 操作,并分享一个简单脚本实现服务器线程数超过一定阀值时自动 dump 线程数最高的 java 进程的内存及线程栈。
1. dump jvm 内存
命令格式:
1 | jmap -dump:format=b,file=dump_file_name pid |
举例:dump pid 为 4738
的 java 进程的内存到 app_mem_dump.bin
文件
1 | jmap -dump:format=b,file=app_mem_dump.bin 4738 |
2. dump jvm 线程栈
命令格式:
1 | jstack pid > dump_file_name |
举例:dump pid 为 4738
的 java 进程的线程栈到 app_thread_dump.txt
文件
1 | jstack 4738 > app_thread_dump.txt |
脚本分享
当服务器线程数超过 2500 时自动 dump 线程数最高的 java 进程的内存及线程栈。
1 |
|