原创文章, 转载请私信. 订阅号 tastejava 学习加思考, 仔细品味java之美
背景
测试服务器部署一个项目, 供其他部门项目联调使用. 运维给发消息说那台服务器CPU占用过高一直在报警, 虽然不会影响其他虚拟机但是会影响物理机, 需要及时处理一下. 在服务器用top命令看了一下, CPU占用已经高达190%以上, 这台测试服务器是Intel® Xeon® CPU E7-4820 v2 @ 2.00GHz总共2个核心, 也就是说两个核心几乎都100%负载.
什么是jstack
jstack是JDK在%JAVA_HOME%/bin目录下提供的一个用于打印Java进程线程信息的工具, 能帮助定位异常线程具体代码位置.
jstack在排查CPU占用异常, 死锁时作用非常大, 这么一个好用的工具使用起来却非常简单, 具体命令格式为:
jstack 参数 pid
其中pid是要查看线程信息的进程id, 可以通过ps, jps, top等命令获取. 主要的核心在于jstack的参数, 它的参数只有4个.
①-F to force a thread dump. Use when jstack <pid> does not respond (process is hung)
强制导出线程信息, 当jstack命令没有被java进程响应时使用(java进程被挂起状态)
②-m to print both java and native frames (mixed mode) 打印java和native所有方法的线程信息
③-l long listing. Prints additional information about locks 打印额外的锁信息
④-h or -help to print this help message 打印帮助信息
为什么说jstack使用简单呢, 4个参数中, -h打印帮助