要解決CPU占用過高問題,首先需要精準定位問題進程。常用命令如下:
top
命令:實時顯示系統進程狀態,按P
鍵可按CPU使用率降序排列,快速找到%CPU值最高的進程;按1
鍵可查看每個CPU核心的使用情況,判斷是否為單核心占用過高。ps
命令:通過管道組合快速排序,例如ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu | head
,顯示CPU使用率前10的進程(含PID、命令、CPU占用率等信息)。htop
命令(增強版top):提供更直觀的界面,支持鼠標操作和顏色標識,按F6
鍵選擇“%CPU”排序,更易識別高負載進程(需安裝:sudo yum install htop
)。kill
命令終止。例如sudo kill -9 <PID>
(-9
表示強制終止);若進程無法終止,需檢查是否為僵尸進程(ps -ef | grep Z
),或終止其父進程(sudo kill -9 <PPID>
)。nice
(啟動時設置)或renice
(運行中調整)降低進程優先級,減少其對CPU的占用。例如:
nice -n 10 command
(10
為nice值,范圍-20~19,值越大優先級越低);sudo renice 10 -p <PID>
。部分服務因配置不當(如工作進程過多、線程緩存不足)會導致CPU占用過高,需針對性優化:
/etc/nginx/nginx.conf
,將worker_processes
設置為CPU核心數(auto
可自動適配);調整worker_connections
(每個進程的最大連接數),避免過多連接導致CPU過載。/etc/mysql/my.cnf
,增加thread_cache_size
(線程緩存大小,如8
)、innodb_buffer_pool_size
(InnoDB緩沖池大小,建議為物理內存的50%~70%),減少線程創建和磁盤IO開銷。MaxClients
(最大客戶端數)、minSpareThreads
(最小空閑線程數)等參數,避免資源耗盡。通過cgroups或cpulimit工具限制進程的CPU使用率,防止其占用過多資源:
sudo yum install libcgroup-tools
;cgcreate -g cpu:/limited_group
;echo 50000 > /sys/fs/cgroup/cpu/limited_group/cpu.cfs_quota_us
(單位為微秒,50000
=50%);echo <PID> > /sys/fs/cgroup/cpu/limited_group/tasks
。sudo yum install cpulimit
;sudo cpulimit -p <PID> -l 30
(-p
指定PID,-l
指定限制百分比)。優化內核參數可提升系統對CPU資源的調度效率:
free -m
查看內存使用情況,若內存充足(剩余>20%),可禁用Swap:sudo swapoff -a
;或調整swappiness
(Swap使用傾向,范圍0~100,值越小越傾向于使用物理內存):echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
。cpufrequtils
(sudo yum install cpufrequtils
),設置性能模式(cpufreq-set -g performance
),避免CPU頻率頻繁波動;cat /proc/interrupts
,若某個中斷(如網卡中斷)過高,可通過irqbalance
服務均衡中斷(sudo systemctl enable irqbalance && sudo systemctl start irqbalance
)。Prometheus+Grafana
或Nagios
搭建實時監控系統,設置CPU使用率閾值(如80%),當超過閾值時觸發告警,便于提前處理。sudo find /var/log -type f -name "*.log" -mtime +7 -delete
(刪除7天前的日志);sudo dnf update
(CentOS 8及以上)或sudo yum update
(CentOS 7及以下),修復已知漏洞并提升性能。通過以上步驟,可系統性解決CentOS系統進程占用CPU過高的問題。需根據實際情況選擇合適的方法,優先排查異常進程,再優化配置和限制資源,最后通過監控實現長期穩定運行。