Linux环境下,当发觉java进程占用CPU资源很高linux下查看java版本linux安装,且又要想更进一步查出哪一个java线程占用了CPU资源时,根据以下步骤进行查找:
(一):通过【top-p12377-H】查看java进程的有什么线程的运行情况;(二):和通过【jstack12377>stack.log】生成Java线程的dump详尽信息;
先用top命令找出占用资源厉害的java进程id,如图:#top如上图所示,java的进程id为’52554′,接出来用top命令单独对这个进程中的所有线程作监视:****1****top-p52554-H#top视图上面上面可以通过快捷键依次b,x高亮显示top的列找出须要的线程,默认CPU排序,Shift+可以左右联通高亮排序的列;如图:(这时就看下来那个java线程CPU高,那个线程显存用的多)如上图所示linux下查看java版本,linux下,所有的java内部线程,似乎都对应了一个进程id,也就是说linux操作系统安装,linux上的sunjvm将java程序中的线程映射为了操作系统进程;我们看见,占用CPU资源最高的那种进程id是’15417′,这个进程id对应java线程信息中的’nid’(‘n’standsfor‘native’);(1)要想找到究竟是哪段具体的代码占用了这么多的资源,先使用jstack打出当前栈信息到一个文件里,例如stack.log:python-c”printhex(9757)”然杂记住二补码的号catstack.log|grep二补码的号1****jstack****52554****>****stack****.****log****之后使用’jtgrep’脚本把这个进程号为’9757′的java线程在stack.log中抓下来:1jtgrep9757stack.log
其中,’jtgrep’是自己随意写的一个shell脚本:1#!/bin/sh3nid=python-c“”printhex($1)”““4grep-i$nid$2道理很简单,就是把’9757′转换成16补码后,直接grepstack.log;可以看见,被grep出的那种线程的nid=0x3c39,刚好是15417的16补码表示。
至此关于Linux系统中查看java线程的具体方式分享结束,你们如有疑惑欢迎在评论区留言。