Centos7負(fù)載異常過高的排查思路與解決方法(Load?Average)
確認(rèn)負(fù)載高的問題類型
查看當(dāng)前負(fù)載:
uptime # 顯示1/5/15分鐘負(fù)載平均值 top # 查看實(shí)時(shí)負(fù)載(Load Average行)及CPU使用率
負(fù)載值的合理范圍:建議5分鐘負(fù)載 ≤ CPU邏輯核心數(shù)。若持續(xù)高于核心數(shù),需深入排查。
檢查CPU使用情況
查看CPU整體使用率:
top # 按`1`顯示多核CPU詳情,觀察us(用戶態(tài))、sy(內(nèi)核態(tài))、wa(I/O等待)等指標(biāo) vmstat 1 # 查看上下文切換(cs)、中斷(in)等
高us:用戶進(jìn)程占用高,需排查具體進(jìn)程。
高sy:內(nèi)核態(tài)占用高,可能是系統(tǒng)調(diào)用頻繁或中斷異常。
高wa:I/O等待高,可能磁盤或網(wǎng)絡(luò)瓶頸(需結(jié)合I/O排查)。
定位高CPU進(jìn)程:
top中按P(按CPU排序)或M(按內(nèi)存排序)。- 記錄占用最高的PID(進(jìn)程ID)。
分析進(jìn)程內(nèi)線程:
top -Hp [PID] # 查看指定進(jìn)程的線程CPU占用 printf "%x\n" [TID] # 將線程ID轉(zhuǎn)為16進(jìn)制(用于后續(xù)分析)
深入分析代碼熱點(diǎn):
perf top -p [PID] # 查看進(jìn)程的函數(shù)級(jí)CPU消耗(需安裝perf) strace -p [PID] # 跟蹤系統(tǒng)調(diào)用(排查頻繁調(diào)用)
檢查I/O瓶頸
查看磁盤I/O負(fù)載:
iostat -x 1 # 觀察%util(設(shè)備利用率)、await(I/O等待時(shí)間) iotop # 按進(jìn)程查看磁盤I/O使用
高%util:磁盤繁忙,可能頻繁讀寫或硬件性能不足。
高await:I/O響應(yīng)慢,可能磁盤故障或配置問題。
檢查文件系統(tǒng)狀態(tài):
df -h # 查看磁盤空間是否耗盡 dmesg | grep -i error# 檢查磁盤錯(cuò)誤日志
內(nèi)存與Swap分析
查看內(nèi)存使用:
free -h # 查看物理內(nèi)存和Swap使用 top # 按`M`排序內(nèi)存占用進(jìn)程
- Swap頻繁使用:物理內(nèi)存不足,需優(yōu)化內(nèi)存或擴(kuò)容。
- OOM Killer觸發(fā):檢查
dmesg是否有OOM日志。
排查僵尸進(jìn)程和異常進(jìn)程
檢查僵尸進(jìn)程:
ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]' # 列出僵尸進(jìn)程
僵尸進(jìn)程需終止其父進(jìn)程(通過kill -9 [PPID])。
檢查異常進(jìn)程:
ps aux | grep [可疑進(jìn)程名] lsof -p [PID] # 查看進(jìn)程打開的文件和網(wǎng)絡(luò)連接
網(wǎng)絡(luò)瓶頸排查
查看網(wǎng)絡(luò)流量:
sar -n DEV 1 # 實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)接口流量 netstat -antp # 查看TCP連接狀態(tài)
其他工具
sar(歷史數(shù)據(jù)分析):
sar -q # 查看歷史負(fù)載趨勢(shì) sar -u # 查看歷史CPU使用率
系統(tǒng)日志:
journalctl -f # 實(shí)時(shí)查看系統(tǒng)日志 cat /var/log/messages | grep -i error
查看磁盤狀態(tài)
通過命令查看磁盤IO較高
iostat -xd 2

