zoukankan      html  css  js  c++  java
  • CPU 使用率 100% 怎么办

    CPU 使用率 100% 怎么办

    独家号 码上实战 作者 flyhero原文链接

    工作中遇到CPU使用率100%,不要慌,一起来找出原因并fix掉它。

    记住这里大致流程,当线上突然遇到时,也不必手足无措。

    总体流程

    找出CPU比较高的进程PID

    top

    打印该进程下线程的CPU占用比较高的tid

    top -Hp {PID}

    将该tid进行16进制转换id

    printf "%x
    " {tid}

    打印线程的堆栈信息

    jstack {PID} |grep {id} -A 100

    当然这四步的执行需要时间,但我们可以将这几步写成shell脚本来执行。

    安装JDK命令行工具

    服务器上安装的OpenJDK ,是否有常用的命令行工具?

    验证是否安装

    [root@op-system ~]$ jstack -h
    Usage:
        jstack [-l] <pid>
            (to connect to running process)
        jstack -F [-m] [-l] <pid>
            (to connect to a hung process)
        jstack [-m] [-l] <executable> <core>
            (to connect to a core file)
        jstack [-m] [-l] [server_id@]<remote server IP or hostname>
            (to connect to a remote debug server)
    

    如果输出如上内容表明,已经拥有工具,倘若没有,那么继续下面。

    安装

    • 查看JDK版本
    [root@op-system ~]$ java -version
    openjdk version "1.8.0_201"
    OpenJDK Runtime Environment (build 1.8.0_201-b09)
    OpenJDK 64-Bit Server VM (build 25.201-b09, mixed mode)
    
    • 看openJDK有jstack的yum源
    [root@op-system ~]$ yum whatprovides '*/jstack'
    1:java-1.8.0-openjdk-devel-debug-1.8.0.201.b09-2.el7_6.x86_64 : OpenJDK Development Environment 8 with full debug on
    Repo        : @updates
    Matched from:
    Filename    : /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-2.el7_6.x86_64-debug/bin/jstack
    

    找到和JDK版本对应的yum源。

    • 安装
    [root@op-system ~]$ sudo yum install java-1.8.0-openjdk-devel-debug-1.8.0.201.b09-2.el7_6.x86_64

    寻找问题所在

    • 查出使用率最高的进程

    [root@op-system ~]$ top

    发现 123067 这个进程特别消耗CPU。

    • 查看进程中线程情况
    [root@op-system ~]$ top -p 123067 -H

    发现 127510 这个线程特别消耗CPU,那么我们来看看这个线程到底是做什么的。

    • 十进制id转十六进制

    [root@op-system ~]$ printf "%x
    " 127510
    1eaec
    
    • 使用jstack打印出线程的堆栈信息
    [root@op-system ~]$ jstack 123067 |grep 1eaec -A 100

    从打印出来的信息中发现了很熟悉的代码,对,就是这里。

    解决问题

    那么既然找到了问题,我们就只能通过,数据库索引、SQL优化、算法优化、快速返回等方法来最这段代码优化了。

  • 相关阅读:
    杜教筛瞎扯
    网络流 24 题 解题报告
    多项式重工业修炼日志
    c#与js中10进制16进制的转化,记录防忘
    如何在RichTextBox中改变多个字符串的颜色以及字体
    C#TreeView控件遍历文件夹下所有子文件夹以及文件
    自己用c语言实现字符串处理库函数以及扩展
    gcc for windows(mingw)编译多个c文件
    迪杰斯特拉(dijkstra)算法的简要理解和c语言实现(源码)
    spring web mvc中遇到的错误以及学习小记(持续记录)
  • 原文地址:https://www.cnblogs.com/xuanbjut/p/11731129.html
Copyright © 2011-2022 走看看