问题描述

在某一天系统更新上线一个版本后,运维人员通过监控发现服务器出现CPU使用率超过200%的问题,导致监控系统频繁告警。

排查过程

我们的Tomcat是部署在linux环境中,下面的排查过程均在linux下进行。

1. 查看后台服务

通过查看Tomcat的后台日志,发现日志正常打印,未发现异常信息。

2. 查看服务器信息

2.1 找出耗CPU的进程

使用top命令查看特定用户(user1)的内存、cpu及各进程的信息:

[root@localhost ~]# top -u user1

使用上面的命令,可以看到下面的信息:

从上图可以看到存在一个java的进程CPU使用率很高,超过了200%的数值。

PS:从图中可以看到PID为150252(PID即为java进程ID),用户为user1,%CPU、%MEM分别表示CPU、内存的使用率

2.2 确认进程信息

[user1@localhost ~]$ jps -m # 使用jps命令可以快速找到java进程的PID
[user1@localhost ~]$ ps -fu user1 | grep tomcat # 使用ps指令可以找到PID为150252为tomcat进程


通过上面使用top命令找到了CPU使用率过高的进程,通过jps可以确认是Tomcat进程。

2.3 找出耗CPU的线程

1)找到耗用最高的线程和占用CPU的时间

[user1@localhost ~]$ ps -mp PID -o THREAD,tid,time


或者

[user1@localhost ~]$ top -Hp PID

PID即2.1中找到的进程id(150252),上图指令就是为了找出该进程下的线程信息。如下图:

PS:上图中的PID是线程ID,找到%CPU使用率较高的线程逐一分析。

2)把该线程ID转化为16进制

[user1@localhost ~]$ printf "%x\n" TID  #将线程的TID转换成十六进制


3)从JVM堆栈中查找线程信息
第2步中找到了耗时较高的线程ID,下面通过JVM的堆栈信息找到线程信息,使用下面的命令可以获得JVM的堆栈信息:

[user1@localhost ~]$ jstack PID | grep TID -A100

这里的PID代表的是Tomcat进程ID,TID是16进制表示的线程ID,线程堆栈信息如下:

从上面可以看到是一些线程信息,通过上图红框中的状态为RUNNABLE的线程信息,即为正在运行的线程,从这里可以找到相关的信息,接下来就是分析你的代码,这里是因为代码中使用了类似于while死循环导致的。

总结

CPU使用率过高的原因,大概有以下几种情况:
1、Java 内存不够或溢出导致GC overhead问题,GC overhead 导致的CPU 100%问题;
2、死循环问题,如常见的HashMap被多个线程并发使用导致的死循环 或者 死循环代码
3、某些操作一直占用CPU
大多数都是因为线程无法终止或出现死循环等原因,但是仍然需要根据实际情况,具体问题具体分析。

【经验篇】记如何排查Linux服务器CPU使用率过高的问题相关推荐

  1. linux服务器 cpu使用率过高,服务器CPU使用率过高排查与解决思路

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

  2. linux tomcat cpu占用高,排查tomcat服务器CPU使用率过高

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

  3. window服务器cpu过高的排查_服务器CPU使用率过高排查与解决思路

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

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

    日常工作中有时候会遇到Linux服务器上出现CPU负载过高的情况,影响程序的运行,一般的排除思路如下: 方法一: 使用top命令 然后按shift+p按照CPU排序,找到占用CPU过高的进程的pid ...

  5. Linux服务器CPU使用率过高

    前言 服务器使用率过高,导致,请求报错 分析 通过阿里云分析: 通过Linux命令查看原因 top 通过 top -Hp 进程号命令找到 CPU 消耗最多的线程号(列名仍然为 PID): top -H ...

  6. java 监控linux服务器cpu使用率、内存使用率、磁盘使用率、java进程是否存活等服务

    java 监控linux服务器cpu.内存.java进程是否存活,发现异常发送邮件提醒 前一段时间在维护一个N年前的项目,这个项目有十几个服务器,每个服务器上有十几个服务.接手后的几个星期天天有事,要 ...

  7. linux 内核空间占用cpu百分比过高,线上linux系统故障排查之一:CPU使用率过高

    摘自: 一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环. 下面我们将一步步定位问题,详尽的介绍每一步骤的相关知识. 一.通过top命令定位占用cpu高的进程 执行top ...

  8. (小技巧) 如何让Linux 机器CPU使用率变高

    由于测试需要,需要让机器的cpu使用率变高. 单行命令搞定 for i in `seq 1 $(cat /proc/cpuinfo |grep "physical id" |wc ...

  9. java检测服务器磁盘空间占满_Java性能检测工具-记录一次通过jstack排查Linux服务器CPU占用率很高的实践...

    一.问题描述 Linux服务器的配置是4核16G,将war包部署到tomcat后,启动tomcat,发现内存占用率不高,但是CPU一直高达100%:浏览器输入相关url也无法访问该项目,且tomcat ...

  10. Linux下CPU使用率过高的排查方法

    在 Linux 系统下,使用 top 命令查看 CPU 使用情况. %Cpu(s): 0.3 us, 0.1 sy, 0.0 ni, 99.6 id, 0.0 wa, 0.0 hi, 0.0 si, ...

最新文章

  1. Windows下安装Z3的Python3版
  2. 几个小例子告诉你, 一行Python代码能干哪些事
  3. API-基本数据类型与字符串的互换
  4. java后台面试自我介绍_java腾讯远程面试后台研发岗面试题分享
  5. 洛谷 - P4043 [AHOI2014/JSOI2014]支线剧情(最小费用可行流)
  6. 身为DATASHUO大数据工程师,我亲手制作的2016年第一期数据报告
  7. sklearn自学指南(part22)--支持向量机的分类与回归
  8. 避开使用XAML的性能陷阱
  9. 长度、面积、体积的相似比原理
  10. GB18030:蒙文字符方向为什么转了90度
  11. NCRE | 四级网络工程师错题
  12. red hat linux系统下载安装
  13. 中西医结合耳鼻咽喉科疾病 100254
  14. (XWZ)的Python学习笔记Ⅴ——I/O编程
  15. linux怎么安装pcie串口卡驱动,pci串口卡驱动是什么接口 pci串口卡驱动安装方法...
  16. 安规电容与普通电容的区别
  17. 乐MAX2 乐视X820_官方线刷包_救砖包_解账户锁
  18. CF1463-D. Pairs
  19. 2020icpc小米决赛K
  20. python动物重量排序详解

热门文章

  1. 2022年R1快开门式压力容器操作最新解析及R1快开门式压力容器操作新版试题
  2. 转账功能怎么测试?以支付宝转账到银行卡为例
  3. Html 使 tbody加上滚动条
  4. 【2020最新,无错误!】python实现百度API---地址转经纬度(地理编码)/经纬度转地址(逆地理编码),含源码
  5. 35岁的程序员:第18章,私欲
  6. Delphi 编译的程序在win10中怎样默认以管理员身份运行
  7. 中山医06年考研初试复试全攻略!( 完整版)
  8. java el表达式 if else_EL表达式 JSTL 三层架构
  9. 一个正经的电商运营每天应该看哪些数据?
  10. 计算机哪些方向发展前景,计算机就业的几个方向