三二互联专业提供速度最快最稳定的美国服务器、香港服务器。中美直连,亚洲优化![ 代理登陆 ] [ 付款方式 ] [ 找回密码 ][ 电子协议责任书 ]
硬件资源保障

采用高配品牌服务器

主流强悍CPU配置

确保服务高速稳定运行

中美直连线路

中美直连亚洲优化

采用中国CN2骨干网络

保证速度飞快稳定高效

CPU 使用率过高的如何优化?

美国、香港服务器

CPU 使用率过高的如何优化?

01-10   来源:

 CPU 使用率过高的排查与优化完整方案(Ubuntu 24.04 运维实战)

CPU 使用率持续过高(如 us+sy > 80%)会导致服务器响应变慢、服务卡顿,优化需遵循 「定位瓶颈 → 分析原因 → 针对性优化」 的闭环流程,以下是分步骤可落地的操作指南。
一、第一步:精准定位高 CPU 占用的进程 / 线程
在优化前,必须先找到哪个进程、哪个线程在消耗 CPU,这是优化的核心前提。
1. 快速定位高 CPU 进程(top 命令)
bash
运行
top
在 top 交互界面中:
按下 P(大写):按 CPU 使用率从高到低排序进程;
重点关注 %CPU 列(单个进程占用的 CPU 百分比,多核机器可能超过 100%)、PID 列(进程 ID)、COMMAND 列(进程名称)。
关键输出示例
plaintext
PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
1234 redis     20   0  1.2g  200m   10m S  99.7   2.5  10:20.32 redis-server
5678 root      20   0  500m   50m   10m R  45.2   0.6   5:10.12 python script.py
示例中 redis-server 占用近 100% CPU,是核心优化目标;
状态列 R 表示进程正在运行,S 表示睡眠,R 状态的高 CPU 进程需重点关注。
2. 深入定位高 CPU 线程(top -Hp )
如果进程是多线程程序(如 Redis、Java 服务),需进一步定位具体哪个线程在消耗 CPU:
bash
运行
# 替换 为高 CPU 进程的 PID,例如 1234
top -Hp 1234
按下 P 排序线程,找到 %CPU 最高的线程 TID(线程 ID);
将 TID 转换为 16 进制(线程栈追踪需要 16 进制 ID):
bash
运行
printf "%x\n"   # 例如 TID=1235 → 输出 4d3
3. 分析线程栈(定位具体代码 / 操作,以 Redis 为例)
通过 pstack 或 perf 查看线程的调用栈,明确线程在执行什么操作:
bash
运行
# 安装 pstack(Ubuntu)
sudo apt install -y gdb
 
# 查看进程的栈信息(替换 为进程 ID)
pstack
Redis 高 CPU 常见栈信息示例
如果栈中频繁出现 dictFind、scan、bgrewriteaof,说明可能是大量键扫描、AOF 重写、频繁查询导致的高 CPU。
4. 补充工具:pidstat(按进程 / 线程统计 CPU)
pidstat 适合长期监控,避免 top 的瞬时数据误差:
bash
运行
# 每秒输出一次,共输出 10 次,-u 表示监控 CPU
pidstat -u 1 10
 
# 监控指定进程的线程 CPU(替换 )
pidstat -t -p 1 5
二、第二步:分析高 CPU 占用的常见原因
根据定位的进程 / 线程,结合业务场景分析原因,常见高 CPU 场景分为以下几类:
场景 典型进程 核心原因
业务程序逻辑低效 Python/Java/Go 脚本 循环冗余、算法复杂度高(如 O (n²))、正则表达式回溯、频繁 IO 操作
数据库 / 缓存服务压力 Redis/MongoDB 大量 scan 操作、高并发读写、过期键大量删除、AOF 重写 / RDB 备份
系统进程异常 kworker/rsyslog 内核线程处理中断(如磁盘 IO 中断)、日志服务刷盘频繁
恶意进程 / 挖矿程序 未知名称进程 服务器被入侵,运行挖矿脚本消耗 CPU
三、第三步:针对性优化方案(按场景分类)
场景 1:业务程序逻辑低效(如 Python/Java 脚本)
1. 优化代码逻辑
降低算法复杂度:将 O (n²) 算法(如嵌套循环)优化为 O (n log n)(如哈希表、二分查找);
减少冗余计算:缓存重复计算的结果(如本地缓存、Redis 缓存);
避免频繁 IO:批量读写文件 / 数据库,减少系统调用次数(如 Python 的 readlines() 代替逐行 read())。
2. 限制进程 CPU 使用率(cpulimit 工具)
如果无法立即优化代码,可临时限制进程的 CPU 占用,避免影响其他服务:
bash
运行
# 安装 cpulimit
sudo apt install -y cpulimit
 
