https://blog.csdn.net/MrZhangXL/article/details/77711996

第一步 :执行top命令,查出当前机器线程情况

  1. top - 09:14:36 up 146 days, 20:24, 1 user, load average: 0.31, 0.37, 0.45
  2. Tasks: 338 total, 1 running, 337 sleeping, 0 stopped, 0 zombie
  3. Cpu(s): 0.4%us, 0.4%sy, 0.0%ni, 99.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
  4. Mem: 16331456k total, 14017124k used, 2314332k free, 316724k buffers
  5. Swap: 16506876k total, 36200k used, 16470676k free, 5151404k cached
  6. PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  7. 6107 root 20 0 9724m 1.3g 15m S 8.0 8.4 624:22.34 java
  8. 26678 root 20 0 9643m 498m 17m S 8.0 3.1 61:34.58 java
  9. 10168 root 20 0 12.9g 4.7g 12m S 1.7 30.0 329:11.58 java
  10. 11291 root 20 0 9654m 1.2g 15m S 0.7 7.7 35:17.04 java
  11. 28662 root 20 0 15168 1436 940 R 0.7 0.0 0:00.12 top
  12. 61 root 20 0 0 0 0 S 0.3 0.0 4:10.55 ksoftirqd/14
  13. 68 root 20 0 0 0 0 S 0.3 0.0 119:58.11 events/1
  14. 2987 root 20 0 0 0 0 S 0.3 0.0 31:22.27 flush-253:2
  15. 1 root 20 0 19344 1204 980 S 0.0 0.0 0:03.71 init
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

第二步:通过jstack命令dump当前内存中线程信息 
jstack 26678

  1. [root@172_16_1_177 logs]# jstack 26678
  2. 2017-08-30 10:34:29
  3. Full thread dump Java HotSpot(TM) 64-Bit Server VM (24.79-b02 mixed mode):
  4. "Attach Listener" daemon prio=10 tid=0x00007f96dc001000 nid=0x70d5 waiting on condition [0x0000000000000000]
  5. java.lang.Thread.State: RUNNABLE
  6. "DubboServerHandler-172.16.1.177:28082-thread-50" daemon prio=10 tid=0x00007f967c001800 nid=0x70a1 waiting on condition [0x00007f9543040000]
  7. java.lang.Thread.State: WAITING (parking)
  8. at sun.misc.Unsafe.park(Native Method)
  9. - parking to wait for <0x00000000ca928680> (a java.util.concurrent.SynchronousQueue$TransferStack)
  10. at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
  11. at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:458)
  12. at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:359)
  13. at java.util.concurrent.SynchronousQueue.take(SynchronousQueue.java:925)
  14. at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068)
  15. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
  16. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
  17. at java.lang.Thread.run(Thread.java:745)
  18. "DubboServerHandler-172.16.1.177:28082-thread-49" daemon prio=10 tid=0x00007f95f820c000 nid=0x708e waiting on condition [0x00007f9543081000]
  19. java.lang.Thread.State: WAITING (parking)
  20. at sun.misc.Unsafe.park(Native Method)
  21. - parking to wait for <0x00000000ca928680> (a java.util.concurrent.SynchronousQueue$TransferStack)
  22. at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
  23. at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:458)
  24. at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:359)
  25. at java.util.concurrent.SynchronousQueue.take(SynchronousQueue.java:925)
  26. at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068)
  27. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
  28. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
  29. at java.lang.Thread.run(Thread.java:745)
  30. "DubboServerHandler-172.16.1.177:28082-thread-48" daemon prio=10 tid=0x00007f9674001800 nid=0x7085 waiting on condition [0x00007f95430c2000]
  31. java.lang.Thread.State: WAITING (parking)
  32. at sun.misc.Unsafe.park(Native Method)
  33. - parking to wait for <0x00000000ca928680> (a java.util.concurrent.SynchronousQueue$TransferStack)
  34. at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
  35. at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:458)
  36. at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:359)
  37. at java.util.concurrent.SynchronousQueue.take(SynchronousQueue.java:925)
  38. at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068)
  39. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
  40. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
  41. at java.lang.Thread.run(Thread.java:745)
  42. "DubboServerHandler-172.16.1.177:28082-thread-47" daemon prio=10 tid=0x00007f95f820a000 nid=0x7084 waiting on condition [0x00007f9543103000]
  43. java.lang.Thread.State: WAITING (parking)
  44. at sun.misc.Unsafe.park(Native Method)
  45. - parking to wait for <0x00000000ca928680> (a java.util.concurrent.SynchronousQueue$TransferStack)
  46. at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
  47. at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:458)
  48. at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:359)
  49. at java.util.concurrent.SynchronousQueue.take(SynchronousQueue.java:925)
  50. at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068)
  51. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
  52. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
  53. at java.lang.Thread.run(Thread.java:745)
  54. "DubboServerHandler-172.16.1.177:28082-thread-46" daemon prio=10 tid=0x00007f95f8207800 nid=0x7082 waiting on condition [0x00007f9543144000]
  55. java.lang.Thread.State: WAITING (parking)
  56. at sun.misc.Unsafe.park(Native Method)
  57. - parking to wait for <0x00000000ca928680> (a java.util.concurrent.SynchronousQueue$TransferStack)
  58. at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
  59. at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:458)
  60. at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:359)
  61. at java.util.concurrent.SynchronousQueue.take(SynchronousQueue.java:925)
  62. at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068)
  63. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
  64. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
  65. at java.lang.Thread.run(Thread.java:745)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72

