游戏卡顿白皮书 › L11 磁盘
写入 core dump Core dump writing
原因 ID dk-coredump · 主责 运维团队·系统运维 · 配合 研发团队·服务器开发
在含图示和实验的完整版中打开此卡片 →
服务器崩溃时要把数 GB 内存写到磁盘,重启有时会因此推迟好几分钟。
起因 服务器崩溃,把全部内存写成文件 → 结果 写入数 GB 期间无法重启 → 画面表现 服务器崩溃导致掉线,之后很长时间连不上
- 症状
- 连不上/无限加载
- 因素
- 停顿
- 谁会遇到
- 全服
- 何时出现
- 偶尔随机
- 负责方
- 主责 运维团队·系统运维 · 配合 研发团队·服务器开发
- 研发团队要做的事
- 考虑只保存必要内存的小 dump(minidump)方式,修复崩溃原因。
- 运维团队要做的事
- 限制 dump 大小(OS 的 core dump 设置),使用更快的磁盘,把重启和 dump 分开(dump 的压缩、上传在重启后另行处理)。
- 监控图上
- 连接成批断开 · 连接数、服务器重启时间
- 查看位置
- 把崩溃时间、core 文件大小(coredumpctl list、info,或 core_pattern 指向位置的文件)、文件写完的时间、服务重新拉起的时间放在一起,看这段时间 iostat -x 的 wkB/s
- 确认依据
- 崩溃后写入数 GB 的 core 文件期间,磁盘写入一直贴近上限,写完之后才开始重启
- 排除依据
- core dump 已关闭或文件很小,重启仍然慢,是地图加载、DB 冷缓存等服务器启动过程的问题,看“冷缓存(刚重启时)”(db-cold-cache)
- 确认手段
- 运维工具即可确认(无需游戏代码)
出处
- core(5) — Linux manual page Linux man-pages
用 RLIMIT_CORE 限制 core 文件大小,用 coredump_filter 选择要保存的内存区域,也可以把 core dump 通过管道交给程序另行处理 - Minidump Files Microsoft
minidump 只保存崩溃转储信息中有用的一部分,生成得快、体积小 - coredumpctl(1) — Linux manual page systemd
list:journal 中记录的 core dump 列表(TIME 为内核报告的崩溃时间),info:各 dump 的详情和写入磁盘的大小 - iostat(1) — Linux manual page sysstat
-x:wkB/s(每秒磁盘写入量)
相关原因
同一层:L11 磁盘
其他层中同样导致“连不上/无限加载”的原因
查看含图示和实验的原卡片