【要約】Ollama をlaunchdで常駐させたら Mac がフル稼働になった話——KeepAlive の罠と2日かかった原因特定 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者がOllamaをmacOS上で常駐させるため、launchdのplistにKeepAlive=trueを設定した際、マシンが異常な高負荷状態に陥った。モデルを使用していないにもかかわらず、CPU使用率が常時80〜110%に達する事態が発生した。詳細は以下の通りである。
- ・KeepAlive=trueによる強制再起動:Ollamaがモデルをアンロードしてプロセスを終了しようとすると、launchdが即座に再起動を実行する。
- ・モデル再ロードの無限ループ:再起動のたびにモデルのロード処理が走り、その過程でCPUリソースを大量に消費し続ける。
- ・デバッグの困難さ:エラーログが一切出力されず、Activity Monitorでのプロセス確認以外に手がかりが乏しい。
// Approach
開発者は、Ollamaのメモリ管理設定とlaunchdの起動条件を最適化することで、プロセスのライフサイクルを制御するアプローチを取った。単なる常駐ではなく、リソース消費を抑えたオンデマンドな運用への切り替えを行った。具体的な手順は以下の通りである。
- ・環境変数によるメモリ解放の制御:OLLAMA_KEEP_ALIVE=0 を設定し、モデルのリクエスト終了後に即座にメモリを解放させる。
- ・起動ポリシーの変更:launchdのKeepAlive=trueを削除し、RunAtLoad=falseに設定することで、常時起動を避ける。
- ・オンデマンド起動への移行:必要な時にのみスクリプト側からプロセスを呼び出す構成へと変更する。
// Result
設定の最適化により、開発環境のリソース消費が劇的に改善された。Macの動作は正常化し、計算リソースの無駄な浪費が解消された。具体的な成果は以下の通りである。
- ・CPU負荷の劇的な低下:常時80%を超えていたCPU使用率が、5%以下へと低下した。
- ・冷却ファンの沈静化:モデル使用時のみファンが回転し、待機時の騒音問題が解消した。
- ・システムの安定化:メモリ不足のアラートが発生しなくなり、他の作業への影響が排除された。
Senior Engineer Insight
> 本件は、プロセスの『生存保証』とアプリケーションの『リソース解放』が衝突した典型的な設計ミスである。KeepAliveは、プロセスがクラッシュした際の復旧には有効だが、アプリケーションが意図的に終了する仕様(モデルのアンロード)を持つ場合、システム全体の負荷増大を招く。エッジデバイスやローカルLLMのようなリソース制約の厳しい環境では、プロセスを『常に生かす』のではなく、リクエストに応じて『必要な時だけ起動する』オンデマンド設計を基本とすべきである。