温馨提示×

centos stream8系统资源占用高怎么办

小樊
40
2025-11-29 18:31:07
栏目: 智能运维

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 持续>0kswapd0 占用高,说明内存不足引发换页。
  • 处置顺序:
    • 释放可回收缓存(仅临时缓解,不建议长期依赖):
      • 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或其他仍在维护的发行版,以获得更好的安全与性能修复支持。

0