如何使用JDK及Linux工具查找进程中最忙的线程
来源:互联网 发布:华硕驱动升级软件 编辑:程序博客网 时间:2024/06/06 09:32
最近一个项目中在测试的时候发现负载总是很多,为了想看看到底是什么线程比较占用CPU
首先先用top查看占用最高的pid,筛选pid的话可以用项目先用账户名(我的是storm)
pid => top -u storm|head -n 1 |awk '{print $1}'
然后再根据这个pid使用top查看进程中最忙的线程,
threadId => top -Hp $pid
好,下面我们需要观察当前JVM中各个线程的执行状态,使用jstack即可
jstack $pid > info
打开info文件,发现类似的
"Thread-31" prio=10 tid=0x000000004de52800 nid=0x2517 runnable [0x0000000046942000]
这样的信息,这里的nid其实就是线程编号,只不过是十六进制格式,
printf '%x\n' $threadId,这样即可!
查到info中对应这个线程正在执行对应程序的HBase batch操作
"Thread-31" prio=10 tid=0x000000004de52800 nid=0x2517 runnable [0x0000000046942000]
java.lang.Thread.State: RUNNABLE
at java.util.concurrent.ConcurrentHashMap$HashEntry.newArray(ConcurrentHashMap.java:205)
at java.util.concurrent.ConcurrentHashMap$Segment.<init>(ConcurrentHashMap.java:291)
at java.util.concurrent.ConcurrentHashMap.<init>(ConcurrentHashMap.java:613)
at java.util.concurrent.ConcurrentHashMap.<init>(ConcurrentHashMap.java:652)
at com.xxx.hbase.HBaseHandler.doCopy(HBaseHandler.java:111)
at com.xx.hbase.HBaseHandler.runBatch(HBaseHandler.java:69)
at com.xx.hbase.HBaseHandler.run(HBaseHandler.java:53)
java.lang.Thread.State: RUNNABLE
at java.util.concurrent.ConcurrentHashMap$HashEntry.newArray(ConcurrentHashMap.java:205)
at java.util.concurrent.ConcurrentHashMap$Segment.<init>(ConcurrentHashMap.java:291)
at java.util.concurrent.ConcurrentHashMap.<init>(ConcurrentHashMap.java:613)
at java.util.concurrent.ConcurrentHashMap.<init>(ConcurrentHashMap.java:652)
at com.xxx.hbase.HBaseHandler.doCopy(HBaseHandler.java:111)
at com.xx.hbase.HBaseHandler.runBatch(HBaseHandler.java:69)
at com.xx.hbase.HBaseHandler.run(HBaseHandler.java:53)
针对此段代码优化后,
原来代码是一个线程在不停检测数据量做batch操作,后来修改为休眠5ms(之前因为设置过大导致RPC请求时出现OOM)
CPU优化从本来200-300降到20上下
0 0
- 如何使用JDK及Linux工具查找进程中最忙的线程
- linux下查找进程及终止进程操作的…
- Linux进程监控工具Supervisor的使用
- linux java 查找进程中的线程
- linux java 查找进程中的线程
- JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jsta (Linux 如何查看进程的各线程的CPU占用 )
- linux如何根据进程ID查找启动程序的路径
- linux如何根据进程ID查找启动程序的路径
- linux如何根据进程ID查找启动程序的路径
- android如何打印当前的线程及进程
- Linux 如何查看进程的各线程的CPU占用
- Linux 如何查看进程的各线程的CPU占用
- Linux 如何查看进程的各线程的CPU占用
- linux进程的创建及使用
- Linux 平台如何查看某个进程的线程数?
- Linux上如何查看某个进程的线程
- Linux上如何查看某个进程的线程
- Linux上如何查看某个进程的线程
- Spring MVC 使用AJAX
- Oracle中纵横表的转化
- Android之后台服务判断本应用Activity是否处于栈顶
- ORA-01033: ORACLE initialization or shutdown in progress 进程 ID: 0 会话 ID: 0 序列号: 0
- linux内核usb触摸屏驱动bug调试- selected device is not a touchscreen I understand
- 如何使用JDK及Linux工具查找进程中最忙的线程
- 透视MySQL数据库之更新语句
- ROC和AUC介绍以及如何计算AUC
- 判断桌面快捷方式是否已经创建
- VC++常用技巧
- FTP的主动模式和被动模式
- Ubuntu安装swftools
- Linux Shell参数扩展(Parameter Expansion)
- js页面刷新跳转的几种方式及区别