二〇二六年 単一ノード七×二十四:launchd ThrottleInterval・Nice・IO の公平性マトリクスと長タスク完了率
夜間バッチと常時処理の同居では、完了率と体感がすれ違います。ThrottleInterval で起爆間隔、Nice で CPU 譲渡、IO は窓と並列で抑えます。表・plist・五手順・FAQ です。夜間キュー稿・launchd 比較稿・水位 FAQ。公開購入はログイン不要でノード確保可。
- KeepAlive の短周期再起動でキャッシュが毎回捨てられ長タスクが終わらない。
- 優先度未設定で日中操作とバッチが同格になり体感が荒れる。
- 閾値が文書化されず調整のたびに手戻りコストが積む。
公平性マトリクス(何を先にいじるか)
支配リソースが CPU かディスクかで最初の一手が変わります。
| 支配 | 第一レバー | 第二レバー | 長タスク完了率への効き |
|---|---|---|---|
| CPU | Nice | ThrottleInterval | 体感改善が速い |
| IO | 夜間窓・並列削減 | スクラッチ分離 | Nice 単体は弱い |
| 両方 | 窓分離 | Throttle と Nice | 表を週一改定まで凍結 |
plist に書くキー例(抜粋)
LaunchAgent 想定。本番前に launchctl bootstrap で検証。
<key>ProgramArguments</key><array>
<string>/opt/scripts/run_batch.sh</string></array>
<key>Nice</key><integer>10</integer>
<key>ThrottleInterval</key><integer>60</integer>
<key>StartCalendarInterval</key><dict>
<key>Hour</key><integer>1</integer>
<key>Minute</key><integer>15</integer></dict>
<key>ProcessType</key><string>Background</string>
Nice は plist の整数か nice ラッパのどちらか一方を主にし、二重指定を避けます。
Nice と IO の考え方
CPU は nice -n 10〜18 から試し、常時側 p95 が許容八割なら戻す。
macOS 本機に ionice は無いので IO は並列・バッファ・読み間引きで抑える。Linux VM 併設なら夜間だけ ionice -c2 型を参照用に。
夜間窓との重ね方
StartCalendarInterval で静穏帯に重い一発を寄せ、窓外は Throttle を長めに。窓前後十五分は別ジョブ禁止を一枚化。退避マトリクスで段を揃える。
五手順(受入ランブック)
- 一週間メトリクスで CPU 型か IO 型かラベル付け。
- 夜間窓と窓外 Throttle をカレンダー固定。
- Nice は plist かラッパの主役を一つに決める。
- 窓内だけ並列を上げ、窓外は直列か滞留許容を合意。
- 変更は週一まで。長期 FAQへ SLO をリンク。
パラメータ出発点(文書に貼る用)
- ThrottleInterval は六十秒前後から、短周期再起動が消えるまで広げる。
- スカベンジャ Nice は十〜十五、常時帯は五前後上限目安。
- 夜間窓が二時間未満なら並列より直列を先に。
表に凍結すれば試行錯誤が減りコストが読みやすい。
FAQ
- ディスク争用が強いとき Nice だけで足りますか
- 多くは不足します。キュー飽和時は Nice だけでは完了は伸びにくいので窓・並列・パス分離を先に。
- CPU 争用では何を見ればよいですか
- 性能コア占有率・熱制御・同居 p95。Nice と Throttle は体感と歩留まりのトレードなので閾値で一段ずつ。
まとめ:支配リソースでレバーを選び、夜間窓と Throttle をセットで固定。料金・公開購入・ヘルプで接続とノードを。