高I/O負(fù)載設(shè)備
sda 磁盤:
- %util:首次采樣達(dá) 63.03%,后續(xù)波動(dòng)在 12.45%~29.80%,但最后一次采樣中
dm-0的 %util 達(dá) 100%(參考輸出第二組數(shù)據(jù))。 - 讀寫吞吐:首次采樣 rkB/s=126,551.57(約 123.6 MB/s),說明大量讀操作。
- 隊(duì)列積壓:
avgqu-sz首次采樣為 31.26(高隊(duì)列積壓),await首次達(dá) 18ms(I/O延遲較高)。
邏輯卷 dm-0/dm-2:
- dm-0:首次采樣 rkB/s=32,555.22(約 31.8 MB/s),
%util=40.64%。 - dm-2:首次采樣 rkB/s=93,990.45(約 91.8 MB/s),
%util=54.94%,讀寫請(qǐng)求密集。
問題定位
- I/O瓶頸:
%util多次超過 70%(如dm-0達(dá) 100%),表明磁盤已飽和,請(qǐng)求排隊(duì)嚴(yán)重。 - 高讀操作:
rkB/s和r/s顯著偏高,可能是頻繁讀取大文件或數(shù)據(jù)庫(kù)全表掃描導(dǎo)致。
排查步驟
定位高I/O進(jìn)程
使用 iotop 或 pidstat 直接查看實(shí)時(shí)I/O占用:
iotop -o # 顯示活躍I/O進(jìn)程 pidstat -d 1 # 按進(jìn)程統(tǒng)計(jì)I/O
重點(diǎn)觀察 DISK READ 和 DISK WRITE 列,定位占用高的進(jìn)程。
檢查文件系統(tǒng)和磁盤空間
df -h # 確認(rèn)磁盤空間是否耗盡 dmesg | grep -i error # 檢查磁盤錯(cuò)誤日志
若磁盤空間不足或存在壞道,會(huì)導(dǎo)致I/O性能驟降。
分析文件訪問模式
大文件讀寫:若進(jìn)程頻繁讀寫大文件(如日志、數(shù)據(jù)庫(kù)文件),需優(yōu)化文件切分或歸檔策略。
小文件頻繁操作:大量小文件讀寫(如Web靜態(tài)資源)需考慮合并或使用緩存(如Redis)。
磁盤健康:使用 smartctl 檢測(cè)磁盤健康:
smartctl -a /dev/sda
直接原因:sda/dm-0/dm-2 的I/O飽和,大量讀請(qǐng)求導(dǎo)致隊(duì)列積壓和延遲。
查看CPU使用情況

