最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux?CPU占用過高的原因與排查指南

 更新時間:2026年05月27日 08:48:13   作者:小貓咪01  
這篇文章主要介紹了Linux?CPU占用過高的排查方法,結合top、ps、pidat,定位具體進程、線線及可能原因,區(qū)分正常負載與異常情況,確保服務穩(wěn)定運行,需要的朋友可以參考下

1. 前言

Linux 服務器 CPU 占用過高,是線上排障中非常常見的問題。
常見現(xiàn)象包括:

  • 接口響應變慢;
  • SSH 登錄卡頓;
  • 服務線程堆積;
  • 負載 Load Average 升高;
  • 風扇轉速變高;
  • 進程占用 CPU 長時間不下降。

排查 CPU 問題,不能只看一個 top。
更合理的方式是結合:

top
ps
pidstat
uptime
mpstat
perf
應用日志

本文重點圍繞 top、ps、pidstat 展開,講清楚 Linux CPU 占用過高時怎么定位到具體進程、線程和可能原因。

2. CPU 占用高可能是什么原因

CPU 高并不一定是壞事。
如果服務器正在正常處理大量請求,CPU 高可能是正常負載。

但如果 CPU 持續(xù)高位,就要重點排查。

常見原因:

類型說明
業(yè)務請求量突增流量變大,服務正常忙
死循環(huán)某段代碼一直空轉
線程池打滿大量線程爭搶 CPU
GC 頻繁Java 程序頻繁垃圾回收
正則或加密計算過重CPU 密集型任務
日志瘋狂打印大量字符串拼接和 IO
異常進程挖礦、木馬、未知腳本
系統(tǒng)中斷高網(wǎng)卡、磁盤、驅動異常

所以排查時要先判斷:

是哪個進程高?
是用戶態(tài) CPU 高,還是系統(tǒng)態(tài) CPU 高?
是單線程高,還是多線程高?
CPU 高是否和業(yè)務流量一致?

3. top:第一時間看整體情況

執(zhí)行:

top

重點看頂部幾行:

%Cpu(s): 85.0 us, 10.0 sy, 0.0 ni, 3.0 id, 1.0 wa, 0.0 hi, 1.0 si, 0.0 st

字段說明:

字段含義
us用戶態(tài) CPU,業(yè)務程序代碼消耗
sy系統(tǒng)態(tài) CPU,內核調用消耗
id空閑 CPU
wa等待 IO
hi硬中斷
si軟中斷
st虛擬化環(huán)境中被宿主機偷走的 CPU

判斷思路:

現(xiàn)象可能方向
us應用程序計算多、死循環(huán)、GC、業(yè)務壓力大
sy系統(tǒng)調用多、網(wǎng)絡/文件操作頻繁
wa磁盤 IO 慢,不一定是 CPU 真忙
hi/si網(wǎng)絡包、中斷、驅動相關問題
st云主機宿主機資源爭搶

4. top 中按 CPU 排序

進入 top 后按:

P

可以按 CPU 占用排序。

常見字段:

字段說明
PID進程 ID
USER進程用戶
%CPUCPU 占用
%MEM內存占用
TIME+累計 CPU 時間
COMMAND命令名

如果某個進程長期排第一,基本就是重點對象。

查看某個進程詳細信息:

ps -fp PID

例如:

ps -fp 12345

5. ps:快速找 CPU 最高的進程

查看 CPU 占用最高的前 10 個進程:

ps aux --sort=-%cpu | head

輸出示例:

USER   PID   %CPU  %MEM  COMMAND
app    1234  180   20.1  java -jar app.jar
root   2345  60    1.2   nginx

說明:

  • %CPU 可能超過 100;
  • 多核 CPU 下,一個進程多線程可以占用超過 100%。

查看指定進程:

ps -p 1234 -o pid,ppid,user,%cpu,%mem,etime,cmd

字段說明:

字段含義
pid進程 ID
ppid父進程 ID
%cpuCPU 占用
%mem內存占用
etime運行時長
cmd啟動命令

6. pidstat:持續(xù)觀察進程 CPU

pidstat 來自 sysstat 工具包。

安裝:

Ubuntu / Debian:

sudo apt install sysstat -y

CentOS / RHEL:

sudo yum install sysstat -y

