“[WARNING] Can’t keep up! Did the system time change, or is the server overloaded?”という警告が出ていたので色々調べてみた。文面からは原因がはっきりしないが、発生する条件が限定されている部分もあるので、その辺の条件から推測できる所もあったのでメモしておく。
発生条件
マルチのサーバーのエラーとして頻発しているようだが、発生する条件を調べてみと実はシングルでも発生している。同じマップをシングルで動作させた場合にどうなるか調べてみると、シングルでもこの警告が出る場合がある。シングルの場合は普通に起動するとエラーが表示されないので、気づかない人も多いかもしれないが、log を表示させるとマルチと同じような警告も表示される。特に最近の仕様の Minecraft はシングルでも内部的にはマルチと同じような動きをしているので、エラーの文面も同じ様なものが出る。エラーの特徴としては少なくとも表示上は CPU 使用率が高くなるので、 CPU 使用率が異常に高くなっている人などは裏でこのエラーが出ている可能性はあると思う。また同じ動作環境でもマップによって発生したりしなかったりする。つまりマップデータに依存している所があると思われる。マップを色々変えながら見ていくと、エラーが発生しやすいマップは巨大なマップが多く、小さなマップでは発生し難いようだ。個人的にも今まではこのエラーが出たことがなかったのだが、マルチ用にと巨大マップをゴリゴリと処理していたら出ていた。
検証結果
検索すると、マルチのエラーとしてサーバーのメモリー不足や bukkit のプラグイン、 Mob や動物のわいている数に関しての指摘が多くされていたので一応検証してみた。まず Mob を全部けして見ても同じ反応が出たの Mob は関係がなさそう。動物も同様。次にシングルでも発生したので回線や、接続人数、 bukkit のプラグインなどには依存しない状況でも発生する事もわかる。メモリーを割り当てる量をバニラの状態で通常なら動作する範囲の 4G 程度まで 1G 刻みで増やして動かして見たが全く変化がなかったので、メモリー不足もあまり関係なさそうかと思った。
- シングルでも発生する
- 回線は関係なさそう
- サーバーのpluginの関係も薄そう
- 接続人数で変化する報告はあるので何かあるかも
- ハイスペックなPCでも発生する
- CPU 使用率は上がるが CPU がネックではない可能性が高い
- 単純なメモリー不足ではない
推測と対応策
今の所、有力なのはマップデータの破損、HDD などの書き込み速度という話。実際にやってみて一番効果があるのはマップの高さ制限を加えチャンクあたりの処理を減らすとか、水流、溶岩の流れを減らすか完全に止めるなどが、分かりやすく効果があるが、それではゲームプレーの質が変化してしまうため、根本的な解決とはいえなさそう。かなりのハイスペック機でも同じ現象が起きているため、何が問題なのかはっきりしない所もある。単純にマルチサーバーで警告を表示させなくするだけで良しとする場合は craftbukkit の bukkit.yml で warn-on-overload の項目を外せば良い。
warn-on-overload: false
個人的にこのエラーが発生したのは、256限界まで詰んだ穴だらけのブロックに大量に水を流すというマップを作る作業中に発生し、一度に設置した大量の水が生み出す複雑な水流によって CPU 使用率が跳ね上がりこの警告が表示されていた。なので、多すぎる水流や溶岩流、起きる丸石の生成、幹が燃えて原木ブロックから分離した葉っぱブロックの崩壊などが大量に含まれるマップは結構怪しいと思う。
■参考
参考に見ていたスレッドも実際には検証結果と違ったり、スレッド内でも否定されてる部分が多い回答ばかりで半分くらいは参考にならないが一応。一番上のフォーラムのスレが一番役に立つ。非常にハイスペックのサーバーで動作させているのにも関わらず、この警告が表示されている。この事から単にメモリー不足や、 CPU の速度が遅いというのは考え難い。日本語のフォーラムで報告されているように CPU の使用率上がる問題も、本質的には HDD の書き込み速度がネックになってのかもしれない。
CPUのIntel Virtualization TechnologyをBIOSよりONしたことで全体のCPU使用率が20%未満でも、Hyper-Threading Technologyで増えた仮想CPUではない実コアの使用率が100%に達するのを確認しました。
しかも複数コアがあっても全てのコアで地震計の針の振れのように動きます。
そしてそのまま放置すると空きメモリをモリモリ消費して空きメモリが無くなりました。
BIOSのupdateを行った時に何気なくONにした結果発生したCPU Overloadのエラー
でしたが、OFFにしたところすんなり収まりました。
ご参考までに。
同じく,当方AMD Phenon IIの4コアを使用しているのですが,BIOSの設定でCPUの設定である Secure Virtual Machine をDisableにしたところ,これまでCPUの各コアが順番に100%使用率になっていたのが,ほぼ均等に負荷が分散されるようになりました.そして,サーバー側のエラー表示もすっかり表示されなくなりました.