游戏卡顿白皮书 › L7 服务器操作系统(内核)
定时任务 Cron jobs (log rotation, backup, scans)
原因 ID so-cron · 主责 运维团队·系统运维
在含图示和实验的完整版中打开此卡片 →
每天在同一时刻运行的日志压缩、备份、安全扫描会占用 CPU 和磁盘。
起因 操作系统任务在固定时刻运行 → 结果 与游戏服务器争用 CPU 和磁盘 → 画面表现 每天凌晨 4 点这样的固定时刻出现一卡一卡、慢动作
- 症状
- 一卡一卡, 慢动作
- 因素
- 停顿
- 谁会遇到
- 全服
- 何时出现
- 固定周期
- 负责方
- 主责 运维团队·系统运维
- 运维团队要做的事
- 错开任务时间;降低优先级(nice、ionice);与游戏服务器分开(放到单独的服务器上运行)。
- 监控图上
- 周期性尖峰 · CPU 使用率、磁盘队列、服务器 tick 耗时
- 查看位置
- 用 crontab 和 systemctl list-timers 汇总定时任务的执行时刻,在 tick 冲高的时刻用 pidstat -u -d 看哪个进程在用 CPU 和磁盘
- 确认依据
- tick 每天(或每小时)在同一时刻冲高,且那个时刻定时任务进程占用 CPU 和磁盘
- 排除依据
- 冲高时刻与每天的固定时刻对不上,则不是这个原因。每隔几秒或几分钟冲高,看“服务器 GC 全局停顿”“定时器集中触发”
- 确认手段
- 运维工具即可确认(无需游戏代码)
出处
- ionice(1) — Linux manual page util-linux
idle 级别的任务只在其他程序不使用磁盘时才能获得 I/O - systemd.timer(5) — Linux manual page systemd
用 RandomizedDelaySec 随机推迟定时任务的时刻,减少负载集中 - systemctl(1) — Linux manual page systemd
list-timers:按下次执行时间的顺序显示 timer 单元 - pidstat(1) — Linux manual page sysstat
-u 按进程显示 CPU,-d 按进程显示磁盘 I/O
相关原因
同一层:L7 服务器操作系统(内核)
其他层中同样导致“一卡一卡”的原因
查看含图示和实验的原卡片