前言
服务器cpu彪高,我感觉是常遇见的问题,有经验的程序员,我想大部分都碰到过。我是一名Java程序员,我排查过很多类似的问题。总结一下排查问题的步骤,以便后面可以直接来复制粘贴命令.
问题排查步骤
- 使用top命令查看cpu占用高的进程:28694
2. 使用命令 top -H -p 28694 定位到28694进程中占用cpu最高的线程:28696
- 使用 printf “%x\n” 29696 转成16进制:7018
- 使用 jstack 28694 | grep “7018” -A 10 输出导致彪高的堆栈代码
- 分析该代码,可以从调用方,代码本身,异常情况等分析具体原因
案例
背景:之前我负责一个继续教育的sass系统,上线使用后正常,也预估了一定的资源空间,但有一段时间cpu老是会彪高,接受到告警。
问题排查:通过上述五个步骤,我定位到是学生学习课程的接口调用频繁导致的。按照并发量分析,不应该有这么大流量,当时用户量才十来万,我再去查看nginx日志,发现一个特定ip在疯狂刷接口,分析是破解接口,使用程序刷学习得分。
解决方案:零时方案使用nginx针对ip进行限流,最终方案是限流加接口验签