Linux系统的CPU使用率是衡量系统性能的核心指标之一,当CPU长期处于高负载状态时,会直接影响应用程序的响应速度,甚至导致系统卡顿、服务中断。优化和调整CPU使用率需要从监控、进程管理、系统配置等多个维度入手,针对性解决资源占用过高的问题。

一、先监控:定位CPU使用率异常的根源
优化CPU使用率的第一步是明确哪些进程或任务占用了过多资源,常用的监控工具包括top、htop、mpstat等,这些工具可以实时展示CPU的整体使用情况和单个进程的占用比例。
使用top命令可以快速查看当前系统的CPU负载情况,输出结果中%Cpu(s)行展示了用户态、内核态、空闲等CPU使用占比,下方的进程列表按CPU占用从高到低排序:
# 运行top命令,按q退出 top # 常用交互操作:按P按CPU使用率排序,按M按内存使用率排序,按1展示所有CPU核心的单独使用情况
如果需要更详细的CPU核心级监控,可以使用mpstat命令,查看每个CPU核心的使用情况,定位是否存在单个核心负载过高的问题:
# 安装sysstat工具包(包含mpstat) yum install sysstat -y # CentOS/RHEL系统 apt install sysstat -y # Debian/Ubuntu系统 # 每2秒输出一次所有CPU核心的使用情况,共输出3次 mpstat -P ALL 2 3
二、进程层面优化:调整优先级与清理无用进程
1. 调整进程优先级
Linux系统中进程的优先级通过nice值控制,取值范围为-20到19,数值越小优先级越高,默认进程的nice值为0。对于重要的业务进程,可以适当降低其nice值提升优先级,对于非核心进程可以提高nice值降低其抢占CPU资源的概率。
调整进程优先级可以使用nice和renice命令:
# 启动进程时设置nice值为-10(需要root权限) nice -n -10 ./important_service # 调整已经运行的进程PID为1234的nice值为5 renice -n 5 -p 1234
2. 清理无用进程
长期运行的系统中可能会存在大量僵尸进程、闲置的后台进程,这些进程会占用一定的CPU调度资源。可以通过ps命令筛选出无用进程后批量清理:
# 查找所有僵尸进程(状态为Z) ps -ef | grep 'Z' # 查找CPU占用超过10%的非核心进程,确认后终止 ps -eo pid,ppid,cmd,%cpu --sort=-%cpu | head -20 # 终止进程,PID替换为实际进程号,谨慎操作避免终止系统关键进程 kill -9 1234
三、系统层面调优:内核参数与调度策略调整
1. 调整CPU调度策略
Linux默认使用CFS(完全公平调度器)调度进程,对于实时性要求高的任务,可以切换为实时调度策略。常用的实时调度策略包括SCHED_FIFO和SCHED_RR,优先级高于普通进程。
使用chrt命令可以调整进程的调度策略和优先级:
# 查看进程PID为1234的当前调度策略 chrt -p 1234 # 将进程PID为1234的调度策略设置为SCHED_FIFO,优先级为10 chrt -f -p 10 1234
2. 优化内核参数
部分内核参数会影响CPU的调度效率和资源分配,可以通过修改/etc/sysctl.conf文件调整相关参数,优化后执行sysctl -p生效。
常用的CPU相关优化参数如下:
| 参数名 | 默认值 | 优化建议值 | 参数说明 |
|---|---|---|---|
| kernel.sched_min_granularity_ns | 10000000 | 4000000 | 进程最小调度时间片,降低该值可以提升交互进程的响应速度 |
| kernel.sched_wakeup_granularity_ns | 15000000 | 6000000 | 唤醒进程的调度粒度,降低该值可以减少进程唤醒的延迟 |
| vm.swappiness | 60 | 10 | 控制内存交换到磁盘的倾向,降低该值可以减少不必要的IO占用CPU资源 |
四、长期优化建议
除了临时调整,还需要建立长期的CPU使用率监控机制,可以通过prometheus搭配node_exporter采集CPU指标,设置告警阈值,当CPU使用率超过80%持续5分钟时触发告警,提前排查问题。同时定期清理系统日志、更新软件版本,避免已知的内存泄漏、死循环等bug导致CPU异常占用。
如果是云服务器场景,还可以根据业务负载情况弹性调整CPU核心数,在业务高峰期临时扩容,低谷期缩容,既保障性能又控制成本。