Linux中查找最耗CPU的Java代码问题
第一步: 查看消耗CPU最高的进程PID
[lolaage@web2 tomcat-ns]$ top
top - 13:23:32 up 42 days, 19:11, 3 users, load average: 1.01, 0.86, 0.78
Tasks: 153 total, 2 running, 151 sleeping, 0 stopped, 0 zombie
%Cpu(s): 16.3 us, 0.8 sy, 0.0 ni, 82.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 16267172 total, 1135628 free, 6554372 used, 8577172 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 9275688 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
23496 lolaage 20 0 9985736 1.978g 11148 S 104.8 12.7 32:17.81 java
5081 lolaage 20 0 1289012 328804 2012 S 9.7 2.0 2562:11 srs
1958 lolaage 20 0 10.631g 2.809g 7520 S 8.9 18.1 2332:34 java
1 root 20 0 43800 3700 1932 S 0.0 0.0 6:29.39 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:01.03 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 2:12.16 ksoftirqd/0
第二步:查看消耗CPU最高的线程TID
[lolaage@video1 mpmt-socket]$ ps -mp 23496 -o THREAD,tid,time
USER %CPU PRI SCNT WCHAN USER SYSTEM TID TIME
lolaage 51.6 - - - - - - 00:32:22
lolaage 0.0 19 - futex_ - - 23496 00:00:00
lolaage 0.3 19 - futex_ - - 23508 00:00:14
lolaage 0.0 19 - ep_pol - - 23530 00:00:00
lolaage 0.0 19 - futex_ - - 23539 00:00:00
lolaage 4.5 19 - futex_ - - 23541 00:02:51
lolaage 4.5 19 - futex_ - - 23543 00:02:51
lolaage 4.5 19 - futex_ - - 23545 00:02:52
lolaage 4.5 19 - futex_ - - 23546 00:02:51
lolaage 4.5 19 - futex_ - - 23547 00:02:51
lolaage 4.6 19 - - - - 23548 00:02:55
lolaage 5.3 19 - futex_ - - 23549 00:03:19
lolaage 5.3 19 - futex_ - - 23550 00:03:20
lolaage 4.5 19 - futex_ - - 23551 00:02:50
lolaage 4.5 19 - futex_ - - 23552 00:02:51
lolaage 0.0 19 - futex_ - - 23553 00:00:00
第三步:把线程ID转为16进制
[lolaage@video1 mpmt-socket]$ printf "%x\n" 23549
5bfd
第四步:查看堆栈信息
[lolaage@video1 mpmt-socket]$ jstack 23496 |grep 5bfd -A 30
"startQuertz_Worker-7" #25 prio=5 os_prio=0 tid=0x00007fb5fcdf8800 nid=0x5bfd in Object.wait() [0x00007fb5f6629000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:568)
- locked <0x00000006c8d35208> (a java.lang.Object)
"startQuertz_Worker-6" #24 prio=5 os_prio=0 tid=0x00007fb5fcdf6800 nid=0x5bfc in Object.wait() [0x00007fb5f672a000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:568)
- locked <0x00000006c8d15290> (a java.lang.Object)
"startQuertz_Worker-5" #23 prio=5 os_prio=0 tid=0x00007fb5fcdf4800 nid=0x5bfb in Object.wait() [0x00007fb5f682b000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:568)
- locked <0x00000006c8d14fa8> (a java.lang.Object)
"startQuertz_Worker-4" #22 prio=5 os_prio=0 tid=0x00007fb5fcdf2800 nid=0x5bfa in Object.wait() [0x00007fb5f692c000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:568)
- locked <0x00000006c8d14cc0> (a java.lang.Object)
经检查发现相关的程序代码中使用了locked导致的
Linux中查找最耗CPU的Java代码问题的更多相关文章
- Linux中查找最耗性能的JAVA代码
在这里总结一下查找Linux.Java环境下最耗CPU性能的代码段的方法.基本上原理就是使用top命令查看最耗cpu的进程和线程(子进程).使用jstack把java线程堆栈给dump下来.然后,在堆 ...
- linux中查找命令find、locate、whereis、which、type区别
linux中查找命令find.locate.whereis.which.type区别 1. find Java代码 find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件.与查询数据库(/ ...
- linux中查找文件属于那个软件包的方法
一.linux中查找文件属于那个软件包的方法 [root@salt prod]# whereis htpasswdhtpasswd: /usr/bin/htpasswd /usr/share/man/ ...
- linux中查找(find、locate、which、whereis、grep)命令汇总、帮助命令(man、whatis、apropos、info、help)汇总
(一)find命令详解 find:功能:文件搜索: 语法:find[搜索范围][匹配条件]: 只要匹配条件完全符合才可以被显示,使用通配符*匹配条件*则可以显示匹配条件的所有目录,问号?匹配单个字符 ...
- systemd-analyze – 在Linux中查找系统启动性能统计信息
您是否在使用 systemd 系统和服务管理器,并且您的 Linux 系统需要较长时间才能启动,或者您希望查看系统启动性能的报告? 如果是的话,你已经登陆了正确的地方. 在本文中,我们将向您展示如何使 ...
- 如何使用find命令在Linux中查找文件
Linux Find命令是Linux系统管理员工具库中最强大的工具之一. Find是一个命令行实用程序,它允许您根据用户给定的表达式搜索目录层次结构中的文件和目录,并对每个匹配的文件应用用户指定的操作 ...
- linux中表示系统信息如cpu mem disk等内容都在 /proc
linux中表示系统信息的 内容都在 /proc 要查看系统的任何信息, 如cpu mem 磁盘等等, 都在 /proc下, 如: cpuinfo ,meminfo diskstatus 等等
- 在 Linux 中查找和删除重复文件
原文链接:https://www.linuxprobe.com/linux-FSlint.html FSlint同时具有GUI和CLI模式.因此,对于新手来说,这是一个用户友好的工具.FSlint不仅 ...
- 查找占用资源高的JAVA代码
1. /tmp/hsperfdata_$USER目录 $USER是启动JAVA进程的用户,这里保存的所有用户启动的JAVA进程. 这些都JAVA进程的PID,里面存放的是JVM进程信息.你所用的jsp ...
随机推荐
- 主席树K-th Number
/*K-th NumberTime Limit: 20000MS Memory Limit: 65536KTotal Submissions: 44535 Accepted: 14779Case Ti ...
- Django系列(四):多表操作
1.创建模型 例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之间是一对一(on ...
- dashucoding记录2019.6.7
购买阿里云ECS主机 购买域名 申请备案 环境配置 安装wordpress 域名解析 在"产品与服务"中选择云服务器ECS 购买完域名之后建议去实名认证 域名购买链接:http:/ ...
- mysql中 where与having的区别
having子句与where有相似之处但也有区别,都是设定条件的语句.在查询过程中聚合语句(sum,min,max,avg,count)要比having子句优先执行.而where子句在查询过程中执行优 ...
- Mininet系列实验(一):Mininet使用源码安装
1 实验目的 掌握Mininet使用源码安装的方法. 2 实验原理 Mininet 是一个轻量级软件定义网络和测试平台:它采用轻量级的虚拟化技术使一个单一的系统看起来像一个完整的网络运行相关的内核系统 ...
- 设备树中的interrupts属性解析
interrupts属性会有两种不同的参数: 1. 带两个参数的情形 示例: interrupt-parent = <&gpio2>; interrupts = <5 1& ...
- Qt 获取键盘输入
void vc_widget::keyPressEvent(QKeyEvent *ev) { if (ev->key() == Qt::Key_Up) { qDebug() << & ...
- spring boot打开tomcat的access日志
spring boot虽说内置了tomcat,但打出来的是jar包而非war包,更没有access日志,那么如何打开access日志呢?只需在application.properties中加入相关配置 ...
- mysql通过binlog恢复删除数据
删除误操作有时会意外出现,如果你有备份表数据的好习惯,那么至少你可以追回备份前的那些数据.如果我们打开了mysql的binlog,那么可以通过它的增量操作日志来恢复数据.怎么打开binlog前篇已有说 ...
- linux简单命令2---文件搜索命令
1:文件搜索命令:locate 文件名搜索速度快,缺点不能复杂的搜索.在数据库(/var/lib/mlocate)查找.它是一天一更新.可以强制更新数据库:updatedb 2:搜索命令的命令:whe ...