CPU 使用率 100% 怎么辦


CPU 使用率 100% 怎么辦

獨家號 碼上實戰 作者 flyhero原文鏈接

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

記住這里大致流程,當線上突然遇到時,也不必手足無措。

總體流程

找出CPU比較高的進程PID

top

打印該進程下線程的CPU占用比較高的tid

top -Hp {PID}

將該tid進行16進制轉換id

printf "%x\n" {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\n" 127510 1eaec 
  • 使用jstack打印出線程的堆棧信息
[root@op-system ~]$ jstack 123067 |grep 1eaec -A 100

從打印出來的信息中發現了很熟悉的代碼,對,就是這里。

解決問題

那么既然找到了問題,我們就只能通過,數據庫索引、SQL優化、算法優化、快速返回等方法來最這段代碼優化了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM