遊戲 Lag 白皮書 › L7 伺服器 OS(kernel)
排程工作 Cron jobs (log rotation, backup, scans)
原因 ID so-cron · 主要負責 基礎設施團隊(伺服器基礎設施)
在含圖解與實驗的完整版中開啟卡片 →
每天固定時間執行的 log 壓縮、備份、安全掃描會占用 CPU 與磁碟。
為什麼 OS 工作在排定的時間執行 → 於是 與遊戲伺服器共用 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 unit - pidstat(1) — Linux manual page sysstat
-u 依處理程序顯示 CPU,-d 依處理程序顯示磁碟 I/O
相關原因
同一層:L7 伺服器 OS(kernel)
同一症狀(卡頓)在其他層的原因
查看含圖解與實驗的完整版卡片