關(guān)鍵指標(biāo)分析
CPU負(fù)載:
- 運(yùn)行隊(duì)列(
r列):多次超過 50(如r=88),遠(yuǎn)超CPU核心數(shù)(10核),說明進(jìn)程排隊(duì)嚴(yán)重。 - 等待I/O的進(jìn)程(
b列):最高達(dá) 44,表明大量進(jìn)程因I/O阻塞。 - CPU時(shí)間分配:
- 用戶態(tài)(
us):較低(3%~15%),排除用戶進(jìn)程直接占用CPU的可能。 - 系統(tǒng)態(tài)(
sy):多次超過 70%(如sy=74%),內(nèi)核處理I/O或鎖競(jìng)爭(zhēng)導(dǎo)致。 - I/O等待(
wa):最高達(dá) 56%,確認(rèn)磁盤是瓶頸。
- 用戶態(tài)(
I/O活動(dòng):
- 塊設(shè)備讀(
bi):最高達(dá) 377,968 塊/秒(約 147.5 MB/s),遠(yuǎn)超機(jī)械盤吞吐能力。 - 上下文切換(
cs):高達(dá) 28,553次/秒,頻繁進(jìn)程切換加劇CPU壓力。
內(nèi)存:
- 空閑內(nèi)存(
free):波動(dòng)大(最低 139 MB),但cache較高(約 800 MB~1 GB),系統(tǒng)利用緩存緩解I/O壓力。 - 無Swap使用(
si/so=0):內(nèi)存未耗盡,但緩存頻繁刷寫可能影響性能。
排查步驟
定位高I/O進(jìn)程
iotop -o -P # 查看實(shí)時(shí)I/O讀寫進(jìn)程 pidstat -d 1 # 按進(jìn)程統(tǒng)計(jì)I/O
示例關(guān)注:
- DISK READ 列高(如 MySQL、日志服務(wù))。
- 進(jìn)程狀態(tài):若多為
D(不可中斷睡眠),表明等待磁盤I/O。
檢查磁盤健康
smartctl -a /dev/sda # 檢查磁盤SMART狀態(tài) dmesg | grep -i error # 查看磁盤錯(cuò)誤日志
若發(fā)現(xiàn)壞道或高延遲,需更換磁盤。
分析文件訪問
lsof -p <PID> # 查看進(jìn)程打開的文件 strace -p <PID> -e trace=file # 跟蹤文件操作
確認(rèn)是否為 大文件順序讀 或 小文件隨機(jī)讀,優(yōu)化訪問模式。
檢查內(nèi)存緩存
free -m # 查看緩存和緩沖區(qū)使用 sar -r 1 # 監(jiān)控內(nèi)存壓力
若 cache 頻繁釋放,表明內(nèi)存不足,需優(yōu)化應(yīng)用內(nèi)存或擴(kuò)容。
檢查內(nèi)存使用情況
根據(jù)提供的 free -h 輸出系統(tǒng)存在 內(nèi)存耗盡風(fēng)險(xiǎn)(總內(nèi)存 15G,已用 14G,可用僅 600MB),但未觸發(fā) Swap(Swap=0),以下是詳細(xì)分析和解決方案:

關(guān)鍵指標(biāo)分析
內(nèi)存分布:
- 已用內(nèi)存(
used):14G,占比 93%,接近物理內(nèi)存上限。 - 可用內(nèi)存(
available):600MB,表明系統(tǒng)處于內(nèi)存緊張狀態(tài),可能觸發(fā) OOM Killer。 - 緩存/緩沖區(qū)(
buff/cache):911MB,較低,說明系統(tǒng)未有效利用緩存緩解I/O壓力。
潛在風(fēng)險(xiǎn):
- OOM Killer:若突發(fā)內(nèi)存需求,內(nèi)核會(huì)強(qiáng)制終止進(jìn)程釋放內(nèi)存(參考
/var/log/messages中的Out of memory日志)。 - 性能下降:頻繁內(nèi)存回收導(dǎo)致CPU占用升高(如
kswapd進(jìn)程活躍)。
定位高內(nèi)存進(jìn)程
top -o %MEM # 按內(nèi)存占用排序 ps aux --sort=-%mem | head -n 10 # 列出前10內(nèi)存消耗進(jìn)程
重點(diǎn)關(guān)注:
- %MEM 列:持續(xù)高占比的進(jìn)程(如 MySQL、Java 應(yīng)用)。
- 進(jìn)程狀態(tài):若為
D(不可中斷睡眠)或Z(僵尸進(jìn)程),可能關(guān)聯(lián)資源泄漏。
檢查內(nèi)存泄漏
valgrind --leak-check=full -v [應(yīng)用程序路徑] # 檢測(cè)特定程序內(nèi)存泄漏 cat /proc/[PID]/status | grep VmRSS # 監(jiān)控進(jìn)程內(nèi)存增長(zhǎng)趨勢(shì)
若進(jìn)程內(nèi)存持續(xù)增長(zhǎng)且無釋放,需重啟服務(wù)或修復(fù)代碼。
優(yōu)化建議
系統(tǒng)層調(diào)優(yōu)
I/O調(diào)度器:改為 deadline 或 noop(SSD適用):
echo deadline > /sys/block/sda/queue/scheduler
內(nèi)核參數(shù):增大磁盤隊(duì)列深度:
echo 1024 > /sys/block/sda/queue/nr_requests
負(fù)載高的原因
- I/O密集型負(fù)載:大量讀操作(
bi高)導(dǎo)致磁盤飽和,進(jìn)程因等待I/O堆積(b列高),引發(fā)高負(fù)載和系統(tǒng)態(tài)CPU占用。 - 可能的場(chǎng)景:數(shù)據(jù)庫(kù)全表掃描、日志文件未輪轉(zhuǎn)、文件系統(tǒng)元數(shù)據(jù)操作頻繁(如小文件讀寫)。
- 磁盤I/O飽和(高
bi、wa)導(dǎo)致進(jìn)程排隊(duì)(高b)和系統(tǒng)態(tài)CPU占用(高sy)。 - 物理內(nèi)存耗盡(15G 中已用 14G),主要嫌疑為 MySQL 配置不當(dāng)或 應(yīng)用內(nèi)存泄漏。
到此這篇關(guān)于Centos7負(fù)載異常過高的排查思路與解決方法(Load Average)的文章就介紹到這了,更多相關(guān)Centos7負(fù)載異常過高排查與解決內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Ubuntu16.04安裝nvidia驅(qū)動(dòng)+CUDA+cuDNN的教程
這篇文章主要介紹了Ubuntu16.04安裝nvidia驅(qū)動(dòng)+CUDA+cuDNN教程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10
apache服務(wù)出現(xiàn)Forbidden 403問題的解決方法總結(jié)
這篇文章主要介紹了apache服務(wù)出現(xiàn)Forbidden 403問題的解決方法總結(jié),需要的朋友可以參考下2014-08-08
centos redhat系列對(duì)抗ddos之居家必備利器 banip.txt
本文可以用于redhat centos 系列 linux 系統(tǒng)的 屏蔽多連接ip,具有抗ddos功能的代碼。2010-11-11
Linux在批量服務(wù)器管理中實(shí)用的PS1命令提示符格式實(shí)現(xiàn)方法
PS1是神馬?PS1是linux里頭的一個(gè)默認(rèn)的環(huán)境變量,至于當(dāng)前系統(tǒng)的PS1是如何設(shè)置的,你可以使用命令“env|grep PS1”來查看2015-09-09
阿里云ECS(linux)一鍵安裝web環(huán)境sh安裝步驟
這篇文章主要介紹了阿里云ECS(linux)一鍵安裝web環(huán)境sh安裝步驟,需要的朋友可以參考下2016-10-10

