한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

游戏卡顿白皮书 › L13 服务器架构与运维

日志/监控过载 Logging / monitoring overhead

原因 ID in-monitoring · 主责 研发团队·服务器开发 · 配合 运维团队·系统运维

在含图示和实验的完整版中打开此卡片 →

出故障时日志会激增,同步发送日志的服务器会被日志拖得更慢。

起因 出错时日志、指标的发送量激增 → 结果 日志采集器处理不过来,同步发送的服务器只能等待 → 画面表现 故障时出现的一卡一卡、卡住,因日志而更加严重

症状
一卡一卡, 卡住
因素
停顿
谁会遇到
全服
何时出现
人多的时候, 偶尔随机
负责方
主责 研发团队·服务器开发 · 配合 运维团队·系统运维
研发团队要做的事
异步发送,采样,缓冲区满了就丢弃,相同的错误日志合并发送。
运维团队要做的事
按故障时的激增量规划日志采集器容量,设置采集器积压告警。
监控图上
偶发随机尖峰 · 日志发送量,日志采集器队列
查看位置
把服务器每秒日志行数、字节数和日志采集 agent 的队列、丢弃数与 tick 耗时放在一起看。有停住的线程,用 bcc offcputime -p 看是否在等日志写入、发送
确认依据
tick 冲高时日志量飙升到平时的几十倍,游戏线程的等待时间集中在日志写入、发送的调用栈上
排除依据
日志量与平时相同,或游戏线程没有在日志上等待,日志激增就只是故障的结果,要另外找最先报错的原因
确认手段
运维工具即可确认(无需游戏代码)

出处

  1. Logging in C# Microsoft
    .NET 的日志方法是同步的,存储慢时建议不要直接写入,先写到快的存储再转移
  2. Asynchronous loggers Apache Software Foundation
    异步日志用队列吸收短时激增,但输出持续偏慢时队列会被填满,速度降到最慢那个输出的水平,或按策略丢弃日志(Discard)
  3. Demonstrations of offcputime, the Linux eBPF/bcc version IO Visor
    按调用栈汇总线程停住、离开 CPU 的时间(off-CPU),-p 指定进程

相关原因

同一层:L13 服务器架构与运维

其他层中同样导致“一卡一卡”的原因

查看含图示和实验的原卡片