メモリはどれくらい必要か (実際の使用量を測る)
プランや専用サーバーを選ぶときに最も迷いやすいのがメモリです。すでに使っているサーバーがあるなら、実際の使用量を測って決めるのが最も正確です。
1. サーバー全体の使用量を見る
free -h
usedよりも available を見てください。新しいプログラムが実際にさらに使える量です。buff/cacheはLinuxが一時的に借りて使い、必要になれば返却するメモリなので、心配する必要はありません。(各項目の意味は自分のサーバーのスペックを確認するを参照)
Windowsサーバーでは、タスク マネージャー(Ctrl + Shift + Esc)→ パフォーマンス → メモリで、使用中の量と利用可能な量を確認できます。
2. プログラムごとの使用量を見る
ps -eo pid,rss,comm --sort=-rss | head -n 11
メモリを多く使っている順に10個表示します。RSSがプログラムが実際に占めているメモリで、単位はKBです。(1,024が1MB、1,048,576が1GB)
Windowsサーバーでは、タスク マネージャーのプロセスタブでメモリ列の見出しをクリックすると、多く使っている順に並べ替えられます。
3. 最も多く使うときを基準に決めましょう
メモリは、接続者が最も多いときや、バックアップやアップデートが動いているときに最も多く使われます。一度測って終わりにするより、1日分記録しておくと最大値がわかります。
while true; do echo "$(date '+%F %T') $(free -m | awk '/^Mem/ {print "used=" $3 "MB available=" $7 "MB"}')"; sleep 60; done >> ~/mem.log
1分ごとに使用量を~/mem.logに書き込みます。Ctrl + Cで止められ、ウィンドウを閉じても記録を続けたい場合はscreen・tmuxの中で実行してください。記録が集まったら、余裕が最も少なかった瞬間を探してみます。
sort -t= -k3 -n ~/mem.log | head -n 3
そのときのavailableにも十分な余裕が残るスペックが適切です。正確な基準がわからない場合は、VPSのスペックの選び方 (用途別おすすめスペック)のように、1段階余裕をもって選ぶことをおすすめします。
4. 用途別にあわせて確認すること
- マインクラフトJava版サーバー — サーバーのメモリは、ゲームに割り当てるメモリ(
-Xmx)にOSの分を足した量が必要です。OSの分として、Linuxは1〜2GB、Windowsは2〜3GBを残してください。Javaは-Xmxで決めた量より少し多く使うため、サーバーのメモリぴったりに合わせてはいけません。(マインクラフトサーバーを作る (Java版、Paper・バニラ)) - Windowsサーバー — OSが使うメモリがLinuxより多いため、同じプログラムでもメモリにより余裕が必要です。小さいプランではWindows Serverを選べない場合もあります。(料金プランに「Windows Server 非対応」と表示)
- Discordボット — ほとんどの場合少ないメモリで十分なので、ボット1つなら最も小さいプランから始めても大丈夫です。音楽ボットのように重い処理をするなら、1段階上のプランを選んでください。
- データベース — メモリに余裕があるほど、よく使うデータをメモリに載せて処理するため、速くなります。
- 複数のプログラムを一緒に — プログラムごとに、最も多く使うときの使用量を足して計算してください。
5. メモリが足りないと起こること
Linuxはメモリが尽きると、プログラムを1つ強制終了します。プログラムが理由もなく終了した場合は、まずこれを確認してください。
sudo dmesg -T | grep -i -E "out of memory|killed process"
結果が表示された場合は、メモリ不足で終了したということです。