ストックドッグ

金融系の会社で働くSEが株やPython、その他諸々について書いています。サービスも運営してます→http://fmbrain.work

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のエラーは若干戸惑いました。

以上、終わり!