微服务问题定位——jstack

jstack

功能

查看运用程序jvm的堆栈情况,可以找出线程的运行情况,从而排查一些隐患或者服务卡顿的问题

具体说明

jstack用于打印出给定的java进程id或者core file或者远程调试服务的java堆栈信息,如果是在64位机器上,需要指定选项-J-d64

如果java程序崩溃会生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松知道java程序是如何崩溃和在程序何处发生问题。

option参数

-F 当jstack -l pid 没有响应的时候强制打印栈信息

-l 长队列,打印关于锁的附加信息

-m 打印java和native c/c++框架的所有栈信息

命令格式

jstack [option] pid

jstack [option] executable core

jstack [option] [server-id@]remote-hostname-or-IP

命令格式说明

executable core 产生core dump的java可执行文件

remote-hostname-or-IP 远程debug服务的主机名或ip

server-id 唯一id,假如一台主机上多个远程debug服务

使用实例

一般需要与top命令联用,使用top命令找出异常的进程(一般是cpu使用异常的进程)

通过top -Hp pid来定位该进程下各线程的cpu使用情况

再通过jstack pid命令打印该线程对应的堆栈情况

扩展

  • 在top命令中,已经获取到了占用cpu资源较高的线程pid,将该pid转成16进制的值(在线转换),在thread dump中每个线程都有一个nid,找到对应的nid即可
  • 什么是java core和heap dump文件,参考
显示 Gitment 评论