查看所有進程 CPU,每 1 秒一次:

pidstat 1

查看指定進程:

pidstat -p 1234 1

輸出示例:

UID PID %usr %system %guest %wait %CPU CPU Command
app 1234 80.0 10.0 0.0 0.0 90.0 1 java

字段說明:

字段含義
%usr用戶態(tài) CPU
%system系統(tǒng)態(tài) CPU
%wait等待 CPU 調度
%CPU總 CPU 占用
CPU當前運行在哪個 CPU 核心

pidstattop 更適合連續(xù)觀察趨勢。

7. 定位到線程級別

有些進程內部有很多線程。
例如 Java、Nginx、MySQL 都可能是多線程或多進程模型。

查看某進程的線程 CPU:

top -H -p 1234

或者:

ps -mp 1234 -o THREAD,tid,time,%cpu

找到占用高的線程 TID 后,如果是 Java 程序,可以把 TID 轉成十六進制:

printf "%x\n" 線程ID

例如:

printf "%x\n" 5678

然后用:

jstack 1234 | grep -A 30 十六進制線程ID

定位 Java 線程堆棧。

8. mpstat:看每個 CPU 核心

如果懷疑單核打滿,可以用:

mpstat -P ALL 1

如果某一個 CPU 核心長期 100%,可能是:

  • 單線程程序跑滿;
  • 中斷集中在某個核心;
  • 線程綁定 CPU;
  • 某個熱點線程異常。

9. CPU 高的實戰(zhàn)排查流程

9.1 看整體 CPU

top

重點看:

us sy wa hi si st

9.2 找最高進程

ps aux --sort=-%cpu | head

9.3 持續(xù)觀察

pidstat -p PID 1

9.4 看線程

top -H -p PID

9.5 查日志和應用狀態(tài)

journalctl -u 服務名 -n 100
tail -f app.log

9.6 如果是 Java

jstack PID
jstat -gcutil PID 1000

看是否頻繁 GC 或線程死循環(huán)。

10. 常見場景判斷

10.1 用戶態(tài) CPU 高

topus 高。

常見原因:

  • 業(yè)務計算量大;
  • 死循環(huán);
  • 大量 JSON 序列化;
  • 加密解密;
  • 正則匹配;
  • Java GC;
  • 大量請求。

處理思路:

找進程
找線程
看代碼堆棧
看接口流量
看日志

10.2 系統(tǒng)態(tài) CPU 高

sy 高。

常見原因:

  • 大量系統(tǒng)調用;
  • 網(wǎng)絡連接頻繁創(chuàng)建關閉;
  • 文件 IO 很頻繁;
  • 容器或內核網(wǎng)絡開銷;
  • 進程頻繁 fork。

可以結合:

strace -p PID

觀察系統(tǒng)調用。
線上使用 strace 要謹慎,避免影響進程。

10.3 iowait 高

wa 高不代表 CPU 真忙。
它通常表示 CPU 在等磁盤 IO。

繼續(xù)排查:

iostat -x 1
iotop

如果磁盤很忙,要去看 IO 問題,而不是只盯 CPU。

11. 不要一上來 kill -9

發(fā)現(xiàn) CPU 高后,不建議直接:

kill -9 PID

除非已經(jīng)確認是異常進程。

更穩(wěn)妥:

  1. 先記錄現(xiàn)場;
  2. 保存日志;
  3. 查看進程命令;
  4. 查看線程;
  5. 必要時 dump;
  6. 再考慮重啟或 kill。

Java 程序可以先:

jstack PID > jstack.txt
jmap -histo PID > histo.txt

然后再處理。

12. 小結

CPU 高排查核心命令:

top
ps aux --sort=-%cpu | head
pidstat -p PID 1
top -H -p PID
mpstat -P ALL 1

排查思路:

先看整體 CPU 類型
↓
找出高 CPU 進程
↓
持續(xù)觀察進程趨勢
↓
定位到線程
↓
結合應用日志和代碼堆棧
↓
判斷是流量、死循環(huán)、GC、IO 還是異常進程

CPU 排查最重要的是不要只看表面占用率,而要判斷 CPU 時間到底消耗在用戶態(tài)、系統(tǒng)態(tài)、IO 等待還是中斷上。

