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超高排查的更多相关文章

  1. linux下分析java程序占用CPU、内存过高

    一.CPU过高分析 1)使用TOP命令查看CPU.内存使用状态可以发现CPU占用主要分为两部分,一部分为系统内核空间占用CPU百分比,一部分为用户空间占用CPU百分比.其中CPU状态中标示id的为空闲 ...

  2. windows下揪出java程序占用cpu很高的线程 并找到问题代码 死循环线程代码

    我的一个java程序偶尔会出现cpu占用很高的情况 一直不知道什么原因 今天终于抽时间解决了 系统是win2003 jvisualvm 和 jconsole貌似都只能看到总共占用的cpu 看不到每个线 ...

  3. windows下揪出java程序占用cpu很高的线程

    背景 天天搞java,这些监控也都知道,用过,但也没往细里追究.因为也没碰见这种问题,这次还是静下来走一遍流程吧.与网上基本一致,不过我区分了下linux和windows的不一样.我感觉基本是程序写成 ...

  4. 线上Java程序占用 CPU 过高,请说一下排查方法?

    我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在 ...

  5. 服务器CPU又爆了?Linux快速排查Java程序占用CPU很高的方法

    这个问题可以说是 Java 面试的高频面试题了,有很多面试官都喜欢问这个问题,问题可能是下面这样的. 线上一台服务器 CPU 使用率100% 了,如果你碰到这样的情况,如何排查并找到问题原因? 1.场 ...

  6. Linux排查Java程序占用CPU很高的解决办法

    Java的工具集相当强大,学习成本也很低,处理线上问题时,jstack这个工具就比微软的windbg,好学好用很多,3步找出占用CPU很高的源所在.而windbg反人类的各种命令,实在不敢恭维. 故意 ...

  7. Linux排查java程序占用cpu过高的线程代码

    分几步骤: 1.通过top,查出占用CPU过高的java进程 ,比如: pid :6666 2.通过ps -mp 6666 -o THREAD,tid,time| sort -n -k1 -r 查看此 ...

  8. Windows服务器java.exe占用CPU过高问题分析及解决

    最近在测试一个用java语言实现的数据采集接口时发现,接口一旦运行起来,CPU利用率瞬间飙升到85%-95%,一旦停止就恢复到40%以下,这让我不得不面对以前从未关注过的程序性能问题. 在硬着头皮查找 ...

  9. Java进程占用CPU资源过多分析

    问题描述: 生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高. 问题分析: 1,程序属于CPU密集型,和开发沟通 ...

随机推荐

  1. TTL与CMOS门电路

    个人观点总结 对TTL和CMOS门电路的认识: 1.构成 TTL集成电路一般都是有三极管(或二极管)和电阻.电容构成,其中三极管(二极管)是作为主要的开关器件 CMOS集成电路一般是由场效应管和电阻. ...

  2. UvaOJ 10167

    暴力搜索 #include<cstdio> struct node { int x; int y; }s[]; int main() { //freopen("input.txt ...

  3. IIS伪静态配置,使用URLRewriter实现伪静态

    前段时间开发公司官网,用到了URLRewriter实现伪静态,在VS调试模式下没有任何问题,部署到IIS上后总是提示404的错误,查了很久才知道IIS需要做相应的配置才能实现动态跳转的功能,现将IIS ...

  4. ASP.NET MVC5 高级编程-学习日记-第一章 入门

    1.1 ASP.NET MVC 简介 ASP.NET是一种构建Web应用程序的框架,它将一般的MVC(Model-View-Controller)模式应用于ASP.NET框架. 1.1.1 MVC模式 ...

  5. 3.怎样将ASP.NET MVC应用程序发布到IIS

    这一篇,教大家怎么将ASP.NET MVC应用程序发布到本地或者IIS中.打开上一篇创建的ASP.NET MVC 5.0应用程序.[PS:上一篇--->2.第一个ASP.NET MVC 5.0应 ...

  6. 背水一战 Windows 10 (54) - 控件(集合类): ItemsControl 的布局控件 - OrientedVirtualizingPanel, VirtualizingStackPanel, WrapGrid

    [源码下载] 背水一战 Windows 10 (54) - 控件(集合类): ItemsControl 的布局控件 - OrientedVirtualizingPanel, VirtualizingS ...

  7. 18_python_类关系

    一.类与类之间的关系          1.依赖关系 class Elephant: def __init__(self, name): self.name = name def open(self, ...

  8. Synchronzied(内置锁)

    原文地址:深入JVM锁机制1-synchronized 1. 线程的状态与转换 当多个线程同时请求某个对象监视器时,对象监视器会设置几种状态用来区分请求的线程: Contention List:所有请 ...

  9. dubbo+zookeeper注册服务报错问题:No service registed on zookeeper

    2019-04-04 11:23:40,372 ERROR [tomcat-threads--1] (com.bill99.dolphin.controller.ExceptionController ...

  10. AutoCompleteTextView搭配Poi搜索实现多项选择

    项目需要 需要用到AutoCompleteTextView控件,在输入之后能在下方产生一个推荐结果的列表,就类似于金山词霸一类软件.输入一两个字符就能出来一系列类似的的单词, 这里做的例子是输入城市名 ...