Minecraftサーバ(java)のメモリ拡張と自動バックアップバッチ

Windows

仲間内でMinecraftサーバを立てて、一緒に遊んでいる場合、誰かのPCをホストにする場合は、WindowsPCをホストとして起動することもあると思います。

その場合、メモリの割り当てが初期設定だと少ない(jdkのバージョンによって異なる)ので、動作が重いなぁと感じてしまうことでしょう。

なので、サーバの起動にバッチファイルを作るのは常套手段となっていますが、私はついでにバックアップを取得しておくことにしました。

コード

以下実際のコードです。これをテキストエディタで保存し、拡張子を.batに変更してダブルクリックで起動できます。

後述するconfファイルがないとエラーになりますので、minecraftのサーバ本体が置いてあるフォルダにconfファイルも作成してください。

@ECHO OFF
@setlocal enabledelayedexpansion
cd /d %~dp0

SET CONFFILE_NAME=start_minecraft_server.conf

FOR /F "usebackq delims== tokens=1,2" %%a IN (%CONFFILE_NAME%) DO SET %%a=%%b

SET /P ANSWER="サーバを起動します。よろしいですか (Y/N)?"

if /i {%ANSWER%}=={y} (goto :startserver)
if /i {%ANSWER%}=={yes} (goto :startserver)

goto :backup

:startserver
echo %XMS%
echo %XMX%
"C:\Program Files (x86)\Minecraft Launcher\runtime\jre-x64\bin\java" -Xms%XMS% -Xmx%XMX% -jar server.jar
PAUSE


:backup

SET /P ANSWER="バックアップを取得します。よろしいですか (Y/N)?"

if /i {%ANSWER%}=={y} (goto :startbackup)
if /i {%ANSWER%}=={yes} (goto :startbackup)

EXIT

:startbackup


SET BACKUPDIRNAME=!BACKUP_PATH!\world
SET /a srcNum=%SAVEGEN%
SET /a dstNum=!srcNum!+1
SET oldBackup=!BACKUPDIRNAME!_!dstNum!


REM 保存世代数より1世代古いバックアップがある場合、削除を行う。
if exist %oldBackup% (
    rd /s /q %oldBackup%
)


for /l %%c in (1, 1, %SAVEGEN%) do (
  
  if exist !BACKUPDIRNAME!_!srcNum! (
    robocopy !BACKUPDIRNAME!_!srcNum! !BACKUPDIRNAME!_!dstNum! /E /DCOPY:T 2>&1 > nul
    rd /s /q !BACKUPDIRNAME!_!srcNum!
  )
  set /a srcNum=!srcNum!-1
  set /a dstNum=!srcNum!+1
  
)

ECHO バックアップを取得しています・・・
robocopy world %BACKUPDIRNAME%_1 /E /DCOPY:T 2>&1 > nul
ECHO バックアップの取得が完了しました。

ECHO 保存世代数より古いバックアップを削除しています。
if exist %oldBackup% (
    rd /s /q %oldBackup%
)

PAUSE

以下がconfファイルです。start_minecraft_server.confという名前で作成してください。

SAVEGEN=3
BACKUP_PATH=<バックアップ取得先>
XMS=4G
XMX=4G

説明

confファイルで設定できる設定の説明です。

SAVEGEN : バックアップを取得する世代数を指定します。3 としておけば自動的に3世代取得できます。

BACKUP_PATH: バックアップの取得先をフルパスで指定してください。私は家にあるNASのパスを指定しています。(SMBでのネットワーク経由の取得も可能)

XMS: メモリ割り当てプールの初期値を指定します。4Gとした場合、4Gのメモリを初期値として割り当てます。

XMX: メモリ割り当てプールの最大値を指定します。4Gとした場合、4Gまでのメモリが割り当てられます。

XmsとXmxを同じにした場合は割り当てるメモリを固定化できます。

Minecraftを遊ぶ程度ならヒープなどのチューニングは基本的に不要かと思います。

また、スクリプト内の「C:\Program Files (x86)\Minecraft Launcher\runtime\jre-x64\bin\java」という部分は、インストールしたときの環境によるので、変更が必要な場合があります。

Minecraftをインストールしたときのjava runtimeの探し方

いつもMinecraft Luncherを用いて起動している場合、以下の手順で場所を特定します。

まずMinecraft Luncherのアイコンを右クリックし「プロパティ」を開きます。

以下の画面が開いたら「ファイルの場所を開く」をクリックします。

ファイルの場所を開くと、Minecraft Luncher.exeが置いてあるフォルダが表示されるので、[runtime] – [jre-x64] – [bin]を開きます。(36bit版の場合は表記が異なる場合があります。)

binフォルダまで来たらその中に「java.exe」があることを確認します。

確認したら、エクスプローラのアドレスバーから現在のフォルダパスをコピーして、先ほどのバッチスクリプトの該当箇所に貼り付けます。

Windows Serverの勉強におすすめの本

Windows Serverの勉強には、MCPの資格本を使うのがおすすめです。
ハンズオン形式での手順なども記載されているので、実機を触りながら勉強することができます。

この記事を書いた人

渋谷で働くよわよわエンジニア。TypeScript(Next.js/Node.js)/Golang/AWS/Flutterなど
LINE API Expert(2023/1~)

tokkuをフォローする
オススメ記事
在宅ワークが多くなって、デスクの配線周りに困っている方は、拡張デスクの導入がおすすめです。Windows/MacOS/Linuxの複数の機器をスッキリとデスク周りに収める事ができました!リモートからサーバーメンテを行うインフラエンジニアは必見です!
Windows
tokkuをフォローする
インフラエンジニアがもがくブログ

コメント

タイトルとURLをコピーしました