服务器CPU飙升为100%问题排查及如何避免

上一篇 << 下一篇 >>>JVM内存诊断命令和排查工具汇总


1.定位哪个程序占用的CPU较高

linux命令:top
windows:任务管理器

服务器CPU飙升为100%问题排查及如何避免_第1张图片

2.栈信息输出

命令格式:jstack pid > 文件信息
eg:jstack 5115 > a.txt

3.定位哪一个线程占用率高

常用命令:按shift+p可排序
ps -mp pid -o THREAD,tid,time
ps -Lfp pid
top -H ----直接查看高CPU的线程

服务器CPU飙升为100%问题排查及如何避免_第2张图片

4.线程ID转为16进制,访问转换地址

将子线程TID的5158做进制转换为16进制:1426

5.通过16进制的线程ID在栈信息中查找定位代码行

服务器CPU飙升为100%问题排查及如何避免_第3张图片
public String loop() {
    boolean b = true;
    while (b) {
    }
    return "123";
}

CPU飙升问题产生的背景

1、代码中存在死循环
2、定时任务跑批量
3、tomcat高并发项目的时候,所有线程都处在运行状态,消耗CPU资源
4、Redis的端口6379被注入挖矿程序
5、分布式锁的重试机制
a、乐观锁:能够保证用户线程一直在用户态,缺点是消耗CPU的资源
b、CAS自旋锁

如何避免CPU飙升问题

1、检查代码的死循环情况
2、定时任务项目要喝业务逻辑项目分开部署
a、降低业务逻辑项目CPU资源消耗
b、更好实现定时分片执行
3、接口比较耗时的代码不要写成同步,改为使用mq
4、对服务器接口实现限流、熔断和降级
5、端口号不要随意放开,要结合nginx、LVS等
6、写自旋锁一定要控制死循环次数
tips:预警系统很重要


相关文章链接:
<< << << << <<<自定义SPI和热部署技术破坏类加载器的双亲委派模式
<< << << << << << << << << << << <<<一张图看懂CMS垃圾回收器的底层原理
<< << << << << <<

你可能感兴趣的:(服务器CPU飙升为100%问题排查及如何避免)