文档章节

cpu负载过高案例,解决方法记录

-悟空-
 -悟空-
发布于 2015/08/20 08:46
字数 870
阅读 1618
收藏 21
点赞 0
评论 0

先讲下问题来源,前一段时间线上服务器负载高的吓人,作为一台只部署了tomcat的应用服务器,平时load average 也就在零点几的水平,突然达到十几真是让人惊了个呆(⊙ˍ⊙),生怕服务器分分钟宕掉啊。

赶紧找问题发生原因吧,我以前没有遇到过这类问题,没啥经验可谈,首先服务器上top下,发现最耗cpu的就是我们的应用服务器,如图:

负载高

我马上想到的是我们有异步处理的多线程程序,是不是哪个程序死锁了或者一直跑着,不释放。于是查看了最近修改的代码,也没有发现那里可能会发生死循环,那干脆打印下堆栈看看到底都有什么线程在跑着吧。到jdk的bin路径下 用jstack pid >xxx.stack命令打印堆栈内容。

堆栈

快1MB的内容,真的没法去找,都是一些TIMED_WAITINGWAITING这些可以先不用去看,优先级高的应该是那些RUNNABLE的,因为都已经等待了,就消耗不到cpu了啊。看了半天也没看出啥名堂,最后在其他博客上取取经,发现了实用的技巧。

具体思路:

首先要找到哪几个线程在占用cpu,之后再通过线程的id值在堆栈文件中查找具体的线程,看看出来什么问题。

OK,实战开始,第一个命令

ps -mp pid -o THREAD,tid,time

其中pid 换成要查看的进程的id值,这个命令的作用就是打印出进程下有哪几个线程在跑,并且分别占用cpu多长时间。

ps不熟悉话,可以在linux下查看man ps文档,看看具体那几个命令的作用

-p的后面跟着要显示的进程的id号, -m的意思是显示这个进程下的所有线程 -o的意思是格式化要输出的内容

通过上边这个命令,显示出一堆线程,通过筛选之后发现了几个占用cpu很长的线程

%CPUTIDTIME
17.31617212:18:58
79.9162752-08:49:22
19.841812:16:02
32.61307112:17:14

这下可算找到罪魁祸首了,看第二个线程cpu占用的吓人,并且占用时间也是高的离谱,我记住它了( *⊙~⊙)。

第二个命令,将找到的线程id号转成十六进制

printf "%x\n" tid

这个很简单,就不解释了,得到结果是3f93

之后就是在最初打印的堆栈信息中查找这个线程,Bingo!

bug_problem

请原谅,把关键信息注释上了,哈哈。找到这个线程,可以看到具体出问题的代码行了,对就是我注释那几个代码行,之后就在源码中查找下,发现真的有一个死循环在那里(⊙﹏⊙)b,好了既然找到了那就fix掉就可以了。

在一次上线之后服务器的情况:

fix_bug

又健健康康的啦~~~。

结尾再费点唾沫,查找好cpu的线程时一共有四个,其实那三个我也找了,发现是我们自己创建的线程池,所以不是问题啦。

参考文章: 线上应用故障排查之一:高CPU占用

© 著作权归作者所有

共有 人打赏支持
-悟空-
粉丝 138
博文 25
码字总数 35562
作品 0
海淀
高级程序员
程序占用cpu过高问题解决

现象:登录机器发现有卡顿现象,于是top发现负载特别高,并且发现一进程占满cpu 定位:记录下该进程号,然后top -Hp <pid>找出占用cpu过高的几个线程,记录线程id,根据这几个线程id到程序线...

Small-Liu ⋅ 2016/06/16 ⋅ 0

hadoop 1.X资源管理机制缺陷分析和解决方案

一、概述 用hadoop1.x版本已经有一年多了,在使用的过程中发现hadoop1.X的资源管理机制存在诸多缺陷,甚至在这种资源管理机制下会造成服务器资源的严重浪费,负载过高或者过低。本文主要介绍...

zengzhaozheng ⋅ 2014/02/22 ⋅ 0

解决tomcat占用CPU过高

因生产环境tomcat占用CPU持续过高,负载过高,重启tomcat过于缓慢,参与网上资料,解决tomcat占用CPU过高,重启缓慢问题 1、通过top命令找出占用CPU高的PID top - 15:52:18 up 93 days, 2:23...

