要解决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过高的问题。需根据实际情况选择合适的方法,优先排查异常进程,再优化配置和限制资源,最后通过监控实现长期稳定运行。