如何排查服務器 CPU 飆高

服務器 CPU 飆高(CPU 使用率持續超過 80% 甚至接近 100%)是典型的性能瓶頸問題,可能由應用邏輯缺陷、資源競爭、外部壓力或硬件/系統異常引起。以下是系統化的排查步驟,覆蓋從現象確認到根因定位的全流程。

?一、確認 CPU 飆高的現象與范圍?

首先需明確 CPU 高負載的具體表現影響范圍,避免誤判:

?1. 區分用戶態(User)與內核態(System)CPU?

通過 tophtop 查看 CPU 使用率細分:

  • ?用戶態(User)??:應用程序代碼執行占用的 CPU(如業務邏輯、計算)。
  • ?內核態(System)??:操作系統內核執行占用的 CPU(如 I/O 調度、網絡協議棧、進程調度)。

?關鍵結論?:

  • 若用戶態 CPU 高:問題通常在應用程序(如死循環、頻繁計算)。
  • 若內核態 CPU 高:問題可能在 I/O 阻塞、網絡流量過大或系統調用頻繁。
?2. 確認是持續高負載還是間歇性高負載?
  • ?持續高負載?:可能是應用邏輯缺陷(如死循環)、內存泄漏導致頻繁 GC,或外部持續壓力(如 DDoS 攻擊)。
  • ?間歇性高負載?:可能是批量任務(如定時任務)、突發流量(如秒殺活動)或資源競爭(如鎖爭用)。
?3. 定位高負載的進程/線程?

使用工具鎖定具體是哪個進程或線程占用了大量 CPU:

??(1) 系統級工具:top/htop?
  • top 命令:按 P 鍵按 CPU 使用率排序,找到占用最高的進程(PID)。
    top -c  # 顯示完整命令行
  • htop(更友好的交互式工具):支持樹形查看進程關系,按 F6 選擇排序方式(如 CPU 占用)。
??(2) 進程級工具:pidstat?

通過 pidstat 查看進程的 CPU 使用細節(需安裝 sysstat 包):

pidstat -u 1 5  # 每 1 秒輸出一次,共 5 次,顯示進程的 CPU 使用率
??(3) 線程級工具:top -H 或 jstack(Java 應用)??
  • ?非 Java 應用?:通過 top -H -p <PID> 查看進程內的線程 CPU 占用(-H 顯示線程)。
  • ?Java 應用?:使用 jstack <PID> 生成線程轉儲,結合 grep 過濾阻塞或運行中的線程:
    jstack <PID> | grep -A 20 "java.lang.Thread.State: RUNNABLE"  # 查看運行中的線程

?二、分析高 CPU 進程的具體原因?

鎖定高 CPU 進程后,需深入分析其內部邏輯或外部交互,常見原因及排查方法如下:

?1. 應用程序邏輯缺陷(用戶態 CPU 高)??

?典型場景?:死循環、遞歸未終止、頻繁計算(如加密/壓縮)、錯誤的分頁查詢(全表掃描)。

??(1) Java 應用:檢查線程狀態與調用棧?
  • ?死循環/無限遞歸?:線程轉儲中若大量線程處于 RUNNABLE 狀態,且調用棧顯示重復方法(如 while(true) 循環),可能是死循環。
    示例(死循環):

    "http-nio-8080-exec-1" #12 prio=5 os_prio=0 tid=0x00007f8e3c0b8000 nid=0x4567 runnable [0x00007f8e2c1fe000]java.lang.Thread.State: RUNNABLEat com.example.DeadlockDemo.infiniteLoop(DeadlockDemo.java:20)  # 重復調用自身...
  • ?頻繁 GC?:通過 jstat -gcutil <PID> 查看 GC 頻率(FGC 頻繁且 GCT 占比高),可能是內存泄漏或大對象分配導致。

??(2) 非 Java 應用:檢查進程調用棧?

使用 strace(Linux)跟蹤進程的系統調用,定位耗時操作:

strace -p <PID> -c  # 統計系統調用耗時(-c 顯示統計)

若發現大量 read()write()poll() 調用,可能是 I/O 阻塞或網絡流量過大。

?2. I/O 阻塞導致內核態 CPU 高?

?典型場景?:磁盤 I/O 慢(如機械盤 vs SSD)、網絡 I/O 阻塞(如大量未完成的 Socket 連接)、文件描述符耗盡。

