VPSでサービスを運用していたら、エラーログにKilledが大量にはかれていた(解決済み)
エラーログを見ると...
サービスの定期実行のプログラムがうまく動いていなかったので、エラーログを見てみると...
killed killed killed killed killed
conohaのVPSを利用していて、nginxでWebサーバーを立てて、かつ、裏でpythonで複数の処理をしています。
大量にkilledされているのは、pythonのプロセスです。
killedのエラーの意味は?
リソースが足りず、強制的にプロセスがkillされています。
私の場合は、conohaの一番安いプランのメモリ500MBです。
そのため、単純に500MBのメモリじゃさばけない量のプロセスを走らせた、ということです。
解決策
1. メモリを増やす
2. 処理を軽くする
メモリを増やして、プロセスをさばけるようにするか、あるいは走らせる処理のメモリを食う量をへらすの2択だと思います。
メモリを増やす、というのはつまり、conohaのプランをグレードアップさせる、ですね。
メモリの使用状況を調べる
グレードアップさせてもメモリが足りるかわからないので、現状の使用状況を調べます。
Linux系であれば、freeコマンドで簡単に調べることができます。
hoge@fuga:~$ free #freeコマンドは基本的にKB表示なので、読みにくいです。 #そのため、オプションコマンドの-hをつけて、人間に読みやすい単位で表示させます。 hoge@fuga:~$ free -h total used free shared buff/cache available Mem: 488M 363M 12M 5.6M 112M 65M Swap: 2.0G 2.0G 0B
メモリはMemの行。
totalがメモリの総量で、usedが利用中のメモリ量。
freeは、利用可能なメモリで、sharedは無視。
buff/cacheは、ファイルへのアクセスやHDDなどの記憶媒体へのアクセスのキャッシュをためているので、Linuxを使っていれば必ず溜まっています。
実質、利用可能なメモリです。
なので、利用可能なメモリとして利用可能な総量は、freeとbuff/cacheの足し算です。
ですが、ここは単純な足し算ではないようで(ここらへん理解していない
結果的にavailableを見ればOKです。
私の場合は、65Mしか利用可能なメモリが残っておらず、サービスの構成としてはnginxとpythonの処理です。
nginxのサーバーを立ち上げるだけでメモリは30~50MBは使い、アクセスがあれば、プラスアルファでメモリを消費します。
もちろんキャッシュの利用はしていますが、あまりにバッファが少ないですね。
ここでさらにpythonの処理をしていたため、メモリが足らずkilledされていた、ということです。
conohaは、一つグレードアップさせると1G使えるので、これでいけそう。
メモリはマックスの500MB使えるわけではない
ちなみにVPSのメモリは500MBあるのになんで100MBしかavairableが残っていなんだと。
OS動かしているだけでかなりメモリ食うんですよね。
windowsはもっと酷くて、4GBあってもデフォルトで2~3GBはメモリを消費していた印象です。
今、VPSで使っているのはUbuntuで、Linuxの中では重い方のOSです。
通常のメモリ消費が少ないのはCentOSあたりだと思っています。
ここらへんのインフラ周りはあまり詳しくないので、たぶん、ですが。
まとめ
メモリなんて意識してプログラム書いたことないので、killedのエラーは若干戸惑いました。
以上、終わり!