在工作中总会轮到你排查线上问题,当Liunx服务器中出现CPU占用率过高的情况,应该如何快速排查定位问题所在,提高工作效率呢?
记: 一次登录服务器发现CPU占用率居高不下, 排查后发现是MySQL占用达到200%
针对MySQL
参考官网链接
登录进入Mysql命令界面,使用 show full processlist 返回的结果是实时变化的,是对mysql链接执行的现场快照,所以用来处理突发事件非常有用
一些问题会导致连锁反应,而且不太好定位,有时候以为是慢查询,很可能是大多时间是在等在CPU、内存资源的释放,所以有时候同一个查询消耗的时间有时候差异很大
总结了一些常见问题:
CPU报警:很可能是 SQL 里面有较多的计算导致的
连接数超高:很可能是有慢查询,然后导致很多的查询在排队,排查问题的时候可以看到”事发现场“类似的 SQL 语句一大片,那么有可能是没有索引或者索引不好使,可以用:explain 分析一下 SQL 语句
查询出来多条SQL语句索引添加并未命中、完全无索引、索引失效… 导致全表扫描,执行效率极大降低,针对SQL语句做对应优化,索引正确使用后,CPU使用率马上下降且平稳至20%以下!
针对Java
在项目中为了提高运行效率,就离不开多线程,但是这个玩意有利有弊。
优点是同一时间能可以处理的任务更多了,速度效率有显著提高,注:在运用得当的情况下是这样的。
需要考虑的是线程切换对整体性能的影响,占用更多的内存空间,模块数据要保证线程安全,以及防止死锁情况的发生。
在线上有时瞬时数据量达到峰值,多线程任务分配不过来,或出现死循环,也会导致在服务器中Java的占用率直线飙升!
需要排查堆栈信息,针对哪些代码有问题及时处理优化即可。