一次CPU占用过高问题排查记录
2018-06-18 00:25:47来源:未知 阅读 ()
首先,我周五把服务部署到服务器后,查看各项指标都基本正常,就觉得应该没什么了,但是到了第二天下午,我查看服务器的CPU使用率非常高(非正常情况)。因为当时服务器部署的服务也比较多,所以一时也不知道到底是什么原因导致的,下面说说我的排查思路:
- 在服务器使用命令top查看各项服务的情况,发现我的服务占用了90%的CPU而且一直降不下去。
- 第一步基本确认了是我的服务问题,接下来就是考虑查找服务出现这个问题的原因了。
- 这个时候因为没有人用(只是测试),所以我果断选择了先重启(因为重启可以解决90%的问题)。
- 重启过后CPU那些就正常了,然后我过来一个小时后,查看也是基本正常,因为是周末所以就暂时没有管了,打算第二天再去看看。
- 第二天去公司的时候发现,CPU又占用了60%,而且一直那么高,下面有图,下降的地方就是我重启的地方。
- 通过监控图发现重启了9个小时后CPU在一直不断增加。
- 我脑海中浮现CPU过高的情况是:频繁的full GC、死循环、死锁等。
- 但是我的代码里面就没有多线程,基本排除死锁。
- 然后死循环这个,我用https://blog.csdn.net/bolg_hero/article/details/53126744的方式检测,也没有发现。
- 然后我把怀疑重点放到 full GC上了。那么问题就是什么情况会发生full GC呢?
- 我也查看了些文章比如:https://blog.csdn.net/chenleixing/article/details/46706039
- 但是我通过分析CPU使用率的走势图,感觉应该是我那里的代码是时间越久full GC越频繁,内存越不足,肯定是那里频繁的应用了大对象,比如大集合,大文件等。
- 于是我过滤我的代码,发现有个地方是不断将高频的位置信息放入Redis。放入的方式是先将Redis里面的全部取出来,然后放入后再存入。
- 这个地方才是致命的,因为随着时间的推移,Redis肯定越来越大,开始的时候小对象,所以没有问题,随着时间的推移变为大对象了,就会高频率的触发full GC,导致CPU负载过高。
- 最终结局办法,换种方式,使用Redis的list数据结构来存储。后来启动一天时间都是正常的。

标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:select2使用最新总结,原创
- 如何定位生产上CPU飙高100%的问题? 2020-05-30
- 解决windows下tomcat端口被占用最简单暴力方法 2020-05-25
- CPU飙高,频繁GC,怎么排查? 2020-05-21
- Tomcat视角看一次http请求 2020-05-18
- 没想到,我又一次因为技术栈和招聘要求不符而被刷了... 2020-05-14
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash
