在香港站群场景下,常见瓶颈包括:磁盘/网络IO、单核或多核CPU饱和、可用内存不够导致频繁交换(swap)、以及宿主机资源争用。上述问题会造成页面响应慢、爬虫或采集任务超时、进程被OOM杀死等。
使用工具:iostat、iotop、vmstat、top/htop、sar、dstat、ss、iftop 等;在容器或VPS上还可用 /proc/interrupts /proc/meminfo。结合负载场景做压力测试(fio、ab、wrk)。
优先定位出 I/O wait (iowait)、CPU steal、Available memory 三项指标,再进行针对性优化。
先用 iostat -x 1 或 iotop 确认设备利用率、await、svctm、%util。用 fio 做基准测试(读写混合、随机/顺序)以模拟真实负载。
1) 选择合适文件系统(如 ext4 或 xfs),挂载选项加 noatime;2) 根据磁盘类型设置 IO 调度器(SSD/虚拟盘用 noop 或 deadline);3) 调整内核参数:vm.dirty_ratio、vm.dirty_background_ratio 或使用 vm.dirty_bytes;4) 使用 LVM cache、dm-cache、或者将热文件放到 tmpfs。
设置调度器:echo noop > /sys/block/vda/queue/scheduler;调整 dirty:sysctl -w vm.dirty_ratio=10。
使用 top、htop 观察 %user、%system、%iowait、%steal。若有高 %steal 表明宿主机过载,需与云商沟通或迁移实例。
1) 进程亲和性:使用 taskset 或系统启动参数 isolcpus 固定关键进程在固定 vCPU 上;2) 调整调度器与 governor:将 CPU governor 设为 performance;3) 使用 cgroups 限制背景任务,给站群主进程留足配额;4) 减少系统中断干扰,安装并配置 irqbalance 或绑定中断到空闲核。
VPS 环境下若频繁遇到 %steal,硬调(如 isolcpus)效果有限,应考虑升级实例或横向扩容。
表现为 Available 内存持续低、频繁使用 swap、OOM killer 日志、进程响应变慢。监控 free、/proc/meminfo 与 vmstat 可定位问题。
1) 调整 vm.swappiness(建议对站群设为 10-20);2) 设置 vm.vfs_cache_pressure 降低内核回收缓存频率;3) 启用 zswap 或 zram 以缓解物理 swap 压力;4) 对数据库或缓存使用 HugePages 或调整应用内存配置。
设置 swappiness:sysctl -w vm.swappiness=10;启用 zswap 在 GRUB 或内核参数中添加 zswap.enabled=1。
站群规模通常较大,人工逐台排查耗时且不稳定。集中监控可以提前预警,自动化脚本能在低流量时执行调优或回滚策略。
1) 监控栈:Prometheus + node_exporter + Grafana,用来采集 CPU/iowait/iops/memory/swap/网络延迟;2) Alert:根据阈值触发告警(iowait>20% 持续 5min、swap 使用>30% 等);3) 自动化:用 Ansible/Salt 批量跑 sysctl、调整 IO 调度器、分发优化脚本;4) 定期基准测试:用 Jenkins 或 cron 在低峰期运行 fio/wrk 并保存结果。
示例:写一个小脚本检测 iowait 并在阈值过高时将关键目录迁移到 tmpfs(注意持久化策略)。上线前在预生产验证,并保留回滚方案以免影响业务。