以上就是Linux CPU占用過高的原因與排查指南的詳細內容,更多關于Linux CPU占用過高排查的資料請關注腳本之家其它相關文章!

相關文章

  • Linux基于TCP實現(xiàn)服務端客戶端通信的步驟詳解

    Linux基于TCP實現(xiàn)服務端客戶端通信的步驟詳解

    文章詳細介紹了Linux系統(tǒng)中的前臺進程和后臺進程的概念、創(chuàng)建、切換和操作方法,以及進程關系、守護進程、TCP服務器與客戶端通信等方面的內容,需要的朋友可以參考下
    2026-03-03
  • 虛擬機中CentOS7設置固定IP地址的方法

    虛擬機中CentOS7設置固定IP地址的方法

    這篇文章主要介紹了虛擬機中CentOS7設置固定IP地址的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • Openssl實現(xiàn)雙向認證教程(附服務端客戶端代碼)

    Openssl實現(xiàn)雙向認證教程(附服務端客戶端代碼)

    這篇文章主要介紹了Openssl實現(xiàn)雙向認證教程(附服務端客戶端代碼),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • Apache日志管理和統(tǒng)計分析知識

    Apache日志管理和統(tǒng)計分析知識

    Apache服務器具備強大的日志功能,管理員可以方便、準備、及時地了解服務器狀況;可以更好地防范黑客的攻擊
    2016-04-04
  • Linux中服務器磁盤空間管理與大文件清理的實踐指南

    Linux中服務器磁盤空間管理與大文件清理的實踐指南

    通過定期執(zhí)行磁盤空間檢查和大文件清理,可以有效預防磁盤空間不足導致的服務中斷,本文將為大家詳細介紹一下Linux服務器磁盤空間管理與大文件清理的相關方法,希望對大家有所幫助
    2025-10-10
  • centos7訪問windows系統(tǒng)的共享文件夾詳解

    centos7訪問windows系統(tǒng)的共享文件夾詳解

    文章講述了在Windows和CentOS系統(tǒng)之間共享文件夾并掛載的過程,包括在Windows上設置共享文件夾,以及在CentOS上使用CIFS協(xié)議掛載共享文件夾的詳細步驟,此外,還介紹了如何設置開機自動掛載和提高掛載點權限的安全性
    2025-12-12
  • Ubuntu服務器下搭建php運行環(huán)境的方法

    Ubuntu服務器下搭建php運行環(huán)境的方法

    這篇文章主要介紹了Ubuntu服務器下搭建php運行環(huán)境的方法,簡單分析了Ubuntu操作系統(tǒng)環(huán)境下搭建Apache、php及mysql模塊相關步驟、命令與操作技巧,需要的朋友可以參考下
    2018-04-04
  • Linux常用命令之grep命令用法詳解

    Linux常用命令之grep命令用法詳解

    這篇文章主要介紹了Linux常用命令grep命令用法詳解,grep命令用于對文件和文本執(zhí)行重復搜索任務的Unix工具,可以通過grep命令指定特定搜索條件來搜索文件及其內容以獲取有用的信息。對此感興趣可以了解一下
    2020-07-07
  • Ubuntu14.04搭建Caffe(僅CPU)詳解教程

    Ubuntu14.04搭建Caffe(僅CPU)詳解教程

    這篇文章主要介紹了Ubuntu14.04搭建Caffe(僅CPU)詳解教程,操作系統(tǒng)是Ubuntu 14.04,本文分步驟給大家介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下
    2016-11-11
  • apache正常訪問mht類型文件的配置方法

    apache正常訪問mht類型文件的配置方法

    這篇文章主要介紹了apache正常訪問mht類型文件的配置方法,需要的朋友可以參考下
    2014-04-04

最新評論

龙胜| 淳安县| 赤峰市| 油尖旺区| 精河县| 广德县| 西乡县| 淳安县| 黑龙江省| 谢通门县| 图木舒克市| 宣城市| 敦化市| 静宁县| 化州市| 鹿泉市| 平度市| 克什克腾旗| 兰州市| 大城县| 左权县| 屏东县| 香港| 清远市| 扬中市| 寿光市| 桃园市| 平舆县| 长春市| 南昌县| 长子县| 光泽县| 延川县| 泰来县| 永丰县| 通化县| 布尔津县| 南江县| 阜新市| 万山特区| 孝昌县|