??(1) 磁盤 I/O 問題?
  • 使用 iostat 查看磁盤 I/O 利用率(%util 接近 100% 表示磁盤滿負荷):
    iostat -d 1 5  # 每 1 秒輸出一次磁盤 I/O 統計
  • %util 高且 await(平均 I/O 等待時間)大,可能是磁盤性能不足或存在大量隨機讀寫(如數據庫日志寫入)。
??(2) 網絡 I/O 問題?
  • 使用 netstatss 查看網絡連接狀態(如大量 TIME_WAITESTABLISHED 連接):
    ss -ant | grep ESTAB  # 查看已建立的 TCP 連接數
  • 若連接數過多(如超過 ulimit -n 限制),可能導致進程阻塞在 accept()connect(),間接推高內核態 CPU。
?3. 鎖競爭與線程爭用?

?典型場景?:多個線程競爭同一把鎖(如 synchronizedReentrantLock),導致線程頻繁阻塞/喚醒。

??(1) Java 應用:檢查鎖競爭?
  • 使用 jstack 查看線程的鎖持有與等待關系(lockedwaiting to lock 字段):
    "Thread-1":waiting to lock <0x000000076b45a2c0> (a java.lang.Object)which is held by "Thread-0""Thread-0":locked <0x000000076b45a2c0> (a java.lang.Object)waiting to lock <0x000000076b45a290> (a java.lang.Object)
    此片段表明線程 Thread-0Thread-1 互相等待對方持有的鎖,形成鎖競爭。
??(2) 非 Java 應用:使用 perf 分析?

Linux 下使用 perf 工具分析鎖競爭(需 root 權限):

perf top -p <PID>  # 實時查看進程的熱點函數(如鎖獲取/釋放)
?4. 外部壓力:突發流量或惡意請求?

?典型場景?:DDoS 攻擊、批量任務(如定時任務并發執行)、爬蟲高頻訪問。

??(1) 檢查網絡流量?
  • 使用 iftopnload 查看網絡帶寬占用(如某個 IP 發送大量請求):
    iftop -i eth0  # 實時顯示網絡接口流量
??(2) 檢查應用日志?
  • 查看 Web 服務器(如 Nginx、Tomcat)的訪問日志,統計高頻請求的 URL 或 IP:
    grep "GET /api" access.log | awk '{print $1}' | sort | uniq -c | sort -nr  # 統計 IP 訪問次數
?5. 硬件或系統異常?

?典型場景?:CPU 本身故障(如過熱降頻)、BIOS 配置錯誤、內核模塊沖突。

??(1) 檢查 CPU 溫度與風扇?
  • 使用 sensors 工具(需安裝 lm-sensors 包)查看 CPU 溫度:
    sensors  # 顯示 CPU 核心溫度(如 Core 0: +85°C)
    若溫度過高(超過 90°C),可能是散熱不良導致 CPU 降頻(性能下降但功耗高)。
??(2) 檢查內核日志?

查看 /var/log/syslog/var/log/kern.log,尋找硬件錯誤或異常:

dmesg | grep -i "error\|warning"  # 顯示內核錯誤/警告信息

?三、總結:排查流程與工具鏈?

?步驟??目標??關鍵工具/命令?
確認 CPU 飆高現象區分用戶態/內核態,定位進程/線程tophtoppidstat
分析高負載進程鎖定具體應用或服務jstack(Java)、strace(非 Java)
排查應用邏輯缺陷死循環、頻繁計算、GC 問題線程轉儲、jstat -gcutil、代碼審查
排查 I/O 阻塞磁盤/網絡 I/O 慢、連接數過多iostatssnetstat
排查鎖競爭與線程爭用線程互相等待鎖jstack(鎖持有/等待關系)、perf(非 Java)
排查外部壓力突發流量、惡意請求iftopnload、訪問日志分析
檢查硬件/系統異常CPU 故障、散熱問題、內核錯誤sensorsdmesg、BIOS 配置檢查

?四、注意事項?

  • ?生產環境謹慎操作?:避免在業務高峰期重啟進程或修改配置,優先通過監控工具(如 Prometheus+Grafana)實時觀察。
  • ?日志與監控結合?:通過日志(如應用日志、系統日志)和監控(CPU、內存、磁盤 I/O)交叉驗證,避免誤判。
  • ?逐步縮小范圍?:從系統→進程→線程→代碼/配置,逐層定位根因,避免盲目修改。

