先日、自分が書いたスクリプトがサーバのCPU使用率を使いすぎてしまいちょっと困った事態になったのでその対応方法を記録しておきます。
ちなみにどういった事件が起きたかというと、
アプリログからエラーを収集するスクリプトを作成した。
jenkinsにて定期実行した。
アプリのエラーが数千万件発生しておりエラー収集スクリプトが通常であれば数秒で終わるはずが数時間たっても終了しない。
後続のjobが追い討ちをかけてCPUの使用率を上げてしまった。
という事件です。(本番環境ではなくテスト環境だったのが唯一の救い…)
(方法1)timeoutを使って制限
起動プロセスが設定時間内に終わらなかった場合、
timeoutを使えば子プロセス含めプロセスをkillできるらしいです。
timeout [OPTION] NUMBER[SUFFIX] COMMAND [ARG]...
(方法2) ulimitを使って制限
timeoutは実行時間で制限をかけることはできますが、
CPU実行時間だったり使用メモリ量だったりを考慮して、細かく制限をかけたい場合はulimitを使うと良いです。
ulimit [-acdflmnpstuvHS] [N]