zoukankan      html  css  js  c++  java
  • 生产环境出现CPU占用过高,分析思路和定位

    top 定位cpu占比高的pid
    jps -l 定位具体是后台哪个应用程序
    ps -mp 进程id -o(自定义格式) THREAD,tid,time 定位当前进程所有线程占用cpu时间高的线程id
    jstack 进程id | grep tid(线程id转换为英文小写16进制格式) -A行数 定位到具体某一行代码引起的

    案例演示

    程序跑一下

    开始进行定位分析

     

     

    线上系统的CPU负载过高的两个常见场景

    第一个场景:是你自己在系统里创建了大量的线程, 这些线程同时并发运行,而且工作负载都很重,过多的线程同时并发运行就会导致你的机器CPU负载过重

    第二个场景:就是你的机器运行的JVM在执行频繁的Full GC, Full GC 是非常耗费CPU资源的, 它是一个非常负载的过程,所以一旦你的JVM有频繁的Full GC,

          带来的一个明显感觉,一个是系统可能会时不时的卡死, 因此Full GC 会带来一定的"Stop the world" 问题, 一个是机器的CPU负载过高.

          所以一旦知道CPU负载过高的两个原因,就容易排查了

    首先看一下JVM Full GC 的频率 通过jstat,或者是监控平台, 很容易看到现在Full GC频率, 如果是Full GC频繁,那就是Full Gc引起的CPU负载过高

    如果Full GC频率很正常, 那就肯定是你的系统创建了过多线程在并发执行负载很重的任务了

  • 相关阅读:
    Redis学习
    MySQL索引
    细数 Java 线程池的原理
    红黑树学习
    HashMap学习
    Java集合框架
    Java性能优化的45个细节
    MyBatis理解
    jenkins+git+maven+tomcat+jdk本地部署windows版
    windows版docker安装nginx,并设置目录挂载
  • 原文地址:https://www.cnblogs.com/wgDream/p/12841923.html
Copyright © 2011-2022 走看看