zoukankan      html  css  js  c++  java
  • 项目CPU占用过高分析

    线上系统突然运行缓慢,如果导致系统不可用,首先导出jsatck和内存信息,重启系统,尽快保证系统的可用性。

    1、出现问题的原因

      一种是由计算导致的CPU使用过高,一种是由内存不足垃圾回收导致的CPU使用过高。

      1. 频繁发生FULL GC

      2. 线程太多,上下文不停切换,比如大量线程激烈的锁竞争,线程不停阻塞恢复阻塞。或者产生死锁

      3. 项目出现死循环,比如hashmap并发场景下的死循环

    2、排查步骤如下

      1. 执行 top 命令,在linux系统上显示系统各个进程的资源占用状态,找到占用率很高的进程ID 1024

      2. 执行 top -p 1024 -H 命令,查看当前进程下的所有线程信息,找到占用率很高的线程ID 2048,将ID转换成16进制得到800

      3. 执行 jdstack 1024> thread_stack.log 将进程的堆栈信息写入到文件中

      4. 在thread_stack.log根据找到800对应的堆栈信息,根据堆栈信息定位到代码位置

      5. 如果线程为GC线程(VM Thread),使用 jmap -histo> jmap.log 输出java堆中对象的统计信息,可能不停创建大对象,导致频繁GC导致CPU占用很高。或者使用jmap导出dump日志,使用mat工具查看,如果内存使用率不高,但FULL GC频繁,可能是手动调用System.gc()导致的。

    3、特殊情况

      1. 不定期出现的接口耗时现象

      接口偶尔会出现响应很慢的情况,思路是通过压测工具不断加大访问力度,那么大多数线程最终会阻塞在问题点,通过这些线程的堆栈信息,找到对应位置

      2. 死锁

      jsatck会自动检测出死锁

    4. 小结

      1. 高CPU占用排查步骤

    1. TOP命令找到CPU使用率最高的进程和其线程信息,将线程id转化成16进制
    2. jsatck 进程 打印进程的堆栈信息,根据线程id找到问题线程和它的堆栈信息,分析处理

      2. 高内存占用排查步骤

    1. TOP命令找到占用内存最高的进程
    2. jmap -histo 进程ID 输出进程内对象统计信息,找出问题对象,代码中定位到对象创建位置
    3. 或者jmap导出dump日志,使用mat工具查看

      3. 堆外内存泄漏排查

      使用gdb、strace等工具    

    参考:

    1. https://blog.csdn.net/xinqing5130/article/details/115330920

    2. https://blog.csdn.net/qq_34944965/article/details/81107419?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&dist_request_id=1619598633876_23403&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control

    3. https://www.cnblogs.com/youxin/p/11229071.html

    4. https://blog.csdn.net/wjavadog/article/details/103057408

    5. 程序死循环、死锁问题定位

    6. 系统运行缓慢,CPU 100%,以及Full GC次数过多问题的排查思路

    7. 线上Java 高CPU占用、高内存占用排查思路

    人生就像蒲公英,看似自由,其实身不由己。
  • 相关阅读:
    Pathfinding 模板题 /// BFS oj21413
    poj2186-Popular Cows(强连通分支)
    求有向强连通分量 模板
    F. Relatively Prime Powers (求([2,n],内不是次方的数量)
    【2018沈阳赛区网络预选赛J题】Fantastic Graph 【有上下界的网络流】
    Zoj 2314 Reactor Cooling(无源汇有上下界可行流)
    有上下界网络流模板
    有上下界网络流建模方法
    有上下界的网络流问题 的理解分析
    ACM-ICPC 2018 沈阳赛区网络预赛 D. Made In Heaven(约束第K短路)
  • 原文地址:https://www.cnblogs.com/walker993/p/14714933.html
Copyright © 2011-2022 走看看