通過以上步驟,可高效排查服務器 CPU 飆高的問題,最終定位到具體的應用邏輯缺陷、資源競爭或外部壓力,并針對性優化。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/915623.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/915623.shtml
英文地址,請注明出處:http://en.pswp.cn/news/915623.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【DataWhale】快樂學習大模型 | 202507,Task05筆記

前言 今天是Transformer的編碼實戰階段&#xff0c;照著示例代碼執行一遍吧 embedding self.tok_embeddings nn.Embedding(args.vocab_size, args.dim)把token向量轉為embedding矩陣&#xff08;一個token一個embedding向量&#xff09; 位置編碼 為了解決“我喜歡你”和…

用ffmpeg 進行視頻的拼接

author: hjjdebug date: 2025年 07月 22日 星期二 17:06:02 CST descrip: 用ffmpeg 進行視頻的拼接 文章目錄1. 指定協議為concat 方式.1.1 協議為concat 模式,會調用 concat_open 函數1.2 當讀數據時,會調用concat_read2. 指定file_format 為 concat 方式2.1 調用concat_read_…

HTTP與HTTPS技術細節及TLS密鑰交換與證書校驗全流程

HTTP與HTTPS技術細節及TLS密鑰交換與證書校驗全流程 引言 文檔目的與范圍 核心技術棧概述 本文檔的核心技術棧圍繞傳輸層安全協議&#xff08;TLS&#xff09;展開。TLS協議作為安全套接字層&#xff08;SSL&#xff09;的后繼標準&#xff0c;是現代網絡安全通信的基礎&am…

廣播分發中心-廣播注冊流程

廣播是怎么注冊的呢&#xff1f;階段組件/數據結構作用描述存儲位置/關聯關系App進程階段BroadcastReceiver開發者自定義的廣播接收器&#xff0c;實現onReceive方法處理事件。App進程&#xff08;Activity/Service等組件內&#xff09;ReceiverDispatcher將BroadcastReceiver封…

OpenCV計算機視覺實戰(16)——圖像分割技術

OpenCV計算機視覺實戰&#xff08;16&#xff09;——圖像分割技術0. 前言1. 分水嶺算法1.1 應用場景1.2 實現過程2. GrabCut 交互式分割2.1 應用場景2.2 實現過程3. FloodFill3.1 應用場景3.2 實現過程小結系列鏈接0. 前言 圖像分割是計算機視覺中將像素劃分為具有特定語義或…

Coturn打洞服務器

* 概念理解&#xff1a;1. SDP協議&#xff1a;會話描述協議&#xff0c;視頻通話的雙方通過交換SDP信息進行媒體協商&#xff0c;從而選擇使用某一相同的媒體協議進行通信&#xff1b;TLS協議&#xff1a;基于TCP的安全層傳輸協議DTLS協議&#xff1a;基于UDP的安全層傳輸協議…

python flusk 監控

# 創建虛擬環境目錄 python3 -m venv /sda1/xunjian/venv # 激活虛擬環境 source /sda1/xunjian/venv/bin/activate # 激活后終端會顯示 (venv)創建虛擬環境&#xff08;在當前目錄&#xff09;&#xff1a;bashpython3 -m venv venv激活虛擬環境&#xff1a;bashsource venv/b…

VUE2 項目學習筆記 ? 語法 v-if/v-show

?語法頁面渲染的時候&#xff0c;需要服務器傳過來的對象中的一個屬性&#xff0c;然后根據這個屬性用v-for渲染標簽&#xff0c;這里寫的v-for".... in dataList.goodsList"但是當解析到這行語法的時候&#xff0c;dataList還沒返回&#xff0c;因此控制臺會報錯找…

使用qemu命令啟動虛擬機

1. 安裝相關軟件 yum install qemu edk2* libvirt -y 啟動libvirt服務 systemctl start libvirtd systemctl status libvirtd2. 創建虛擬機 2.1. qemu啟動命令示例 /usr/bin/qemu-system-loongarch64 \-machine virt,accelkvm \-nodefaults \-m 2048 \-smp 2,maxcpus4,co…

大模型系統化學習路線

人工智能大模型系統化學習路線一、基礎理論筑基&#xff08;1-2個月) 目標&#xff1a;建立大模型核心認知框架 核心內容&#xff1a; 深度學習基礎&#xff1a;神經網絡原理、CNN/RNN結構、梯度下降算法大模型本質&#xff1a;Transformer架構&#xff08;重點掌握注意力機制、…

LLaMA-Factory 微調可配置的模型基本參數

