マインクラフトのマルチサーバーをさくらVPSで運営しているが、
日に日にメモリ使用量が増えてきている。
$ ps axu
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
1000 31055 0.0 0.0 22016 144 ? Ss 3月21 0:00 SCREEN -h 102
1000 31056 7.1 76.6 4620660 779372 pts/0 Ssl+ 3月21 618:36 java -Xmx2048
779,372 KB、このままでは契約の1GBになってメモリ不足になってしまう。
マインクラフトサーバーのメモリ指定
Minecraftサーバーに割り当て可能なメモリー量を増やす
どうやら起動スクリプトの指定で使用するメモリ量を変更できるらしい。
MAXHEAP=2048
MINHEAP=1024
HISTORY=1024
CPU_COUNT=1
INVOCATION="java -Xmx${MAXHEAP}M -Xms${MINHEAP}M -XX:+UseConcMarkSweepGC \
-XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts \
-jar $SERVICE $OPTIONS"
MAXHEAP(最大)が2048、MINHEAP(最小)が1024。オラクルのドキュメントには単位付けないとバイト指定とあるが、よく見ると変数展開の後(-Xmx${MAXHEAP}M
)にMとあるのでMB単位となる。
MAXHEAPとMINHEAPとは何か?
チューニングのためのJava VM講座(後編):ガベージコレクタの仕組みを理解する (2/2) - @IT
-Xms、-Xmx(-Xms≦-Xmx)に異なる値を設定すると、ヒープサイズは起動時には-Xmsで指定された大きさですが、状況によってJVMがヒープが足りないと判断した場合は最大-Xmxで指定した大きさまで拡大します。これらの値を同じにするとヒープサイズ調整のオーバーヘッドがなくなりパフォーマンスが上がる場合もあります。
Java仮想マシンのガベージコレクションを行う値らしい。
通常はMINHEAPまで溜まったらガベージコレクションが実行されてメモリを回収するが、場合によってはMAXHEAPということのようだ。
メモリ使用量を設定
#MAXHEAP=2048
MAXHEAP=640
#MINHEAP=1024
MINHEAP=512
HISTORY=1024
CPU_COUNT=1
INVOCATION="java -Xmx${MAXHEAP}M -Xms${MINHEAP}M -XX:+UseConcMarkSweepGC \
-XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts \
-jar $SERVICE $OPTIONS"
どうせ数人しかいないので640MB、512MBに制限することにした。