游戏卡顿白皮书 › L11 磁盘
备份/压缩/扫描任务 Backup / compression / scans
原因 ID dk-backup · 主责 运维团队·系统运维 · 配合 运维团队·数据库运维
在含图示和实验的完整版中打开此卡片 →
凌晨的备份、日志压缩、安全扫描独占磁盘时,游戏服务器的读写会被挤到后面。
起因 定时的备份、压缩任务启动 → 结果 占用了大部分磁盘带宽和 IOPS → 画面表现 每天同一时间卡顿
- 症状
- 一卡一卡, 操作延迟
- 因素
- 停顿, 延迟
- 谁会遇到
- 全服
- 何时出现
- 固定周期
- 负责方
- 主责 运维团队·系统运维 · 配合 运维团队·数据库运维
- 运维团队要做的事
- 服务器/OS:降低备份、压缩、扫描任务的 I/O 优先级,错开执行时间。DB 服务器:在从库上做备份。
- 监控图上
- 周期性尖峰 · 磁盘利用率、磁盘等待时间
- 查看位置
- 用 sar -d 把过去几天的记录(/var/log/sa 下的按日文件,需要 sadc 用 -S DISK 采集磁盘项)中的 %util、await、aqu-sz 按日期叠加对照;在那个时间点用 pidstat -d 1 找出 kB_rd/s、kB_wr/s 最大的进程,与 cron、systemd 定时器的计划对照
- 确认依据
- 每天同一时间 await 和 %util 飙升,此时备份、压缩、扫描进程占了大部分磁盘读写
- 排除依据
- 飙升时间每天不同,就不太可能是定时任务。那个时间的 I/O 大部分来自游戏服务器自己,属于存盘、日志问题,看“fsync 风暴”(dk-fsync)、“同步写日志”(dk-sync-log)
- 确认手段
- 运维工具即可确认(无需游戏代码)
出处
- ionice(1) — Linux manual page util-linux
以 idle 类运行的任务,只在其他程序不用磁盘时才分到磁盘时间 - Using Replication for Backups MySQL
停止从库复制来做备份,不影响主库运行 - sar(1) — Linux manual page sysstat
-d:按日记录文件(默认 /var/log/sa)中各设备的 await、aqu-sz、%util;磁盘项需要用 sadc 的 -S DISK 选项采集 - pidstat(1) — Linux manual page sysstat
-d:各进程的 kB_rd/s、kB_wr/s(每秒磁盘读、写量)
相关原因
同一层:L11 磁盘
其他层中同样导致“一卡一卡”的原因
查看含图示和实验的原卡片