2019独角兽企业重金招聘Python工程师标准>>>

在这里对linux下、sun(oracle) JDK的线程资源占用问题的查找步骤做一个小结;linux环境下,当发现java进程占用CPU资源很高,且又要想更进一步查出哪一个java线程占用了CPU资源时,按照以下步骤进行查找:

  1. 先用top命令找出占用资源厉害的java进程id,如:
  2. 如上图所示,java的进程id为'12377',接下来用top命令单独对这个进程中的所有线程作监视:

    1

    top -p 12377 -H

    命令还可以这么写:top  -Hp 12377              如图:

  3. 如上图所示,linux下,所有的java内部线程,其实都对应了一个进程id,也就是说,linux上的sun jvm将java程序中的线程映射为了操作系统进程;我们看到,占用CPU资源最高的那个进程id是'15417',这个进程id对应java线程信息中 的'nid'('n' stands for 'native');
  4. 要想找到到底是哪段具体的代码占用了如此多的资源,先使用jstack打出当前栈信息到一个文件里, 比如stack.log:
     

    jstack 12377 > stack.log

    然后使用'jtgrep'脚本把这个进程号为'15417'的java线程在stack.log中抓出来:

     

    jtgrep 15417 stack.log

其中,'jtgrep'是自己随便写的一个shell脚本:

   
 

#!/bin/sh

nid=`python -c "print hex($1)"`
grep -i $nid $2

道理很简单,就是把'15417'转换成16进制后,直接grep stack.log;可以看到,被grep出的那个线程的nid=0x3c39,正好是15417的16进制表示。

=====================================

https://www.cnblogs.com/chengJAVA/p/5821218.html

JVM调优之jstack找出最耗cpu的线程并定位代码

jstack可以定位到线程堆栈,根据堆栈信息我们可以定位到具体代码,所以它在JVM性能调优中使用得非常多。下面我们来一个实例找出某个Java进程中最耗费CPU的Java线程并定位堆栈信息,用到的命令有ps、top、printf、jstack、grep。

第一步先找出Java进程ID,服务器上的Java应用名称为mrf-center:

root@ubuntu:/# ps -ef | grep mrf-center | grep -v grep
root     21711     1  1 14:47 pts/3    00:02:10 java -jar mrf-center.jar
得到进程ID为21711,第二步找出该进程内最耗费CPU的线程,可以使用
1)ps -Lfp pid
2)ps -mp pid -o THREAD, tid, time
3)top -Hp pid
用第三个,输出如下:

TIME列就是各个Java线程耗费的CPU时间,CPU时间最长的是线程ID为21742的线程,用

printf "%x\n" 21742

得到21742的十六进制值为54ee,下面会用到。

OK,下一步终于轮到jstack上场了,它用来输出进程21711的堆栈信息,然后根据线程ID的十六进制值grep,如下:

root@ubuntu:/# jstack 21711 | grep 54ee
"PollIntervalRetrySchedulerThread" prio=10 tid=0x00007f950043e000 nid=0x54ee in Object.wait()

可以看到CPU消耗在PollIntervalRetrySchedulerThread这个类的Object.wait(),我找了下我的代码,定位到下面的代码:

// Idle wait
getLog().info("Thread [" + getName() + "] is idle waiting...");
schedulerThreadState = PollTaskSchedulerThreadState.IdleWaiting;
long now = System.currentTimeMillis();
long waitTime = now + getIdleWaitTime();
long timeUntilContinue = waitTime - now;
synchronized(sigLock) {try {if(!halted.get()) {sigLock.wait(timeUntilContinue);}} catch (InterruptedException ignore) {}
}

它是轮询任务的空闲等待代码,上面的sigLock.wait(timeUntilContinue)就对应了前面的Object.wait()。

hadoop jstack Unable to open socket file: target process not responding or HotSpot VM not loaded

需要在hadoop用户,使用jstack 才能生效

在别的用户下可使用 sudo -u hdp jstack pid

用户名为当前tomcat的用户名

转载于:https://my.oschina.net/newchaos/blog/1575332

