线上服务CPU100%问题定位
大致思路:
一、导出thread dump、heap dump文件 (方式多种)
1.通过jvisualvm工具添加jmx连接(前提容器开启jmx),直接点击堆Dump、线程Dump操作。
2.通过连接服务器,通过命令jstack、jmap进行导出堆Dump、线程Dump文件。
二、分析thread dump:关注线程状态
- 死锁,Deadlock(重点关注)
- 执行中,Runnable
- 等待资源,Waiting on condition(重点关注)
- 等待获取监视器,Waiting on monitor entry(重点关注)
- 暂停,Suspended
- 对象等待中,Object.wait() 或 TIMED_WAITING
- 阻塞,Blocked(重点关注)
- 停止,Parked
- Deadlock:死锁线程,一般指多个线程调用间,进入相互资源占用,导致一直等待无法释放的情况。
- Runnable:一般指该线程正在执行状态中,该线程占用了资源,正在处理某个请求,有可能正在传递SQL到数据库执行,有可能在对某个文件操作,有可能进行数据类型等转换。
- Waiting on condition:等待资源,或等待某个条件的发生。具体原因需结合 stacktrace来分析。
- 如果堆栈信息明确是应用代码,则证明该线程正在等待资源。一般是大量读取某资源,且该资源采用了资源锁的情况下,线程进入等待状态,等待资源的读取。
- 又或者,正在等待其他线程的执行等。
- 如果发现有大量的线程都在处在 Wait on condition,从线程 stack看,正等待网络读写,这可能是一个网络瓶颈的征兆。因为网络阻塞导致线程无法执行。
- 一种情况是网络非常忙,几乎消耗了所有的带宽,仍然有大量数据等待网络读写;
- 另一种情况也可能是网络空闲,但由于路由等问题,导致包无法正常的到达。
- 另外一种出现 Wait on condition的常见情况是该线程在 sleep,等待 sleep的时间到了时候,将被唤醒。
- Blocked:线程阻塞,是指当前线程执行过程中,所需要的资源长时间等待却一直未能获取到,被容器的线程管理器标识为阻塞状态,可以理解为等待资源超时的线程。
三、找到最耗时的CPU进程
1.执行top -c,显示进程运行信息列表,进程按照CPU使用率排序。
2.执行top -Hp ${pid},显示一个进程的线程运行信息列表,线程按照CPU使用率排序
3.将线程PID转化为16进制(printf "0x%x\n" ${pid})
4.查看堆栈,找到线程在干嘛(jstack ${pid}| grep 0x658 -A 20)
根据jstack的输出,结合源码很容易就可以发现问题:
[john@server-1 ~]$ jstack 1612 | grep 0x658 -A 20
"Thread-0" #8 prio=5 os_prio=0 tid=0x00007f164c0e8000 nid=0x658 runnable [0x00007f1636af1000]java.lang.Thread.State: RUNNABLEat java.io.FileOutputStream.writeBytes(Native Method)at java.io.FileOutputStream.write(FileOutputStream.java:326)at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)- locked <0x00000000e3814d78> (a java.io.BufferedOutputStream)at java.io.PrintStream.write(PrintStream.java:482)- locked <0x00000000e3804d30> (a java.io.PrintStream)at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:104)- locked <0x00000000e3804cf0> (a java.io.OutputStreamWriter)at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:185)at java.io.PrintStream.newLine(PrintStream.java:546)- eliminated <0x00000000e3804d30> (a java.io.PrintStream)at java.io.PrintStream.println(PrintStream.java:807)- locked <0x00000000e3804d30> (a java.io.PrintStream)at Test$Thread1.run(Test.java:15)at java.lang.Thread.run(Thread.java:748)
线上服务CPU100%问题定位相关推荐
- 线上服务CPU100%问题快速定位实战--转
来自微信公众号 架构师之路 功能问题,通过日志,单步调试相对比较好定位. 性能问题,例如线上服务器CPU100%,如何找到相关服务,如何定位问题代码,更考验技术人的功底. 58到家架构部,运维部,58 ...
- 线上服务CPU100%问题快速定位实战(转载公众号:架构师之路)
功能问题,通过日志,单步调试相对比较好定位. 性能问题,例如线上服务器CPU100%,如何找到相关服务,如何定位问题代码,更考验技术人的功底. 58到家架构部,运维部,58速运技术部联合进行了一次线上 ...
- 线上服务CPU100%问题快速定位实战
功能问题,通过日志,单步调试相对比较好定位. 性能问题,例如线上服务器CPU100%,如何找到相关服务,如何定位问题代码,更考验技术人的功底. 58到家架构部,运维部,58速运技术部联合进行了一次线上 ...
- 线上服务CPU100%问题快速定位实战(58沈剑)
功能问题,通过日志,单步调试相对比较好定位. 性能问题,例如线上服务器CPU100%,如何找到相关服务,如何定位问题代码,更考验技术人的功底. 58到家架构部,运维部,58速运技术部联合进行了一次线上 ...
- 一次线上服务CPU100%的排查过程
前言 突然收到线上服务cpu达到100%的报警短信,于是立即展开排查. 排查过程 理论步骤 一.找到最耗CPU的进程 工具:top 方法: 执行top -c ,显示进程运行信息列表 键入P (大写p) ...
- java - JVM 线上服务的FGC问题排查
线上服务的GC问题,是Java程序非常典型的一类问题,非常考验工程师排查问题的能力.同时,几乎是面试必考题,但是能真正答好此题的人并不多,要么原理没吃透,要么缺乏实战经验. 过去半年时间里,我们的广告 ...
- 线上服务的FGC问题排查,看这篇就够了!
线上服务的GC问题,是Java程序非常典型的一类问题,非常考验工程师排查问题的能力.同时,几乎是面试必考题,但是能真正答好此题的人并不多,要么原理没吃透,要么缺乏实战经验. 过去半年时间里,我们的广告 ...
- 【转】线上服务的FGC问题排查,看这篇就够了!
线上服务的GC问题,是Java程序非常典型的一类问题,非常考验工程师排查问题的能力.同时,几乎是面试必考题,但是能真正答好此题的人并不多,要么原理没吃透,要么缺乏实战经验. 过去半年时间里,我们的广告 ...
- JVM:线上服务的FGC问题排查
原文链接:https://blog.csdn.net/bestxianfeng163/article/details/107972060 线上服务的GC问题,是Java程序非常典型的一类问题,非常考验 ...
- 如何提高线上服务可用性
上一篇文章中我简单介绍了一次线上服务的可用性下降追查过程,今天我们接着上次的内容来学习如何保证服务的高可用性. 具体分为开发阶段.测试阶段.上线阶段.监控阶段等几大项.这些内容就像是一套组合拳,练好了 ...
最新文章
- swift string转int_Swift进阶二:基本数据类型相关
- 日志平台(网关层) - 基于Openresty+ELKF+Kafka
- 高斯--塞德尔迭代法求方程组的解(Python实现)
- JdbcTmplate中的update方法(代码)基础操作
- 中心城镇问题(长链剖分优化树形dp)
- 还有另一个报告生成器?
- bootstrap-select动态生成数据,设置默认选项(默认值)
- php垂直居中代码_纯css实现水平和垂直居中
- Bailian2930 加减乘除【水题】
- 字典:python的基础数据类型
- Atitit.mssql 数据库表记录数and 表体积大小统计
- 物理用不用计算机,计算物理学到底是干什么的?
- MAC下配置 adb 环境变量
- 注册邮箱验证激活技术
- 设计模式-大话设计模式学习笔记
- java调用import了第三方库的python脚本为啥就是出不来结果嘞
- 小白学语句:省市区选择(带全国省市区数据)
- hostapd_cli 使用手册
- FacesServlet (Java EEWTP/JSF问题的解决--java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet
- 手机通过adb工具安装应用