全力で怠けたい

怠けるために全力を尽くしたいブログ。

Redash の EC2 インスタンスのメモリが枯渇して CPU 使用率が高騰したときにやったこと。

Redash を動かしている EC2 インスタンスのメモリが枯渇して CPU 使用率が高騰したときにやったことのメモ。

EC2 インスタンスの CPU 使用率が高騰

ことの始まりは開発で使ってる EC2 インスタンスの CPU 使用率が60〜100%くらいをいったりきたりしているのに気が付いたときだった。 問題の EC2 インスタンスt2.small でここ数ヶ月は CPU クレジットが上限に張り付くくらい CPU 負荷が余裕がある感じだったので最近の変更が原因ぽいと思ったが、思い返してみると問題の EC2 インスタンスで動かしている Redash を少し前に v8 にアップデートしていた。 Redash のアップデートが関係してそうだなーと思いながらとりあえず ssh で問題の EC2 インスタンスに接続して状況を見てみた。

やったこと

kswapd0 プロセスが CPU を食いつぶす

ssh で問題の EC2 インスタンスに入れたので top コマンドを実行してみると kswapd0 という見慣れないプロセスが CPU を断続的に 50〜90% くらい使っていた。 調べてみるとメモリのスワップが発生しているときにときにスワップインしたりスワップアウトするカーネルスレッドっぽい。 メモリがスワップするということはメモリが枯渇している可能性が高いので free コマンドでメモリの状況を確認してみると used が 1.6GB くらいで free が 50MB くらいしかないようだった。

Redash の Docker コンテナがメモリをモリモリ食う

top, ctop コマンドを実行してしばらく様子をみていると Redash の serverworker の Docker コンテナが大量にメモリを使っているようだった。 問題の EC2 の Redash はあまり使っていないことが分かっているので、https://redash.io/help/open-source/admin-guide/env-vars-settingsRedashのメモリ使用量を節約する - ariarijp’s blog を参考にしながら REDASH_WEB_WORKERS 環境変数を 4 => 1 にして WORKERS_COUNT 環境変数を 2 => 1 にしてから Redash の Docker コンテナを再起動した。 Docker コンテナ再起動後に軽く Redash のクエリを発行したりダッシュボードを表示したりしてから free コマンドを実行してみると free が 100MB くらいになって少し余裕ができたが、まだスワップが発生するみたいで kswapd0 プロセスがときどき top コマンドに顔を出すようだった。

再び https://redash.io/help/open-source/admin-guide/env-vars-settingsRe:dashのキャッシュデータを削除する - Qiita を参考にして REDASH_QUERY_RESULTS_CLEANUP_MAX_AGE 環境変数を 7 => 1 にしてから Redash の Docker コンテナを再起動した。 REDASH_QUERY_RESULTS_CLEANUP_MAX_AGE は過去のキャッシュを何日間保持するかを指定する環境変数だが、この EC2 の Redash はあまり使っていないのでキャッシュを保持する必要もあまりないのが分かっているので1日だけキャッシュを保持するようにしてみた。

Docker コンテナ再起動後にまた軽く Redash をいじってから free コマンドを実行してみると free が 350MB くらいになってだいぶ余裕ができたみたいで、 kswapd0 プロセスが top コマンドに顔を出すこともなくなった。

今後同じことが起きたら

とりあえず Redash を動かしている EC2 インスタンスのメモリが枯渇したり CPU 使用率が高騰することはなくなったけど、また同じ原因や違う原因でメモリが枯渇したりするようなら t2.small => t2.medium にサイズアップすると思う。 今の使い方だと一ヶ月あたり 5USD くらい使用料金が高くなってしまうけど、調査したりとかの出費を一ヶ月あたり 5USD の出費でなくせるならむしろ安いと思うので。

参考にしたサイト

とりあえずコレはやっておく

今回は Redash のミドルウェアのプロセス数を減らしたけど、参考にしたサイト Redashのメモリ使用量を節約する - ariarijp’s blogariarijp さんが「プラグインを無効にするともっとメモリを節約できますよ」と教えてくれたのでやっておく。