注意:
解决CPU100%属于是比较有套路的事情,基本解决思路/方案为:
具体内容见参考资料:
除此之外,系统的进行问题排查也需要项目本身构建完整的监控体系。
有一次早上发现测试服务被容器kill了,查看日志发现是每天都会被容器 kill -9两次。
于是通过 Grafana skywalking等工具查询,相关数据如下:
通过以上图示可以得到结论如下:
由于grafana缺少JVM监控,无法判断是堆外内存爆了,还是容器内其他进程的原因。
解决方案:
扩容之后就剩下另一个问题,服务的young gc次数非常的多,并且通过对服务器信息的查看,发现CPU占用非常高,接近100%。
由于采用的是 Arthas 且对项目比较熟悉,所以排查过程非常简单。如下。
堆栈中提到的这个包,我个人比较熟悉,是运维添加的一个插件,之前引起过dubbo序列化失败的问题,所以联系运维先去除了插件。
问题排查实际上是比较综合的一件事情,除了合理的方法以外,还需要经验。但是很多东西都是教程模板式的操作,在没有很多经验的时候掌握一些套路也是非常有帮助的,最起码在遇到问题的时候知道一个大致的方向。
最后的建议:关于任何线上的问题,不要着急下结论,不能经验之谈,也不能太着急锁定问题范围,尽可能看到更多指标才能更好的发现问题。