Slack通知機能にメモリリークは無い
Slack通知機能にメモリリークがあるCodex CLI.icon
src/server/lib/notification/project.js:11-47 の notifications 連想配列が、プロジェクトごとに Notification インスタンスを永続的に保持しています。
stackProjectNotification() はコミット(page:updated)が来るたびにプロジェクト ID をキーに setupNotification() を呼びますが、一度生成したインスタンスを削除する処理が存在しません。
Notification は EventEmitter を継承し、自前の commits 配列・タイマー (setTimeout) を持ちます。clearStack() で配列は空にしますが、インスタンス自体はグローバル配列に強参照されたままです。そのため、時間の経過とともに「一度でも更新があったプロジェクト」の数だけ常に増え続け、プロセスのメモリがじわじわ膨らみます。リクエスト数ではなく純粋な経過時間に比例して増える、というヒントと一致します。
対策の方向性
1. Flush 完了時に該当プロジェクトのエントリをdelete notifications[projectId]する、または一定時間コミットが来なければ setTimeout で破棄するなど、アイドル状態の Notification を解放する。
2. そもそも notifications を常駐させず、バッチング期間中だけインスタンスを保持して使い終わったら捨てる構造にする。
3. メモリ増加の挙動をさらに確認したい場合は、notifications のキー数や Notification ごとの pending コミット件数をログ出力・メトリクス化する。
問題なさそうshokai.icon
.commit配列は解放している
他に大きなfieldが無い
.timerId
.delay
実質90000で固定