记一次java程序占用cpu超高排查
1、首先通过top命令查看占用cpu过高的pid
#top
top - 18:07:25 up 48 days, 1:07, 3 users, load average: 11.94, 11.90, 9.46
Tasks: 271 total, 1 running, 270 sleeping, 0 stopped, 0 zombie
%Cpu(s): 74.2 us, 0.8 sy, 0.0 ni, 24.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.2 st
KiB Mem : 65808884 total, 5901708 free, 46771732 used, 13135444 buff/cache
KiB Swap: 524284 total, 129448 free, 394836 used. 18397044 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
444 root 20 0 20.181g 0.011t 28220 S 1181 17.2 207:46.21 java
3631 root 20 0 19.415g 1.443g 28184 S 19.6 2.3 1:42.24 java
24528 root 20 0 10.739g 671532 27128 S 3.7 1.0 8:58.51 java
16952 root 20 0 20.416g 340340 6496 S 3.3 0.5 158:35.14 java
15584 root 20 0 144036 4036 2628 S 1.3 0.0 13:31.14 sshd
4717 root 20 0 2942716 1.188g 7652 S 1.0 1.9 761:57.40 java
25 root 20 0 0 0 0 S 0.3 0.0 84:26.67 rcu_sched
32 root 20 0 0 0 0 S 0.3 0.0 6:25.61 rcuos/6
2759 root 20 0 20.209g 1.985g 28308 S 0.3 3.2 1:46.17 java
3474 nginx 20 0 124032 3680 452 S 0.3 0.0 1:49.80 nginx
pid为444,cpu使用率达到了1181%
2、排查线程
使用命令:ps -mp pid -o THREAD,tid,time pid就是上面找出的444
#ps -mp 444 -o THREAD,tid,time
USER %CPU PRI SCNT WCHAN USER SYSTEM TID TIME
root 792 - - - - - - 01:18:40
root 0.0 19 - futex_ - - 444 00:00:00
root 4.0 19 - futex_ - - 480 00:00:24
root 58.5 19 - - - - 481 00:05:48
root 58.6 19 - - - - 482 00:05:49
root 58.5 19 - - - - 483 00:05:48
root 58.6 19 - - - - 484 00:05:49
root 58.5 19 - - - - 485 00:05:49
root 58.6 19 - - - - 486 00:05:49
root 58.5 19 - - - - 487 00:05:49
root 58.5 19 - - - - 488 00:05:49
root 58.6 19 - - - - 489 00:05:49
root 58.9 19 - - - - 490 00:05:51
root 58.5 19 - - - - 491 00:05:48
root 58.5 19 - - - - 492 00:05:48
root 58.6 19 - - - - 493 00:05:49
root 3.4 19 - futex_ - - 494 00:00:20
root 0.0 19 - futex_ - - 495 00:00:00
root 0.0 19 - futex_ - - 496 00:00:00
root 0.0 19 - futex_ - - 498 00:00:00
root 1.2 19 - futex_ - - 499 00:00:07
root 1.5 19 - futex_ - - 500 00:00:09
root 1.2 19 - futex_ - - 501 00:00:07
root 1.0 19 - futex_ - - 502 00:00:06
root 1.3 19 - futex_ - - 503 00:00:07
root 1.1 19 - futex_ - - 505 00:00:06
红色区,很明显创建的线程没有执行,不断的进行GC,导致cpu飙高。找到红色区问题线程了。
3、查看问题线程堆栈
将问题线程的tid转换成16进制:
#printf "%x\n" 485
1e5
jstack查看线程堆栈信息
#jstack pid | grep tid
#jstack 444 | grep 1e5
"GC task thread#4 (ParallelGC)" os_prio=0 tid=0x00007f87d402b800 nid=0x1e5 runnable
jstat查看进程内存状况
jstat -gcutil 444 2000 10
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 0.00 100.00 99.99 97.42 95.76 23 40.676 119 430.327 471.004
0.00 0.00 100.00 99.99 97.42 95.76 23 40.676 119 430.327 471.004
0.00 0.00 100.00 99.99 97.43 95.77 23 40.676 120 434.709 475.385
0.00 0.00 100.00 99.99 97.43 95.77 23 40.676 120 434.709 475.385
0.00 0.00 100.00 99.99 97.43 95.77 23 40.676 120 434.709 475.385
0.00 0.00 100.00 99.99 97.45 95.81 23 40.676 121 439.928 480.604
0.00 0.00 100.00 99.99 97.46 95.81 23 40.676 122 442.248 482.924
0.00 0.00 100.00 99.99 97.46 95.81 23 40.676 122 442.248 482.924
0.00 0.00 100.00 99.99 97.46 95.81 23 40.676 122 442.248 482.924
0.00 0.00 100.00 99.99 97.46 95.82 23 40.676 123 447.374 488.051
E表示新生代内存使用率,O表示老生代内存使用率
记一次java程序占用cpu超高排查的更多相关文章
- linux下分析java程序占用CPU、内存过高
一.CPU过高分析 1)使用TOP命令查看CPU.内存使用状态可以发现CPU占用主要分为两部分,一部分为系统内核空间占用CPU百分比,一部分为用户空间占用CPU百分比.其中CPU状态中标示id的为空闲 ...
- windows下揪出java程序占用cpu很高的线程 并找到问题代码 死循环线程代码
我的一个java程序偶尔会出现cpu占用很高的情况 一直不知道什么原因 今天终于抽时间解决了 系统是win2003 jvisualvm 和 jconsole貌似都只能看到总共占用的cpu 看不到每个线 ...
- windows下揪出java程序占用cpu很高的线程
背景 天天搞java,这些监控也都知道,用过,但也没往细里追究.因为也没碰见这种问题,这次还是静下来走一遍流程吧.与网上基本一致,不过我区分了下linux和windows的不一样.我感觉基本是程序写成 ...
- 线上Java程序占用 CPU 过高,请说一下排查方法?
我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在 ...
- 服务器CPU又爆了?Linux快速排查Java程序占用CPU很高的方法
这个问题可以说是 Java 面试的高频面试题了,有很多面试官都喜欢问这个问题,问题可能是下面这样的. 线上一台服务器 CPU 使用率100% 了,如果你碰到这样的情况,如何排查并找到问题原因? 1.场 ...
- Linux排查Java程序占用CPU很高的解决办法
Java的工具集相当强大,学习成本也很低,处理线上问题时,jstack这个工具就比微软的windbg,好学好用很多,3步找出占用CPU很高的源所在.而windbg反人类的各种命令,实在不敢恭维. 故意 ...
- Linux排查java程序占用cpu过高的线程代码
分几步骤: 1.通过top,查出占用CPU过高的java进程 ,比如: pid :6666 2.通过ps -mp 6666 -o THREAD,tid,time| sort -n -k1 -r 查看此 ...
- Windows服务器java.exe占用CPU过高问题分析及解决
最近在测试一个用java语言实现的数据采集接口时发现,接口一旦运行起来,CPU利用率瞬间飙升到85%-95%,一旦停止就恢复到40%以下,这让我不得不面对以前从未关注过的程序性能问题. 在硬着头皮查找 ...
- Java进程占用CPU资源过多分析
问题描述: 生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高. 问题分析: 1,程序属于CPU密集型,和开发沟通 ...
随机推荐
- hdu 4901 划分序列使异或和==且和
http://acm.hdu.edu.cn/showproblem.php?pid=4901 给定一个序列,要求选出两个集合,S和T,要求S中选中的元素的下标都要小于T中元素的下标.并且说S中元素的异 ...
- ASP.NET MVC Area 区域
大型网站或项目通常有很多子系统或功能模块,如大型网站可能包含酒店.旅游.机票子系统,通过二级域名来访问,或者一个网站的前台和后台模块,每个团队负责某一子系统或模块,为了各团队进行协同开发,我们可以分不 ...
- java 异步机制与同步机制的区别
所谓异步输入输出机制,是指在进行输入输出处理时,不必等到输入输出处理完毕才返回.所以异步的同义语是非阻塞(None Blocking). 网上有很多网友用很通俗的比喻 把同步和异步讲解的很透彻 转过 ...
- 操作Checkbox标签
在前端开发中,少不了对Checkbox的操作. 常用的的方法有2个:.is()和.prop()方法.前者是判断 checkbox的状态,选不是未选.而后者为checkbox设置一个值,可以设置chec ...
- How do I convert an IIR filter into a FIR filter in digital signal processing?
Maybe you were asking if there is some kind of design tool allowing to convert an IIR filter into an ...
- Python 私有变量中两个下划线 _ _item 与 一个下划线的区别 _item
python中没有常量的说法, 但是可以通过元组实现一个常量 在python的私有变量中, 存在两个下划线 _ _item 与一个下划线 _item 的区别 前面带两个下划线的私有变量: 只能在本类中 ...
- Java并发编程总结1——线程状态、synchronized
以下内容主要总结自<Java多线程编程核心技术>,不定时补充更新. 一.线程的状态 Java中,线程的状态有以下6类:NEW, RUNNABLE, BLOCKED, WAITING, TI ...
- 从工程化角度讨论如何快速构建可靠React组件
前言 React 的开发也已经有2年时间了,先从QQ的家校群,转成做互动直播,主要是花样直播这一块.切换过来的时候,业务非常繁忙,接手过来的业务比较凌乱,也没有任何组件复用可言. 为了提高开发效率,去 ...
- python实现音乐播放器
python实现音乐播放器 模块:pygame 模块:time Python 布尔循环实例: import time import pygame muxi_k = """ ...
- [原创]K8一句话密码爆破工具{秒破10万} 支持ASP/PHP/ASPX/JSP/CFM/DIY
工具: K8_FuckOneShell 20161224编译: VS2012 C# (.NET Framework v4.0)组织: K8搞基大队[K8team]作者: K8拉登哥哥博客: http ...