4.1、使用方案 
cpu飙高,load高,响应很慢 
方案: 
* 一个请求过程中多次dump 
* 对比多次dump文件的runnable线程,如果执行的方法有比较大变化,说明比较正常。如果在执行同一个方法,就有一些问题了。 
查找占用cpu最多的线程信息 
方案: 
* 使用命令: top -H -p pid(pid为被测系统的进程号),找到导致cpu高的线程id。 
上述Top命令找到的线程id,对应着dump thread信息中线程的nid,只不过一个是十进制,一个是十六进制。 
* 在thread dump中,根据top命令查找的线程id,查找对应的线程堆栈信息。 
cpu使用率不高但是响应很慢 
方案: 
* 进行dump,查看是否有很多thread struck在了i/o、数据库等地方,定位瓶颈原因。 
请求无法响应 
方案: 
* 多次dump,对比是否所有的runnable线程都一直在执行相同的方法,如果是的,恭喜你,锁住了!

参考资料:http://blog.csdn.net/rachel_luo/article/details/8920596

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/MrZhangXL/article/details/77711996

服务器cpu负载过高问题排查的更多相关文章

  1. CPU负载过高异常排查实践与总结

    昨天下午突然收到运维邮件报警,显示数据平台服务器cpu利用率达到了98.94%,而且最近一段时间一直持续在70%以上,看起来像是硬件资源到瓶颈需要扩容了,但仔细思考就会发现咱们的业务系统并不是一个高并 ...

  2. linux Java项目CPU内存占用高故障排查

    linux Java项目CPU内存占用高故障排查 top -Hp 进程号 显示进程中每个线程信息,配合jstack定位java线程运行情况 # 线程详情 jstack 线程PID # 查看堆内存中的对 ...

  3. kubelet CPU 使用率过高问题排查

    kubelet CPU 使用率过高问题排查 问题背景 客户的k8s集群环境,发现所有的worker节点的kubelet进程的CPU使用率长时间占用过高,通过pidstat可以看到CPU使用率高达100 ...

  4. 服务器CPU使用率过高排查与解决思路

    发现服务器的cpu使用率特别高 排查思路: -使用top或者mpstat查看cpu的使用情况# mpstat -P ALL 2 1Linux 2.6.32-358.el6.x86_64 (linux— ...

  5. 排查tomcat服务器CPU使用率过高

    tomcat要运行依赖于JDK,tomcat服务器的CPU使用率过高,大多都是因为部署的web程序的问题. 一.现象描述 在一次线上环境,前台访问页面的速度越来越慢,从浏览器F12中看到发出的请求都是 ...

  6. cpu load过高问题排查

    load average的概念 top命令中load average显示的是最近1分钟.5分钟和15分钟的系统平均负载. 系统平均负载被定义为在特定时间间隔内运行队列中(在CPU上运行或者等待运行多少 ...

  7. 性能优化-CPU占用过高问题排查

    1. 性能优化是什么? 1.1 性能优化就是发挥机器本来的性能 1.2 性能瓶颈在哪里,木桶效应.   CPU占用过高 1.现象重现 CPU占用过高一般情况是代码中出现了循环调用,最容易出现的情况有几 ...

  8. 机器CPU load过高问题排查

    load average的概念 系统平均负载定义:在特定时间间隔内运行队列中(在CPU上运行或者等待运行多少进程)的平均进程数.如果一个进程满足以下条件则其就会位于运行队列中: 它没有在等待I/O操作 ...

  9. 一次java Cpu占用过高的排查

    某一个项目CPU占用率一直很高,经常在40%-50%之间,最近比较闲,就开始了排查工作. 1.通过 jstack命令输出进程的堆栈信息 jstack 2788 >C:\log.txt 将堆栈信息 ...

随机推荐

  1. svg 学习笔记

    http://git.oschina.net/heboliufengjie/demo/tree/master/svg?dir=1&filepath=svg&oid=3a44203972 ...

  2. unity中实现三个Logo图片进行3秒钟的若隐若现后互相切换Logo图片

    private List<Sprite> storeTexture; public void Start() { storeTexture = new List<Sprite> ...

  3. bzoj1239

    题解: 首先计算出两两之间的距离 然后二分答案 然后贪心判断是否可以放置少于等于k个 代码: #include<bits/stdc++.h> using namespace std; ; ...

  4. Eclipse界面简介

    下载安装完成后,Eclipse的界面如下: (6)为eclipse的perspective(视图方案)由于安装的是for Java development的eclipse,故视图界面默认 为使用Jav ...

  5. Java数值类型之间转换

    Java之间的数值转换如图所示,实心箭头代表无数据丢失,虚线箭头代表可能丢失 例如:123456789是一个大的整数,包含的位数比float类型能够表达的位数多,但这个数转换为float类型时,将会得 ...

  6. UNICODE_STRING(用户模式 内核模式)

    UNICODE_STRING结构: typedef struct  _UNICODE_STRING { USHORT Length;                                   ...

  7. Unity项目中的资源管理

    这是我在2017金山技术开放日分享的部分内容.从贴图资源格式配置的介绍开始,引申出资源配置工具,最后再谈谈一整套项目资源管理方案.在GitHub上可以获取到资源配置工具的代码,是基于下面理念的一份简单 ...

  8. 前端select动态加载

    <select id ="ycode" cssclass="form-control selectpicker" name="ydljgId&q ...

  9. 字符界面的贪吃蛇--链表--C++

    前天看了下链表,由于平时对链表的使用不多,所以对链表的应用也没什么了解,所以想来想去,就想用链表实现一下贪吃蛇. 下面言归正传,先看效果图,再看代码,其他没有了! 图1: 图2: 代码: #inclu ...

  10. python检测网络延迟

    #!/usr/bin/env python # coding: utf-8 # coding: cp950 ''' Create Date: 2012-11-06 Version: 1.0 Descr ...