# 限制 PID 为 5678 的进程最多使用 30% CPU
cpulimit -p 5678 -l 30
场景 2:Redis 服务高 CPU 优化(你重点关注的场景)
Redis 高 CPU 通常和命令执行效率、并发量、持久化策略相关,优化方案如下:
避免使用高耗时命令
禁止使用 keys *(遍历所有键,阻塞 Redis),替换为 scan 分批遍历;
减少 hgetall、smembers 等全量查询命令,改用 hscan、sscan 分批获取。
优化持久化策略
AOF 重写:如果 CPU 高时伴随 bgrewriteaof 进程,调整 auto-aof-rewrite-min-size(如设为 64mb)和 auto-aof-rewrite-percentage(如设为 100),减少重写频率;
RDB 备份:避免在业务高峰期执行 bgsave,将备份时间调整到凌晨低峰期。
优化过期键删除策略
Redis 默认惰性删除 + 定期删除过期键,大量过期键会导致定期删除线程消耗 CPU;
调整配置:hz 10 → hz 50(提高定期删除频率,但会增加 CPU 消耗,需权衡);
业务侧优化:分批设置过期时间,避免大量键同时过期。
限制并发连接数
如果是高并发连接导致 CPU 高,调整 maxclients 配置,结合业务限制连接数;
排查是否有恶意连接(如未授权访问、爬虫连接)。
场景 3:系统进程 / 内核高 CPU 优化
kworker 内核线程高 CPU
原因:通常是磁盘 IO 中断、网络中断导致,需排查磁盘 / 网络瓶颈;
排查:iostat -x 1 查看磁盘 %util(使用率),sar -n DEV 1 查看网络带宽;
优化:更换高性能磁盘(如 SSD)、优化网络协议(如关闭 TCP 超时重传)。
rsyslog 日志服务高 CPU
原因:日志量过大,频繁刷盘;
优化:调整日志级别(如从 debug 改为 info)、配置日志轮转(logrotate)、将日志写入内存缓冲区后批量刷盘。
场景 4:恶意进程 / 挖矿程序处理
先通过 ps aux | grep <进程名> 确认进程路径,判断是否为恶意程序;
立即终止进程:kill -9 ;
排查入侵入口:检查 SSH 登录日志(/var/log/auth.log)、定时任务(crontab -l、/etc/cron*)、可疑脚本;
加固服务器:修改 SSH 端口、禁用密码登录、开启防火墙、安装杀毒软件(如 clamav)。
四、第四步:系统级通用优化手段
如果单个进程优化后 CPU 仍高,可从系统层面进行全局优化。
1. 调整 CPU 调度策略(针对实时性要求高的服务)
Linux 默认调度策略是 CFS(完全公平调度),可通过 chrt 命令调整进程优先级:
bash
运行
# 提高进程优先级(优先级范围 1-99,值越大优先级越高)
# 替换 为目标进程 ID
chrt -r -p 50
-r 表示使用 RR(实时调度策略),适合对延迟敏感的服务(如 Redis);
注意:高优先级进程会抢占其他进程资源,需谨慎使用。
2. 关闭不必要的服务 / 进程
bash
运行
# 查看开机自启服务
systemctl list-unit-files --type=service --state=enabled
 
# 关闭不需要的服务(如 postfix、cups)
sudo systemctl disable --now postfix
3. 开启 CPU 性能模式(针对物理机 / 云服务器)
默认 CPU 可能处于节能模式,导致性能无法发挥,可切换为性能模式:
bash
运行
# 安装 cpufrequtils
sudo apt install -y cpufrequtils
 
# 查看当前 CPU 模式
cpufreq-info | grep "current policy"
 
# 设置所有核心为性能模式
sudo cpufreq-set -g performance -c 0-<核心数-1>
# 例如 8 核机器:sudo cpufreq-set -g performance -c 0-7
4. 扩容 CPU 资源(终极方案)
如果业务增长导致 CPU 资源长期不足,且优化空间有限,需进行硬件扩容:
云服务器:升级实例规格(增加 CPU 核心数);
物理机:增加 CPU 插槽、升级更高主频的 CPU。
五、第五步:验证优化效果(闭环验证)
优化后需验证 CPU 使用率是否下降,确保优化有效:
实时监控:top 或 htop 查看 %CPU 整体使用率,确认是否降到合理范围(如 < 60%);
长期监控:使用 sar 命令统计历史 CPU 使用率:
bash
运行
# 查看当天 CPU 使用率统计(每 10 分钟一个数据点)
sar -u 10 144
业务指标验证:确认服务响应时间(如 Redis 的 latency)、吞吐量是否提升,避免「CPU 降了但业务卡了」的情况。
六、常见误区与避坑指南
误区 1:盲目提高进程优先级 → 可能导致其他核心服务被抢占资源,引发连锁反应;
误区 2:只看整体 CPU 使用率,不分析单进程 → 容易忽略「单个进程占用 100% CPU,整体 CPU 使用率 20%」的多核场景;
误区 3:优化后不验证 → 无法确认优化效果,可能白做无用功。
总结:优化流程速记
定位:top 找高 CPU 进程 → top -Hp 找线程 → pstack 分析栈;
分析:区分是业务程序、缓存服务、系统进程还是恶意程序导致;
优化:针对性优化代码 / 配置 / 系统;
验证:top/sar 确认 CPU 下降,业务指标正常。

三二互联专业提供香港VPS,美国VPS主机,香港云服务器租用等业务香港美国到大陆CN2 GIA速度最快

上一篇:如何优化高CPU占用的进程? 下一篇:如何查看Redis服务的版本信息?

美国GIA服务器三二互联版权所有 WWW.250.cc 2008-2015 All Rights Reserved
三二互联 - 专业的美国C3服务器、香港vps、抗DOOS流量清洗、云备份系统、网站加速系统、美国GIA服务器和香港云服务器产品提供商
三二互联24小时在线工单系统为您提供全面、专业、周到的技术支持与服务
咨询热线:400-679-9994(免长话费)