第一种是没有找到linux服务器jdk的具体位置

实际上java是个软连接,在继续跟进

这个实际才是jdk的实际目录,在目录中可以找到jstack

第二种是安装的jdk 没有jstack
首先查看 yum源 yum whatprovides '*/jmap'查看可安装版本 或者自己直接安装一个新的jdk版本,我选择的是 yum install java-1.8.0-openjdk-devel-debug-1.8.0.171-8.b10.el6_9.x86_64
进入目录/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el6_9.x86_64-debug/bin可以查看到jstack

重点操作:top -H -p 19607(换成你的pid)查看哪个线程占用cpu不正常
查询pid(将紫色部分替换): /root/jdk1.8.0_172/bin/jps -l| awk '{print $2,$1}'|grep -i '^collector-2.0-fat.jar'|awk '{print $2}'

pid19608的线程占用cpu过大 printf "%x\n" 19608(线程pid) 将线程转成16进制,用jstack pid查看线程

./jstack 19607查看具体问题

找到记录 能定位你的代码

如果queue为空,长时间运行就会出问题了 continue换成break 修改后代码

博客主要讲述在Linux服务器上使用jstack解决Java程序CPU占用过高的问题。一是解决找不到jdk中jstack的问题,可通过查看yum源或安装新jdk版本;二是重点操作,用top查看异常线程,将线程pid转16进制,用jstack定位代码问题。
1968

被折叠的 条评论
为什么被折叠?



