PocketMineがCrashDumpを吐いて停止する時の対処法
Minecraft PE用マルチプレイサーバーPocketMineを常時動かしていると
CrashDumpを吐いて停止しちゃう時ってありません?
今回はそんな時の対応方法メモです。参考にしてください
目次
- 目次
- PocketMineがCrashDumpを吐いた時のログを見てみる
- CrashDumpの中身を確認してみる
- 対応方法(pocketmine.ymlの修正)
- 設定の反映(PocketMine)の再起動
- (参考)PocketMineのインストール方法(PE v0.14.2.0対応版)
- 試した環境
PocketMineがCrashDumpを吐いた時のログを見てみる
あれ??動かしてたはずのPocketMineが止まってる?
という時は、とりあえずPocketMineをインストールしたディレクトリの中にある
server.logを確認してみましょう。
2016-04-29 [19:53:37] [Server thread/EMERGENCY]: An unrecoverable error has occurred and the server has crashed. Creating a crash dump 2016-04-29 [19:53:37] [Server thread/EMERGENCY]: Please upload the "/home/mine/PocketMine-MP.git/CrashDump_Fri_Apr_29-19.53.37-JST_2016.log" file to the Crash A rchive and submit the link to the Bug Reporting page. Give as much info as you can.
ログの中に"[Server thread/EMERGENCY]: An unrecoverable error has occurred and the server has crashed."
って出てたら,この先のメモを確認してみてください。
CrashDumpの中身を確認してみる
server.logに書いてある"[Server thread/EMERGENCY]: Please upload the〜"の先のファイルが
CrashDumpです。Dumpの中身を確認!なんて力まなくてよいです。確認するは初めの数行。
とりあえず開いてみましょう。
[mine@PocketMineMP PocketMine-MP.git]$ less CrashDump_Fri_Apr_29-19.53.37-JST_2016.log less CrashDump_Fri_Apr_29-19.53.37-JST_2016.log PocketMine-MP Crash Dump Fri Apr 29 19:53:37 JST 2016 Error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 131072 bytes)
dumpの中に”Error: Allowed memory size of〜”って表示されていたら,メモリ不足で停止したと推測できます。
PocketMineが利用できるメモリを増やしてあげましょう。
対応方法(pocketmine.ymlの修正)
ここからが対応方法。PocketMineのメモリ割当を変更するときは
PocketMineをインストールしたディレクトリの中の"pocketmine.yml"を修正します。
修正箇所(main-hard-limit)
修正箇所は"pocketmine.yml"の中の"main-hard-limit"部分
単位はメガバイト。この値までメモリを使うと,pocketmineが停止します。
#Main thread hard memory limit in megabytes. Set to 0 to disable #This will stop the server when the limit is surpassed main-hard-limit: 1024
(参考)pocketmineのソース該当部分
参考までに,"pocketmine.yml"の中の"main-hard-limit"部分を
pocketmineのPHPプログラムがどのように扱っているか確認してみます。
/src/pocketmine/MemoryManager.php $hardLimit = ((int) $this->server->getProperty("memory.main-hard-limit", $defaultMemory)); if($hardLimit <= 0){ ini_set("memory_limit", -1); }else{ ini_set("memory_limit", $hardLimit . "M"); }
読み込んだ値を"ini_set"関数を利用して設定しているようですね。
参考PHPマニュアル ini_set: http://php.net/manual/ja/function.ini-set.php
"0"より小さい値をを指定するとphp memory_limitに"-1"をセットして制限無しとなるようです。
pocketmine.ymlのバックアップ
さっそくpocketmine.ymlを修正したいところですが,設定変更するときはバックアップを取るのがお作法。
これを習慣づけておくと,後々幸せになれるはずです(多分)
バックアップは"cp -p"コマンドで取得。取得後"ls -l"で確認しておきましょう。
[mine@PocketMineMP PocketMine-MP.git]$ cp -p pocketmine.yml pocketmine.yml.org [mine@PocketMineMP PocketMine-MP.git]$ ls -l pocketmine.yml* -rw-rw-r-- 1 mine mine 5726 Apr 29 12:04 pocketmine.yml -rw-rw-r-- 1 mine mine 5726 Apr 29 12:04 pocketmine.yml.org
pocketmine.ymlの修正
pocketmine.ymlを修正します。
今回はデフォルトの2倍2048MBを割り当ててみます。
[mine@PocketMineMP PocketMine-MP.git]$ vi pocketmine.yml #Main thread hard memory limit in megabytes. Set to 0 to disable #This will stop the server when the limit is surpassed main-hard-limit: 2048 : ★★★ ここを修正 ★★★
修正内容の確認(diff)
修正したらdiffを使って前後確認してみましょう。
[mine@PocketMineMP PocketMine-MP.git]$ diff -u pocketmine.yml.org pocketmine.yml --- pocketmine.yml.org 2016-04-29 12:04:19.910671105 +0900 +++ pocketmine.yml 2016-04-30 08:42:45.082765512 +0900 @@ -35,7 +35,7 @@ #Main thread hard memory limit in megabytes. Set to 0 to disable #This will stop the server when the limit is surpassed - main-hard-limit: 1024 + main-hard-limit: 2048 #Period in ticks to check memory (default 1 second) check-rate: 20 [mine@PocketMineMP PocketMine-MP.git]$
1024→2048に修正されている事が確認できたら,あとは反映させるだけです。
設定の反映(PocketMine)の再起動
反映にはpocketmineの再起動が必要です。
pocketmineのワールドに誰も居ないことを確認して停止しましょう。
- listコマンドでだれもいない事を確認 #pocketmineコンソールから実施
- stopコマンドでpocketmineを停止 #pocketmineコンソールから実施
- "./start.sh"で起動
これで, CrashDumpを吐いて停止する可能性が少なくなりました。
それでもまだ止まっちゃう!という場合は漢を見せて
"main-hard-limit:0"という選択肢もありかもしれません。(ご利用は自己責任で)
それでは楽しいPocketMine生活を^^
メモは以上です
(参考)PocketMineのインストール方法(PE v0.14.2.0対応版)
Minecraft PE用マルチプレイサーバー構築(PE v0.14.2.0対応版)のインストール方法は
以前書いた記事を参考にしてください。
ichibariki.hatenablog.com
試した環境
Minecraft PE用マルチプレイサーバー
PocketMine-MP 1.6dev 「[REDACTED]」 implementing API version 2.0.0 for Minecraft: PE v0.14.2.0 alpha (protocol version 60)
OS
[root@PocketMineMP ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [root@PocketMineMP ~]# uname -a Linux PocketMineMP 3.10.0-327.10.1.el7.x86_64 #1 SMP Tue Feb 16 17:03:50 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux