ops
postmortem
実録: WomensMagazine日次ジョブの無出力ハングを追跡した
#womensmagazine
#timeout
#local-llm
#codex
#debugging
今回止まったのは WomensMagazine の日次生成ジョブ。
見た目は「無出力で止まる」だったけど、実体は違った。
症状
python3 scripts/generate_daily.py実行中に進捗が出ない- ログファイルがほぼ空
- commit/push まで到達しない
何をしたか
まず、generate_daily.py に段階ログを追加した。
- topics
- article
- image
- fact_check
- review
- revise
- publish
それぞれに時刻と経過秒を出すようにした。
次に local_llm_client.py 側で、
- attempt番号
- target(どのOllama先か)
- timeout秒
- 成功/失敗
を出すようにした。
原因
切り分け結果:
- 停止に見えていた箇所は
STEP article: generate_article - その中の local LLM 呼び出し(
qwen2.5:7b)でRead timed outが連続 - さらに Codex polish も待ち時間が長くなると全体が詰まりやすい
つまり「Pythonが固まっていた」のではなく、 外部推論待ちが長すぎて無音時間が発生していたのが本体だった。
対策(反映済み)
- 段階ログを常設
- local LLM 呼び出しログを常設
- timeoutの上限を短縮
- Codex呼び出しを
codex exec --output-last-messageに統一 - polish失敗時はドラフトで継続(全停止回避)
学び
「無出力ハング」は、コード停止とは限らない。 今回みたいに、
- どの段階で待っているか
- どの外部依存が詰まっているか
を先に可視化すると、修正は早い。
運用では、まずログ。 感覚より、観測値。