CentOS Stream 8 资源占用高的定位与处置
一、快速定位瓶颈
- 先看整体负载与资源概况:使用命令查看CPU、内存、I/O、负载与占用最高的进程。
- 命令示例:
- top/htop(按P按CPU排序、按M按内存排序)
- ps -eo pcpu,pid,user,args | sort -k1 -r | head -10
- uptime(看1/5/15 分钟负载)
- vmstat 2(关注 r、us、sy、wa、si、so)
- iostat -x 2(关注 %util、await、svctm、r/s、w/s)
- sar -u 2(历史/实时CPU)
- 判断要点:
- CPU 使用率高 + wa 低:多为用户态计算密集(应用/脚本/死循环)。
- CPU 使用率不高但负载高:多为I/O 等待或不可中断 D 状态进程导致。
- si/so 持续不为 0:内存紧张,发生换页,常伴随 kswapd0 CPU 升高。
- 若无明显进程占用,可能是多个服务叠加或实例规格不足。
二、CPU 占用高的处理
- 定位并处置异常进程:
- 用 top/ps 找到高占用 PID,优先尝试优雅终止:kill ;必要时 kill -9 或重启对应服务(如 systemctl restart )。
- 若进程处于D 状态(不可中断睡眠),通常无法被 kill,需恢复其依赖资源或重启系统。
- 若为应用自身问题:
- 更新到稳定版本、回滚/重装异常版本,排查死循环/正则回溯/频繁重建连接等代码路径。
- 若为系统或驱动问题:
- 执行系统更新(dnf/yum update -y),并更新相关驱动/内核模块。
- 临时缓解与兜底:
- 对关键进程使用 nice/renice 降低调度优先级,避免抢占业务关键任务。
- 业务允许时重启以快速恢复(生产谨慎)。
三、内存占用高或 Swap 抖动的处理
- 快速判断:
- free -h 查看可用内存与 Swap;若 si/so 持续>0 或 kswapd0 占用高,说明内存不足引发换页。
- 处置顺序:
- 释放可回收缓存(仅临时缓解,不建议长期依赖):
- sync
- echo 3 > /proc/sys/vm/drop_caches
- 调整 vm.swappiness(减少换页倾向,示例设为 10):
- sysctl vm.swappiness=10
- 持久化:在 /etc/sysctl.conf 添加 vm.swappiness=10
- 增加或优化 Swap:
- 查看:free -h、swapon -s
- 新增 Swap 文件/分区并启用(示例):
- 创建:dd if=/dev/zero of=/swapfile bs=1M count=4096
- 设权限:chmod 600 /swapfile
- 格式化:mkswap /swapfile
- 启用:swapon /swapfile
- 持久化:/etc/fstab 添加 “/swapfile swap swap defaults 0 0”
- 减少内存占用的根因:
- 关闭不必要的服务/自启项(如 postfix、未使用的监控/代理)。
- 优化应用内存配置(连接池、缓存大小、并发数)。
- 必要时扩容内存或分离高负载服务到独立实例。
四、磁盘 I/O 与文件系统导致的负载高
- 定位 I/O:
- iostat -x 2 观察 %util(接近 100% 表示设备饱和)、await(高表示队列等待长)、读写速率。
- vmstat 2 的 wa 高表示 I/O 等待重。
- 优化手段:
- 调整 I/O 调度器(示例将 sda 设为 deadline):
- 查看:cat /sys/block/sda/queue/scheduler
- 临时:echo deadline > /sys/block/sda/queue/scheduler
- 永久:在 /etc/default/grub 的 GRUB_CMDLINE_LINUX 增加 elevator=deadline,然后执行 grub2-mkconfig -o /boot/grub2/grub.cfg
- 调整 脏页刷写(示例:vm.dirty_ratio=50,vm.dirty_background_ratio=10):
- sysctl vm.dirty_ratio=50
- sysctl vm.dirty_background_ratio=10
- 持久化到 /etc/sysctl.conf
- 降低文件系统元数据写入:
- /etc/fstab 为数据盘增加 noatime,nodiratime(减少访问时间更新)。
- 若仍瓶颈:考虑更快磁盘(SSD/NVMe)、优化应用 I/O 模式(顺序写、合并写、缓存)。
五、系统维护与长期优化建议
- 保持系统与软件及时更新(dnf/yum update -y),修复性能回归与漏洞。
- 关闭无用服务/自启项,减少常驻占用;按需精简 firewalld/SELinux 策略,避免误配置导致反复告警与额外开销(不建议直接长期关闭 SELinux,优先修正策略)。
- 配置日志轮转与清理(如 logrotate),避免日志膨胀导致磁盘占满引发 I/O 抖动。
- 建立监控与告警(如 top/vmstat/iostat 基线、历史 sar、应用日志),在负载升高时提前介入。
- 版本与支持:
- CentOS Stream 8 已于 2024-05-31 停产(EOL),建议规划升级到CentOS Stream 9或其他仍在维护的发行版,以获得更好的安全与性能修复支持。