java:linux上找出最耗资源的线程方法相关推荐

  1. 在 Linux 上找出并解决程序错误的主要方法【转】

    在 Linux 上找出并解决程序错误的主要方法[转] 参考文章: (1)在 Linux 上找出并解决程序错误的主要方法[转] (2)https://www.cnblogs.com/sky-heaven ...

  2. 在linux中查找重复的文件夹,如何在Linux上找出并删除重复的文件:FSlint

    大家好,今天我们会学习如何在Linux PC或者服务器上找出和删除重复文件.这里有一款工具你可以工具自己的需要使用. 无论你是否正在使用Linux桌面或者服务器,有一些很好的工具能够帮你扫描系统中的重 ...

  3. linux误修改文件名恢复,如何在 Linux 中找出最近或今天被修改的文件-linux修改文件名...

    Linux 用户在命令行上遇到的常见问题之一是定位具有特定名称的文件,如果你知道确定的文件名则可能会容易得假设你忘记了白天早些时候创建的文件的名称(在你包含了数百个文件的 home 文件夹中),但现在 ...

  4. Java第三大的数,Java通过排序找出数组第三大数字

    Java通过排序找出数组第三大数字 1 方式一:对数组进行排序并返回第三大数字 通过对数组进行排序并返回第三大数字,我们可以找到java中的第三大数字.让我们看看完整的示例,以找到java数组中的第三 ...

  5. Java:Linux上java -jar xxx.jar命令执行jar包时出现Error: Invalid or corrupt jarfile xxx.jar解决方案

    Java:Linux上java -jar xxx.jar命令执行jar包时出现Error: Invalid or corrupt jarfile xxx.jar解决方案 参考文章: (1)Java:L ...

  6. (称重问题)假设你有8个球,其中一个略微重一些,但是找出这个球的惟一方法是将两个球放在天平上对比

    问题描述 假设你有8个球,其中一个略微重一些,但是找出这个球的惟一方法是将两个球放在天平上对比.最少要称多少次才能找出这个较重的球? 解答思路 至少要称2次 将8个球分成3份,其中2份每份有3个球,设 ...

  7. 基于java线上教学平台计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

    基于java线上教学平台计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java线上教学平台计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 本源码技术栈: 项目架构 ...

  8. 基于JAVA线上动漫周边商城计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA线上动漫周边商城计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA线上动漫周边商城计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 开发语 ...

  9. 在Linux上使用netstat命令查证DDOS攻击的方法

    导读 DOS攻击或者DDOS攻击是试图让机器或者网络资源不可用的攻击.这种攻击的攻击目标网站或者服务通常是托管在高防服务器比如银行,信用卡支付网管,甚至根域名服务器. 服务器出现缓慢的状况可能由很多事 ...

  10. linux查看发起ddos攻击的ip,在Linux上使用netstat命令查证DDOS攻击的方法

    导读 DOS攻击或者DDOS攻击是试图让机器或者网络资源不可用的攻击.这种攻击的攻击目标网站或者服务通常是托管在高防服务器比如银行,信用卡支付网管,甚至根域名服务器. 服务器出现缓慢的状况可能由很多事 ...

最新文章

  1. 手撕 CNN 经典网络之 VGGNet(PyTorch实战篇)
  2. Codeforces 919D - Substring
  3. 【城市沙龙】LiveVideoStack Meet|合肥:在“霸都”邂逅音视频技术
  4. 移除动态view android,请教Android,动态添加到控件能动态删除吗?
  5. ORM框架之Spring Data JPA(一)Hibernate实现JPA规范
  6. 现代通信理论与新技术 PPT笔记整理
  7. SQLServer数据通过sql插入GUID
  8. 学会这几个可视化布局思路,轻松做出企业级可视化大屏
  9. 2023毕业生必看,springboot计算机毕业设计容易通过题目都在这里!
  10. pytesseract+tensorflow开发一个自己的验证码训练集
  11. 机器学习入门——简单线性回归
  12. jQuery过年烟火炫酷背景插件音效
  13. office运行时错误,部分系统文件可能丢失或已损坏(错误代码:0x80040154)
  14. 多种图像配准方法的综合比较(KAZE、SIFT、SURF等)
  15. html的meta标记大全(转自百度)
  16. 单片机c语言中枚举,嵌入式开发-枚举详解---朱有鹏
  17. 研发管理--测试绩效管理
  18. Go版GTK:环境搭建(windows)
  19. 零起点python_零起点PYTHON机器学习快速入门 PDF |网盘链接下载|
  20. python 算法加密

热门文章

  1. mysql 哨兵_第六课补充01——主从复制原理,哨兵机制
  2. CSS3最常用选择器总结笔记
  3. .Net Core WebApi集成JWT实现身份认证
  4. 用java语言写网上购物的语句_用java代码写一个简单的网上购物车程序
  5. 2021-11-17
  6. curses.h: No such file or directory
  7. LINUX上安装openjdk
  8. JAVA中如何产生透明的VolatileImage
  9. DirectShow录屏,帧率不可控制?
  10. python中导入模块的方式_在python中导入模块中的对象有哪几种方式