LLaMA-Factory 微調可配置的模型基本參數 flyfish 基本參數 一、模型加載與路徑配置參數名類型描述默認值model_name_or_pathOptional[str]模型路徑&#xff08;本地路徑或 Huggingface/ModelScope 路徑&#xff09;。Noneadapter_name_or_pathOptional[str]適配器路徑&#xf…

Ubuntu 22 安裝 ZooKeeper 3.9.3 記錄

Ubuntu 22 安裝 ZooKeeper 3.9.3 記錄 本文記錄在 Ubuntu 22.04 系統上安裝 ZooKeeper 3.9.3 的過程&#xff0c;包含 Java 環境準備、配置文件調整、啟動與停機操作、以及如何將 ZooKeeper 注冊為系統服務。 一、準備環境 ZooKeeper 3.9.x 要求 Java 11 或更高版本&#xff…

FreeSwitch通過Websocket(流式雙向語音)對接AI實時語音大模型技術方案(mod_ppy_aduio_stream)

FreeSwitch通過WebSocket對接AI實時語音大模型插件技術方案1. 方案概述 基于FreeSWITCH的實時通信能力&#xff0c;通過WebSocket協議橋接AI大模型服務&#xff0c;實現低延遲、高并發的智能語音交互系統。支持雙向語音流處理、實時ASR/TTS轉換和動態業務指令執行。 1753095153…

航班調度優化策略全局概覽

在機場關閉場景下的航班恢復工作&#xff0c;是將機場關閉期間所有的航班進行取消然后恢復還是將機場關閉期間航班全部延誤而后調整呢&#xff1f;簡單來說&#xff0c;在實際操作中&#xff0c;既不是無差別地全部取消&#xff0c;也不是無差別地全部延誤。這兩種“一刀切”的…

spring boot 異步線程@Async 傳遞 threadLocal數據

將父類的 threadLocal 的數據 在線程池時&#xff0c;可以轉給子線程使用。 Async 的使用。 第一步在啟動服務加上 EnableAsync 注解。 EnableAsync public class NetCoreApplication {... ... }第二步&#xff1a;導入阿里 線程工具類<dependency><groupId>com.a…

AI產品經理成長記《零號列車》第一集 邂逅0XAI列車

《零號列車》絕非傳統意義上的 AI 產品經理教程 —— 它是我沉淀二十多年跨行業數字化轉型與工業 4.0 實戰經驗后,首創的100集大型小說體培養指南。那些曾在千行百業驗證過的知識與經驗,不再是枯燥的文字堆砌,而是化作一場沉浸式的學習旅程。? 這里沒有生硬的理論灌輸,而…

[C++11]范圍for循環/using使用

范圍for循環 范圍for循環&#xff08;Range-based for loop&#xff09;是 C11 引入的一種簡潔的循環語法&#xff0c;用于遍歷容器中的元素或者其他支持迭代的數據結構。 范圍for循環可以讓代碼更加簡潔和易讀&#xff0c;避免了傳統for循環中索引的操作。 下面是范圍for循環的…

簡單了解下npm、yarn 和 pnpm 中 add 與 install(i) 命令的區別(附上兩圖帶你一目明了)

目錄 pnpm 中 add 和 i 的區別 npm 中 add 和 i 的區別 yarn 中 add 和 i 的區別 附上兩圖帶你一目明了&#xff1a; npm、yarn和pnpm的三者區別圖&#xff1a; i 和 add 的核心區別圖&#xff1a; 個人建議&#xff1a;在項目中保持命令使用的一致性&#xff0c;選擇一種…

ESP32-S3學習筆記<2>:GPIO的應用

ESP32-S3學習筆記&#xff1c;2&#xff1e;&#xff1a;GPIO的應用1. 頭文件包含2. GPIO的配置2.1 pin_bit_mask2.2 mode2.3 pull_up_en和pull_down_en2.4 intr_type3. 設置GPIO輸出/獲取GPIO輸入4. 中斷的使用4.1 gpio_install_isr_service4.2 gpio_isr_handler_add4.3 gpio_…

得物視覺算法面試30問全景精解

得物視覺算法面試30問全景精解 ——潮流電商 商品鑒別 視覺智能&#xff1a;得物視覺算法面試核心考點全覽 前言 得物App作為中國領先的潮流電商與鑒別平臺&#xff0c;持續推動商品識別、真假鑒別、圖像搜索、內容審核、智能推薦等視覺AI技術的創新與落地。得物視覺算法崗位…