Serversman@VPSでminecraft serverを動かしてみた
minecraftはサーバーがjarで*1公開されてるので、最近の安いVPSで動くのか試してみました。
使ったのはServersman@VPSのEntryプラン。月額490円で、VPSとしてはたぶん最安の価格帯で、割と重いというエントリーを見かけるサーバーです。*2自分もたまにsshでログインすると、海外のサーバーにつないでるかの様な印象を受けたり、ls
を実行すると3秒くらい返ってこなかったりと、重たいなと思ってました。
そんなVPSで動かすのは流石に厳しいかと思ったんですが、一応動きました。といっても常時稼動はさせてないし、ログインユーザーも自分一人です。
負荷
ほんとは要点を押さえた負荷計測を書きたいんですが、自分の経験値が足りません。ここを計測すると良いよとかあったら、教えてもらえるとうれしいです。ここでは、調べたことを一応まとめておきます。
メモリとか設定とか
保証メモリ | 256MB |
Burst*3 | 1GB |
$ free -m total used free shared buffers cached Mem: 1024 84 939 0 0 0 -/+ buffers/cache: 84 939 Swap: 0 0 0
どうやらゲストOSからはBurstの方で認識してる様子。
$ cat server.sh #!/bin/sh cd "${0%/*}" screen -AmdS minecraft-server java -Xms256M -Xmx512M -jar minecraft_server.jar nogui
完全に保証メモリはオーバーしてるけど、Linuxでのminecraftサーバー構築で参考にしたとこが、256MB〜512MBだったので、そのままやってみる。Burstである1GBは超えてないし。
$ server.sh
$ screen -r
あと、前述のserver.shの中身の通り、GNU screenを使ってます。これも参考にしたとこの、そのまんまですが、そのscreenをアタッチ/デタッチする事で、minecraftサーバーの管理コンソールへの出入りみたくなってて便利でした。
vmstatでのメモリ
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 962876 0 0 0 0 0 0 0 21712 1 0 99 0 0 2 0 0 191604 0 0 0 0 748 0 0 19210 63 5 32 0 0 1 0 0 187388 0 0 0 0 128 0 0 21965 93 5 0 2 0 2 0 0 183304 0 0 0 0 44 0 0 19291 88 12 0 0 0 1 0 0 169440 0 0 0 0 116 0 0 20937 80 20 0 0 0 3 0 0 158464 0 0 0 0 4 0 0 21396 80 20 0 0 0 1 0 0 154748 0 0 0 0 0 0 0 22043 95 5 0 0 0 1 0 0 140628 0 0 0 0 0 0 0 19432 90 10 0 0 0 2 0 0 135984 0 0 0 0 0 0 0 20618 37 3 60 0 0 1 0 0 135448 0 0 0 0 0 0 0 22508 12 0 88 0 0 2 0 0 135448 0 0 0 0 0 0 0 20148 4 0 96 0 0 1 0 0 121232 0 0 0 0 0 0 0 20931 42 2 56 0 0 1 0 0 121232 0 0 0 0 0 0 0 21886 2 0 98 0 0 2 0 0 121228 0 0 0 0 0 0 0 20285 6 1 93 0 0 1 0 0 121228 0 0 0 0 0 0 0 20996 3 0 97 0 0 0 0 0 121228 0 0 0 0 0 0 0 20945 8 0 92 0 0 2 0 0 120924 0 0 0 0 20 0 0 19918 20 1 75 4 0 1 0 0 120924 0 0 0 0 0 0 0 22455 5 0 95 0 0 0 0 0 120924 0 0 0 0 0 0 0 21014 2 1 97 0 0 1 0 0 120924 0 0 0 0 0 0 0 21717 7 1 92 0 0 0 0 0 120924 0 0 0 0 0 0 0 20702 2 0 98 0 0 0 0 0 120924 0 0 0 0 0 0 0 21305 4 1 95 0 0 1 0 0 120924 0 0 0 0 0 0 0 20462 7 1 92 0 0 0 0 0 120924 0 0 0 0 0 0 0 21234 2 1 97 0 0 0 0 0 120924 0 0 0 0 0 0 0 22034 5 1 94 0 0 0 0 0 120924 0 0 0 0 0 0 0 19400 9 0 91 0 0 0 0 0 120924 0 0 0 0 0 0 0 23311 1 1 98 0 0 0 0 0 120924 0 0 0 0 0 0 0 20017 1 1 98 0 0 0 0 0 120924 0 0 0 0 0 0 0 23174 2 1 97 0 0 0 0 0 120924 0 0 0 0 0 0 0 21103 2 0 98 0 0 1 0 0 120924 0 0 0 0 0 0 0 20333 1 1 98 0 0 1 0 0 120924 0 0 0 0 0 0 0 21600 2 1 97 0 0 1 0 0 120924 0 0 0 0 0 0 0 22485 2 1 97 0 0 0 0 0 120924 0 0 0 0 0 0 0 21297 1 1 98 0 0 0 0 0 120924 0 0 0 0 0 0 0 23096 7 2 91 0 0 1 0 0 120924 0 0 0 0 0 48 0 23112 1 0 99 0 0 0 0 0 120924 0 0 0 0 0 0 0 21410 5 1 94 0 0 0 0 0 120924 0 0 0 0 0 0 0 20524 1 0 99 0 0 1 0 0 120924 0 0 0 0 0 0 0 20524 2 1 97 0 0 0 0 0 120924 0 0 0 0 0 0 0 21642 15 1 84 0 0 0 0 0 120924 0 0 0 0 0 0 0 21211 2 0 98 0 0 2 0 0 120924 0 0 0 0 0 0 0 22135 1 1 98 0 0 0 0 0 120924 0 0 0 0 0 0 0 22379 2 1 97 0 0 1 0 0 120924 0 0 0 0 0 0 0 22560 2 1 97 0 0 1 0 0 120924 0 0 0 0 0 0 0 19294 0 0 100 0 0 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 0 118872 0 0 0 0 0 0 0 23444 9 6 85 0 0 1 0 0 118872 0 0 0 0 0 0 0 17799 0 1 99 0 0 2 0 0 117832 0 0 0 0 48 0 0 21431 7 1 92 0 0 3 0 0 116816 0 0 0 0 160 0 0 20965 76 3 10 11 0 5 0 0 116812 0 0 0 0 0 0 0 22318 100 0 0 0 0 7 0 0 116812 0 0 0 0 0 0 0 22867 98 2 0 0 0 4 0 0 116808 0 0 0 0 0 0 0 23124 98 2 0 0 0 3 0 0 116936 0 0 0 0 0 0 0 19912 98 2 0 0 0 4 0 0 116808 0 0 0 0 12 0 0 20049 98 2 0 0 0 3 0 0 116808 0 0 0 0 0 0 0 20265 90 10 0 0 0 3 0 0 116808 0 0 0 0 0 0 0 19507 98 3 0 0 0 3 0 0 116808 0 0 0 0 0 0 0 21049 98 3 0 0 0 2 0 0 116808 0 0 0 0 0 0 0 17629 36 1 62 0 0 2 0 0 116808 0 0 0 0 0 0 0 20166 48 2 49 0 0 1 0 0 116808 0 0 0 0 0 0 0 20479 26 2 72 0 0 2 0 0 116808 0 0 0 0 0 0 0 19205 37 1 62 0 0 3 0 0 116808 0 0 0 0 0 0 0 24517 19 1 80 0 0 0 0 0 116808 0 0 0 0 0 0 0 19756 26 1 73 0 0 1 0 0 116808 0 0 0 0 0 0 0 21972 15 2 82 0 0 0 0 0 116808 0 0 0 0 0 0 0 18953 16 0 84 0 0 2 0 0 116808 0 0 0 0 0 16 0 21333 23 1 76 0 0 2 0 0 116808 0 0 0 0 0 0 0 21037 19 1 80 0 0 1 0 0 116808 0 0 0 0 0 0 0 20176 19 2 79 0 0 2 0 0 116808 0 0 0 0 0 0 0 21889 17 1 82 0 0 1 0 0 116808 0 0 0 0 0 0 0 20650 21 1 78 0 0 2 0 0 116808 0 0 0 0 0 188 0 19998 20 2 78 0 0 1 0 0 116808 0 0 0 0 0 0 0 19948 22 1 77 0 0 2 0 0 116808 0 0 0 0 0 0 0 19595 16 1 83 0 0 2 0 0 116808 0 0 0 0 0 0 0 19722 20 1 79 0 0 2 0 0 116808 0 0 0 0 0 0 0 20921 15 1 84 0 0 1 0 0 116808 0 0 0 0 0 0 0 21287 16 1 82 0 0 0 0 0 116808 0 0 0 0 0 0 0 19460 9 1 90 0 0 1 0 0 116808 0 0 0 0 0 0 0 20371 15 1 84 0 0 1 0 0 116808 0 0 0 0 0 0 0 21202 8 1 91 0 0 1 0 0 116808 0 0 0 0 0 0 0 21123 14 1 85 0 0 2 0 0 116808 0 0 0 0 0 108 0 22018 11 2 87 0 0 2 0 0 116808 0 0 0 0 0 0 0 19797 19 1 80 0 0 1 0 0 116808 0 0 0 0 0 0 0 20424 10 2 88 0 0 1 0 0 116808 0 0 0 0 0 0 0 19446 16 0 84 0 0 0 0 0 116808 0 0 0 0 0 0 0 20830 11 1 88 0 0 3 0 0 116808 0 0 0 0 0 0 0 22003 17 1 82 0 0 0 0 0 116808 0 0 0 0 0 0 0 20120 11 1 88 0 0 1 0 0 116808 0 0 0 0 0 0 0 20644 16 2 81 0 0 0 0 0 116808 0 0 0 0 0 0 0 19673 9 0 91 0 0 0 0 0 116808 0 0 0 0 0 0 0 19631 15 2 83 0 0 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 4 0 0 116640 0 0 0 0 0 0 0 21052 68 2 30 0 0 4 0 0 116640 0 0 0 0 0 0 0 22034 98 3 0 0 0 3 0 0 116632 0 0 0 0 0 0 0 20454 98 3 0 0 0 1 0 0 116808 0 0 0 0 0 0 0 19207 95 5 0 0 0 1 0 0 116808 0 0 0 0 0 0 0 20910 13 1 86 0 0 1 0 0 116808 0 0 0 0 0 0 0 21739 1 1 98 0 0 1 0 0 116808 0 0 0 0 0 0 0 21187 1 1 98 0 0 1 0 0 116808 0 0 0 0 0 0 0 19975 1 1 98 0 0 1 0 0 962568 0 0 0 0 0 0 0 19737 7 8 85 0 0 1 0 0 962568 0 0 0 0 0 0 0 19717 2 0 98 0 0 0 0 0 962568 0 0 0 0 0 0 0 19341 1 1 98 0 0 1 0 0 962568 0 0 0 0 0 0 0 21226 1 1 98 0 0
数十秒だけ動かしてみた際のvmstat 1
です。どういう訳か、起動しただけで約753MBを消費し、そこから更に終了直前までに73MBを消費してます。合計で826MBを消費した形に。最大でも512MBまでだと思ったんだけど、なんかやたらと使ってます。
ちなみに、memoryのfreeのとこから計算してて、freeの単位はKBです。
psで見るメモリ
$ while true; do ps aux | grep 14296; sleep 1; done USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND kanonji 14296 15.6 29.6 886376 311024 pts/3 Ssl+ 22:52 0:08 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.0 29.6 886376 311084 pts/3 Ssl+ 22:52 0:09 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.3 30.5 886376 319816 pts/3 Ssl+ 22:52 0:09 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.5 30.5 886376 319876 pts/3 Ssl+ 22:52 0:09 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.5 30.5 886376 319880 pts/3 Ssl+ 22:52 0:10 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.6 30.5 886376 319888 pts/3 Ssl+ 22:52 0:10 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.6 30.5 886376 319896 pts/3 Ssl+ 22:52 0:10 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.6 30.5 886376 319896 pts/3 Ssl+ 22:52 0:10 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.6 30.5 886376 319896 pts/3 Ssl+ 22:52 0:10 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.7 30.5 886376 319896 pts/3 Ssl+ 22:52 0:11 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.7 30.5 886376 319896 pts/3 Ssl+ 22:52 0:11 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.7 30.5 886376 319900 pts/3 Ssl+ 22:52 0:11 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.8 30.5 886376 319900 pts/3 Ssl+ 22:52 0:11 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.8 30.5 886376 319900 pts/3 Ssl+ 22:52 0:11 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.8 30.5 886376 319904 pts/3 Ssl+ 22:52 0:11 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.8 30.5 886376 319904 pts/3 Ssl+ 22:52 0:12 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.8 30.5 886376 319908 pts/3 Ssl+ 22:52 0:12 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.7 30.5 886376 319912 pts/3 Ssl+ 22:52 0:12 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.7 30.5 886376 319916 pts/3 Ssl+ 22:52 0:12 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.6 30.5 886376 319916 pts/3 Ssl+ 22:52 0:12 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.5 30.5 886376 319928 pts/3 Ssl+ 22:52 0:12 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.4 30.5 886376 319928 pts/3 Ssl+ 22:52 0:12 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.4 30.5 886376 319928 pts/3 Ssl+ 22:52 0:13 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.3 30.5 886376 319940 pts/3 Ssl+ 22:52 0:13 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.4 30.5 886376 319940 pts/3 Ssl+ 22:52 0:13 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.2 30.5 886376 319940 pts/3 Ssl+ 22:52 0:13 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.3 30.5 886376 319944 pts/3 Ssl+ 22:52 0:13 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.2 30.5 886376 319944 pts/3 Ssl+ 22:52 0:13 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.2 30.5 886376 319944 pts/3 Ssl+ 22:52 0:13 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.1 30.5 886376 319944 pts/3 Ssl+ 22:52 0:13 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.1 30.5 886376 319944 pts/3 Ssl+ 22:52 0:14 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.0 30.5 886376 319944 pts/3 Ssl+ 22:52 0:14 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.9 30.5 886376 319960 pts/3 Ssl+ 22:52 0:15 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 17.1 30.5 886376 319964 pts/3 Ssl+ 22:52 0:15 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 17.0 30.5 886376 319968 pts/3 Ssl+ 22:52 0:16 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.8 30.5 886376 319968 pts/3 Ssl+ 22:52 0:16 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.7 30.5 886376 319968 pts/3 Ssl+ 22:52 0:16 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 14296 16.5 30.5 886376 319968 pts/3 Ssl+ 22:52 0:16 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 21920 0.0 0.0 11264 900 pts/1 S+ 22:54 0:00 grep 14296 kanonji 21944 0.0 0.0 11264 896 pts/1 S+ 22:54 0:00 grep 14296 kanonji 21965 0.0 0.0 11264 904 pts/1 S+ 22:54 0:00 grep 14296 kanonji 22005 0.0 0.0 11264 900 pts/1 S+ 22:54 0:00 grep 14296
同時に、ps aux
でメモリを見てみました。こっちで見ると、一番使っている終了直前でも312MBしか使ってません。どういうわけかvmstat
で見たのとずいぶん違う形になったけど、ほかにメモリを使ってるプロセスがあるんだろうか。もしかしてGNU screenかな?
なお、RSS*4が実メモリを表すらしく、ここも単位はKBです。
ps aux | sort -k6
$ ps aux | sort -k6 -r kanonji 1857 12.2 33.4 963480 350956 pts/3 Ssl+ 23:27 0:40 java -Xms256M -Xmx512M -jar minecraft_server.jar nogui nobody 3224 0.0 0.6 98060 6392 ? Sl Jul11 0:38 python /usr/local/share/ajaxterm/ajaxterm.py --daemon --port=8022 --uid=nobody root 3188 0.0 0.4 185672 5216 ? Ss Jul11 0:12 /usr/sbin/httpd root 8075 0.0 0.2 67260 3100 ? Ss 22:42 0:00 sshd: kanonji [priv] root 16325 0.0 0.2 67260 3100 ? Ss 21:59 0:00 sshd: kanonji [priv] root 5536 0.0 0.2 67260 3096 ? Ss 22:41 0:00 sshd: kanonji [priv] daemon 36711 0.0 0.2 185672 2908 ? S Sep11 0:00 /usr/sbin/httpd daemon 48360 0.0 0.2 185672 2756 ? S 07:01 0:00 /usr/sbin/httpd kanonji 5585 0.0 0.1 12016 1776 pts/1 Ss 22:41 0:00 -bash kanonji 8111 0.0 0.1 12016 1772 pts/2 Ss 22:42 0:00 -bash kanonji 17447 0.0 0.1 12016 1768 pts/0 Ss+ 21:59 0:00 -bash kanonji 8110 0.0 0.1 65336 1512 ? S 22:42 0:00 sshd: kanonji@pts/2 kanonji 17445 0.0 0.1 65192 1496 ? S 21:59 0:00 sshd: kanonji@pts/0 kanonji 5584 0.0 0.1 65192 1492 ? S 22:41 0:00 sshd: kanonji@pts/1 kanonji 1856 0.0 0.1 22700 1336 ? Ss 23:27 0:00 SCREEN -AmdS minecraft-server java -Xms256M -Xmx512M -jar minecraft_server.jar nogui kanonji 3735 0.0 0.1 22408 1264 pts/2 S+ 23:27 0:00 screen -r root 50868 0.0 0.1 62632 1212 ? Ss Jul13 0:00 /usr/sbin/sshd root 3199 0.0 0.1 20868 1168 ? Ss Jul11 0:02 crond USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND kanonji 40878 0.0 0.0 10992 996 pts/1 R+ 23:32 0:00 ps aux root 3154 0.0 0.0 21644 920 ? Ss Jul11 0:00 xinetd -stayalive -pidfile /var/run/xinetd.pid root 3210 0.0 0.0 46736 816 ? Ss Jul11 0:00 /usr/sbin/saslauthd -m /var/run/saslauthd -a pam -n 2 kanonji 40880 0.0 0.0 55012 776 pts/1 S+ 23:32 0:00 sort -k6 -r root 46764 0.0 0.0 12780 768 ? S<s Jul13 0:00 /sbin/udevd -d root 3105 0.0 0.0 10108 756 ? Ss Jul11 0:00 syslogd -m 0 root 1 0.0 0.0 10352 736 ? Ss Jul11 0:17 init [3] root 3213 0.0 0.0 46736 556 ? S Jul11 0:00 /usr/sbin/saslauthd -m /var/run/saslauthd -a pam -n 2
なので、minecraftサーバーを起動してちょっと経ってからps
で見てみました。RSSを見てみても別段メモリを消費してるプロセスは無い様子。vmstat
とps
で見るメモリの消費量の差は何なんだろう?
minecraftサーバーからの出力に断続的に出ていたwarning
[WARNING] Can't keep up! Did the system time change, or is the server overloaded?
This message is written when the server is unable to update the world in normal speed (20 frames per second). This is mainly due to saving and loading chunks. We're working on it...
Inactive or retired community
フォーラムにあった公式の回答によると、処理が20フレーム/sを下回った場合に出るものらしい。警告文からは、原因がはっきりとしないものらしいけど、大抵はチャンクの保存や読み込み、つまりディスクI/Oが原因。これは調べてたらmincraft serverはディスクアクセスが激しいとか、このI/Oが原因でwarningが出てるとか書いてるエントリーをちらほら見かけたので、そういう事なんだろう。
自分の環境でwarningが出るのは、やっぱりI/O待ちなのか、それともXenやVmwareでよくあるゲストOSの時間がずれる問題がOpenVZでもあって、割と警告文通り時間が変わったりしてるからなのか。もっと深く調べないと分からない。
インストール
$ sudo yum install java-1.6.0-openjdk.x86_64 $ mkdir minecraft $ wget http://www.minecraft.net/download/minecraft_server.jar -P ~/minecraft $ vi minecraft/server.sh #!/bin/sh cd "${0%/*}" screen -AmdS minecraft-server java -Xms512M -Xmx512M -jar minecraft_server.jar nogui $ chmod u+x minecraft/server.sh $ vi .screenrc zombie "q^M"
http://www.rui-fam.com/sims-style/blog/2011/04/minecraftvps.htmlを参考に、こんな感じで入れました。