最近マイクラサーバを立てる機会があり、低スペック環境で動かすためにいくつか軽量化を行ったのでそのナレッジを公開します。
軽量化前から軽量化後で1/4程度に処理軽減を図ることができました。
検証に使用したサーバ
- サーバ
- HP ProLiant MicroServer
- CPU
- AMD Turion II Neo N54L / 2.2 GHz
- メモリ
- 4GB
- Disk
- HDD
軽量化の手順
PaperMCの導入
マインクラフトサーバの軽量化バージョンである、PaperMCを導入します。
PaperMCは入れるだけでも軽量化できますが、内部パラメータを変更できるようになるため動作のチューニングを行う事も可能になります。
PaperMCをダウンロード
マインクラフトサーバにPaperMCをダウンロードします。
ダウンロードは以下のURLから行ってください。
マインクラフトサーバの起動ファイルを置き換える
PaperMCは公式サーバの起動ファイルと置き換えるだけで実行する事が可能です。
念の為、バックアップを取得してから作業してください。
cp -rf minecraft_server minecraft_server_backup # 必要に応じて
cd minecraft_server
mv paper-1.17.1-xxx.jar server.jar
通常通り起動
通常通り、マイクラサーバを起動してください。
起動完了後、自動的に設定ファイル郡が作成されます。
以下、起動の一例です。
java -Xmx2048M -Xms2048M -jar server.jar nogui
検証サーバでは、この時点で軽量化前の状態から1/2程度に動作が軽量化しました。
それで十分な場合はここで終わる事も可能です。
パラメータのチューニング
次に、パラメータをチューニングし動作を変更していきます。
今回はできる限り動作に影響を与えないパラメータに限り変更していきます。
パラメータファイルを変更
パラメータファイルを開き、変更していきます。
私は以下のサイトを参考に、必要に応じて設定変更を行いました。
変更するファイル
- paper.yml
パラメータ
名称 | 説明 | 初期値 | 変更後 |
---|---|---|---|
max-auto-save-chunks-per-tick | サーバがワールドを保存する頻度を調整します。参考サイトの見解だと、8未満にすると保存されないチャンクが発生するようです。検証サーバではこの値で問題は発生していません。 | 24 | 8 |
optimize-explosions | クリーパやTNTなどの爆破処理に関して、Paperにより最適化された処理を利用します。 | false | true |
disable-chest-cat-detection | チェストの上に猫が座っているか判定するロジックを無効にします。通常は猫がチェストの上に座っているとチェストを開くことができませんが、これを無効にすると開けるようになります。重要な仕様でないと判断し、無効にしました。 | false | true |
container-update-tick-rate | インベントリ、チェストを開く頻度を調整します。通常はTick毎に更新されますが、毎Tick更新されないようにします。参照先では3か4以上に設定する事を非推奨としていたので、3に設定しています。検証サーバではこの値で問題は発生していません。 | 1 | 3 |
max-entity-collisions | 当たり判定の上限を調整します。MOBなどが狭い空間に詰め込まれている場合の負荷が軽減されます。検証環境では2に設定しましたが、極端にMOBが重なる時窒息判定になる事がありました。窒息判定が困る場合は、もう少し値を増やしたほうが良いかもしれません。 | 8 | 2 |
grass-spread-tick-rate | 草ブロックが広がる頻度を調整します。通常はTick毎に判定されますが、毎Tick判定されないようにします。検証サーバでは参考先の推奨値である4に設置していますが、広がる速度が遅いと感じた事はありません。草ブロックの広がりが遅いと感じる場合は、値をもう少し減らしたほうが良いかもしれません。 | 1 | 4 |
non-player-arrow-despawn-rate | MOBの矢を表示しておく期間を調整します。MOBの矢は拾うことができないため、早めに消えるように調整します。今回は3秒で消えるように60Tickに設定しました。 | -1 | 60 |
creative-arrow-despawn-rate | クリティブモードで放たれた矢を表示しておく期間を調整します。前述のMOBの矢と同様に、3秒で消えるように変更しました。 | -1 | 60 |
despawn-ranges | MOBがでスポーンする距離を調整します。ソフトに設定した距離離れるとランダムにデスポーンし、ハードに設定した距離離れると即座にデスポーンします。 | Soft: 32 Hard: 128 | Soft: 28 Hard: 96 |
hopper disable-move-event | ホッパーからアイテムが移動されたイベントの有無を設定します。ホッパーのイベントを利用しているプラグインが利用できるなくなるため、プラグインを利用している場合は影響を確認する必要があります。大量のホッパーを利用している場合はかなりのパフォーマンス改善が期待できます。 | false | true |
prevent-moving-into-unloaded-chunks | 読み込まれていないチャンクへの移動可否を設定します。高速移動時にチャンクのロード、チャンクの検証、の悪循環を防止する効果があります。読み込まれていないチャンクへの移動が可能になるため、事故を懸念する場合は変更しないほうが良いかもしれません。 | false | true |
use-faster-eigencraft-redstone | レッドストーンの処理をPaperにより最適化されたものに変更します。バニラの動作に影響を与えないとの事で、検証サーバでは現時点で問題は発生していません。 | false | true |
armor-stands-tick | アーマースタンドのチェック可否を調整します。アーマースタンドは水に押されているかの判定しかしないようなので、この仕様を利用していない場合は無効にする事でアーマースタンドの負荷を軽減できます。 | true | false |
alt-item-despawn-rate | アイテムごとに、デスポーンする時間を設定する事ができます。検証サーバでは値を変更していませんが、自動化などで溢れかえるアイテムのデスポーン時間を短くする事で負荷軽減を期待できます。詳細はドキュメントを参照してください。 | false | true |
変更したパラメータは以上になります。
変更後、マインクラフトサーバを停止し、再度起動してください。
その他にも、公式ドキュメントにパラメータの意味が列挙されているので、参考にしてみてください。
あとがき
今回はマイクラサーバの軽量化を行いました。
軽量化サーバを導入するだけでなく、パラメータチューニングを行う事でより軽量化でき、サーバの利用状況によっては検証時以上の改善が期待できると思います。
もしマイクラサーバ運営者で動作が重いなどの課題を抱えている方は是非公式ドキュメントを一読し、状況に応じて設定変更してみてください。