美文网首页RxJavaJava服务器端编程编程语言爱好者
服务器CPU飙升为100%问题排查及如何避免

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

作者: 迦叶_金色的人生_荣耀而又辉煌 | 来源:发表于2020-12-11 07:21 被阅读0次

    上一篇 <<<JVM常见死锁问题产生原因和多种诊断方式
    下一篇 >>>JVM内存诊断命令和排查工具汇总


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

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

    2.栈信息输出

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

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

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

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

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

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

    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:预警系统很重要


    相关文章链接:
    <<<JVM整体内存结构的图解,直观明了
    <<<javap命令查看对象信息及操作方法在JVM层的实现原理
    <<<javap命令反查汇编指令汇总
    <<<ClassLoader类加载器顺序Demo测试与双亲委派源码解读
    <<<自定义SPI和热部署技术破坏类加载器的双亲委派模式
    <<<JVM中对象如何完成空间分配和初始化工作
    <<<JVM元空间(方法区)和栈内存溢出原因及解决方案
    <<<JVM堆内存溢出和内存泄露问题定位和解决
    <<<JVM常见死锁问题产生原因和多种诊断方式
    <<<JVM内存诊断命令和排查工具汇总
    <<<JVM新生代老年代算法汇总图解
    <<<JVM垃圾回收不要手动System.gc的真正原因
    <<<JVM垃圾回收引用计数法和根搜索算法图解
    <<<JVM垃圾回收STW(Stop-The-World)代码演示
    <<<JVM垃圾回收器的发展历程及使用场景汇总
    <<<JVM串行并行垃圾回收器的关注点
    <<<一张图看懂CMS垃圾回收器的底层原理
    <<<G1能作为JDK9默认垃圾回收器的优势分析
    <<<CMS和G1的漏标问题解决及三色标记算法图解
    <<<GC中新生代进入老年代的方式汇总
    <<<GC常用日志参数配置及分析工具说明
    <<<FullGC、MinorGC、STW等常见问题如何解答
    <<<JVM性能调优的评估指标及调优示例

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/fzygwktx.html