hbssliulei ⋅ 2013/12/25 ⋅ 0

swift部署多proxy并实现负载均衡

5台服务器 A B C D E A为负载均衡 BCDE 既做proxy server 又做storage server 负载均衡工具的选择: nginx:0.6.33版本后不允许POST方法访问静态资源,swift 只有head get方法能用,post pu...

长平狐 ⋅ 2013/11/25 ⋅ 0

《大规模WEB服务开发技术》读书笔记(II)——专栏知识汇总

1、Linux单主机的负载 负载均衡——前提是把一台服务器的性能发挥到极致。 通过测量找出系统的瓶颈,然后消除瓶颈,发挥性能。 寻找瓶颈的基本流程 查看瓶颈负载(load average):top或者upt...

ayesd ⋅ 2014/04/28 ⋅ 0

Linux下如何定位高CPU/Memory的代码段

先前自开发的过程中解决过一个CPU使用过高的问题,没有记录,今天以FreeSWITCH为例,把解决的过程写下来,方便以后有类似问题参考解决。 注:因为不是真正解决问题的过程,所以CPU的数据会和...

行者无疆在杭州 ⋅ 2016/06/21 ⋅ 0

基于Web应用的性能分析及优化案例

一、 基于动态内容为主的网站优化案例 1.网站运行环境说明 硬件环境:1台IBM x3850服务器, 单个双核Xeon 3.0G CPU,2GB内存,3块72GB SCSI磁盘。 操作系统:CentOS5.4。 网站架构:Web应用是...

Amamatthew ⋅ 2014/08/19 ⋅ 0

jvm原理和优化

在上文中我们分析了很多性能监控工具,介绍这些工具的目的只有一个,那就是找出对应的性能瓶颈。盲目的性能调优是没有效果的,只有充分知道了哪里出了问题,针对性的结果才是立竿见影的。解决...

罗文浩 ⋅ 2016/09/09 ⋅ 0

CPU 100% 异常排查实践与总结

CPU 100% 异常排查实践与总结 leejun2005的个人页面2018-01-041 阅读 java 1、问题背景 昨天下午突然收到运维邮件报警,显示数据平台服务器cpu利用率达到了98.94%,而且最近一段时间一直持续...

leejun_2005的个人页面 ⋅ 01/04 ⋅ 0

大规模web服务开发技能

第5课 大规模数据处理的难点 -- 内存和磁盘 单台Linux服务器瓶颈分析 1、查看平均负载 用top、uptime命令查看平均负载; 1、平均负载很低,系统吞吐量无法提升 --------->检查软件设置是否异...

罗文浩 ⋅ 2015/09/13 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Centos7重置Mysql 8.0.1 root 密码

问题产生背景: 安装完 最新版的 mysql8.0.1后忘记了密码,向重置root密码;找了网上好多资料都不尽相同,根据自己的问题总结如下: 第一步:修改配置文件免密码登录mysql vim /etc/my.cnf 1...

豆花饭烧土豆 ⋅ 53分钟前 ⋅ 0

熊掌号收录比例对于网站原创数据排名的影响[图]

从去年下半年开始,我在写博客了,因为我觉得业余写写博客也还是很不错的,但是从2017年下半年开始,百度已经推出了原创保护功能和熊掌号平台,为此,我也提交了不少以前的老数据,而这些历史...

原创小博客 ⋅ 今天 ⋅ 0

LVM讲解、磁盘故障小案例

LVM LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理。 1.新建分区,更改类型为8e 即L...

蛋黄Yolks ⋅ 今天 ⋅ 0

Hadoop Yarn调度器的选择和使用

一、引言 Yarn在Hadoop的生态系统中担任了资源管理和任务调度的角色。在讨论其构造器之前先简单了解一下Yarn的架构。 上图是Yarn的基本架构,其中ResourceManager是整个架构的核心组件,它负...

p柯西 ⋅ 今天 ⋅ 0

uWSGI + Django @ Ubuntu

创建 Django App Project 创建后, 可以看到路径下有一个wsgi.py的问题 uWSGI运行 直接命令行运行 利用如下命令, 可直接访问 uwsgi --http :8080 --wsgi-file dj/wsgi.py 配置文件 & 运行 [u...

袁祾 ⋅ 今天 ⋅ 0

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 2

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部