【2025年11月最新】マイクラ Aikar フラグ 最適化設定完全ガイド|Java21対応・メモリ設定・Paper推奨

目次

冒頭の直接回答

Aikarフラグは、マインクラフトサーバーのJVM(Java仮想マシン)を最適化するための起動オプション設定で、Paper、Spigot、Pufferfishなどの主要サーバーソフトウェアで公式に推奨されています。最小・最大ヒープサイズ(-Xms/-Xmx)を同じ値に設定し、G1GCガベージコレクターを使用することで、メモリ管理を効率化し、TPSの安定化とラグを大幅に削減できます。2025年11月現在、Java 21に対応した最新版の設定では、6GB以上のメモリ割り当てが推奨され、適切に設定することで30〜50%のパフォーマンス向上が期待できます。

要点

  • AikarフラグはG1GCを活用し、メモリ管理を最適化してGC停止時間を最小化する設定群
  • -Xmsと-Xmxを同じ値に設定することで、未使用メモリの無駄をなくし効率化
  • Paper公式が推奨する設定で、最低6〜10GBのメモリ割り当てが必要
  • Java 21対応の最新版では、さらに洗練された最適化が可能
  • 設定後は /spark や /timings でパフォーマンスを検証・調整

Aikarフラグとは?マイクラサーバー最適化の基礎

Aikarフラグの概要と開発背景

Aikarフラグは、マインクラフトサーバー界隈で最も信頼されているJVM最適化設定です。2016年にEmpire Minecraft運営者のAikar氏によって開発され、Paper、Spigot、Purpurfishなどの主要サーバーソフトウェアの公式ドキュメントで推奨されています。

マインクラフトサーバーは、非常に高いメモリ割り当て速度(30人規模のサーバーで毎秒800MB以上)を持ち、ブロック位置などの短命オブジェクトが大量に生成されます。通常のJVMデフォルト設定では、このような負荷に対応できず、頻繁なGC(ガベージコレクション)停止によってTPSが低下し、プレイヤーにラグとして体感されてしまいます。

Aikarフラグは、この問題を解決するために、G1GC(Garbage First Garbage Collector)を最適化し、新世代ヒープの割合を大幅に増やすことで、短命オブジェクトが若いうちに効率的に回収される仕組みを構築します。

従来設定との違いとパフォーマンス向上

従来のJVM設定では、-Xmsを低く設定し、必要に応じてメモリを拡張する方式が一般的でした。しかし、この方式では未使用メモリが発生し、G1GCが最適に動作できません。Aikarフラグでは、-Xmsと-Xmxを同じ値に設定することで、最初から最大メモリを確保し、G1GCが全体のメモリを効率的に管理できるようにします。

実際のパフォーマンステストでは、Aikarフラグを適用することで以下の改善が報告されています。

  • 平均GC停止時間:50〜100ms → 10〜30ms(70%削減)
  • 若世代GC頻度:1〜2秒ごと → 10秒〜数分ごと(90%削減)
  • TPS安定性:15〜19の変動 → 19.5〜20.0の安定維持
  • Old世代GC頻度:1時間に数回 → 数時間に1回

PaperMC公式ドキュメントでは、「最低でも6〜10GBのメモリ使用を推奨し、プレイヤー数が少なくても十分なメモリを割り当てることでG1GCが最適に動作する」と明記されています。


2025年最新版Aikarフラグの設定方法

Java 21対応の基本設定

2025年11月現在、マインクラフト1.21.x系列ではJava 21が推奨されています。以下は、Java 21に対応した最新のAikarフラグ基本設定です。

java -Xms10G -Xmx10G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar paper.jar --nogui

この設定の -Xms10G -Xmx10G 部分は、サーバーの物理メモリに応じて変更する必要があります。以下のメモリ別推奨設定を参考にしてください。

メモリ別推奨設定表

サーバーメモリ推奨Xms/Xmx想定プレイヤー数用途
8GB6G1-5人小規模・友人サーバー
16GB10-12G6-20人中規模コミュニティ
32GB16-20G21-50人大規模サーバー
64GB24-32G51-100人企業レベル
128GB以上32G以上100人以上商用サーバー

重要な注意点:サーバーの全メモリをマインクラフトに割り当てないでください。オペレーティングシステムやその他のプロセスのために、1〜2GBの余裕を残す必要があります。例えば、16GBのサーバーであれば、12GB程度をマイクラに割り当てるのが安全です。

起動スクリプトの作成と実行

Linux/Mac用起動スクリプト(start.sh

#!/bin/bash
java -Xms10G -Xmx10G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar paper.jar --nogui

実行権限を付与して起動します。

chmod +x start.sh
./start.sh

Windows用起動スクリプト(start.bat)

@echo off
java -Xms10G -Xmx10G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar paper.jar --nogui
pause

ダブルクリックで実行できます。


各フラグの詳細解説と技術的背景

メモリ管理に関するフラグ

-Xms / -Xmx(ヒープサイズ設定)

最小ヒープサイズ(-Xms)と最大ヒープサイズ(-Xmx)を同じ値に設定することが、Aikarフラグの最も重要なポイントです。従来の設定では、-Xmsを低く設定してメモリを節約しようとしていましたが、これは逆効果です。

G1GCは、より多くのメモリを与えられるほど効率的に動作します。未使用のメモリがある場合、G1GCは適応的に各リージョンにメモリを割り当て、ポーズ時間を最適化します。必要以上のメモリがあれば、Old世代にプッシュされるだけで、パフォーマンスに悪影響はありません。

-XX:G1HeapRegionSize=8M

デフォルトのヒープリージョンサイズは自動計算されますが、マインクラフトでは明示的に8MBに設定することが推奨されます。このサイズの半分(4MB)を超えるメモリ割り当ては「Humongous」として扱われ、直接Old世代に昇格してしまい、回収が困難になります。特にマインクラフト1.15以降では、デフォルト値が低すぎるケースが多く、大量のメモリがHumongousとして扱われてしまう問題がありました。

ガベージコレクション最適化フラグ

-XX:G1NewSizePercent=30 / -XX:G1MaxNewSizePercent=40

新世代ヒープの割合を、デフォルトの5%から30〜40%に大幅に増やします。マインクラフトは非常に高いメモリ割り当て速度を持ち、短命オブジェクト(ブロック位置など)が大量に生成されます。新世代が小さすぎると、毎秒1〜2回以上の若世代GCが発生し、TPSに深刻な影響を与えます。

新世代を大きくすることで、若世代GCの間隔を延ばし、短命オブジェクトが若いうちに死ぬ時間を確保します。結果として、Old世代への昇格が減少し、全体的なGC効率が向上します。

-XX:MaxGCPauseMillis=200

GC停止時間の目標を200ミリ秒に設定します。これは最大4ティック分の遅延に相当しますが、プレイヤーが認識できる遅延は250ms以上とされており、200msは実質的に体感できません。この値を低くしすぎると、G1GCがメモリを十分に回収できず、Old世代がいっぱいになってフルGCが発生するリスクがあります。

テストでは、この値を200msに設定することで、短いTPS低下は発生するものの、サーバーが即座に回復し、平均TPSには影響がないことが確認されています。

-XX:MaxTenuringThreshold=1

オブジェクトがOld世代に昇格する前のサバイバー空間での最大コピー回数を1回に制限します。マインクラフトでは、ほとんどのメモリがEden世代で回収されますが、一時的なデータがサバイバー空間にオーバーフローします。

デフォルト設定では、オブジェクトが最大15回コピーされてからOld世代に昇格しますが、これには大量の時間がかかります。MaxTenuringThreshold=1に設定することで、2回のGCを生き延びたオブジェクトは長命と判断し、効率的にOld世代に昇格させます。平均GC間隔が10秒以上であることを考慮すると、これによってガベージが昇格することはなく、むしろ若世代GCの停止時間が大幅に短縮されます。

-XX:SurvivorRatio=32

MaxTenuringThresholdを大幅に削減したため、サバイバー空間の使用率も大幅に減少します。このフラグにより、サバイバー空間を縮小し、その分をEden世代に割り当てることで、より多くの短命オブジェクトを効率的に処理できます。

パフォーマンス向上フラグ

-XX:+AlwaysPreTouch

プロセス起動時にメモリをセットアップし、連続したメモリ領域として予約します。これにより、オペレーティングシステムのメモリアクセス速度が向上します。Transparent Huge Pagesを使用する場合は、このフラグが必須です。

-XX:+DisableExplicitGC

多くのプラグインが、メモリ管理を理解せずに明示的にガベージコレクションを呼び出すことがあります。これによってフルGCがトリガーされ、大規模なラグスパイクが発生します。このフラグは、プラグインによる明示的なGC呼び出しを無効化し、悪質なコードからサーバーを保護します。

-XX:+PerfDisableSharedMem

GCがファイルシステムに書き込むことで、ディスクI/Oが高い場合に大きなレイテンシーを引き起こす問題を防ぎます。


GCログの有効化とパフォーマンス監視

GCログ設定(Java 11以降)

Aikarフラグを適用した後、GCの動作を監視することが重要です。以下のフラグを追加することで、GCログを有効化できます。

Java 11以降

-Xlog:gc*:logs/gc.log:time,uptime:filecount=5,filesize=1M

この設定により、logs/gc.log にGCログが記録されます。ログファイルは最大1MBで、5ファイルまでローテーションされます。GCログはパフォーマンスに影響を与えず、常時有効にしておいても問題ありません。

Sparkプラグインによるプロファイリング

GCログに加えて、Sparkプラグインを使用することで、リアルタイムのパフォーマンス分析が可能です。

Sparkプラグインのインストール

  1. SpigotMC公式ページからダウンロード
  2. plugins/ フォルダに配置
  3. サーバーを再起動

基本的な使い方

/spark profiler start      # プロファイリング開始
/spark profiler stop       # プロファイリング停止とレポート生成
/spark gc                  # GC統計の表示
/spark heapdump           # ヒープダンプの作成

Sparkは、CPUプロファイリング、メモリ分析、GC監視を統合したツールで、Paper公式も推奨しています。生成されたレポートはWeb上で共有でき、他の管理者やコミュニティに相談する際に便利です。


PaperMCとの組み合わせで最大のパフォーマンスを実現

PaperMCの導入とAikarフラグの相乗効果

PaperMCは、Spigotをベースにさらなるパフォーマンス最適化を施したサーバーソフトウェアです。バニラやSpigotと比較して、30〜50%のパフォーマンス向上が報告されています。AikarフラグとPaperMCを組み合わせることで、最大の効果を発揮します。

PaperMCの導入手順

  1. PaperMC公式サイトから最新版をダウンロード
  2. paper.jar をサーバーフォルダに配置
  3. 上記のAikarフラグ起動スクリプトで -jar paper.jar を指定
  4. 初回起動でEULA同意と設定ファイル生成
  5. paper-world-defaults.yml で追加の最適化設定を調整

paper-world-defaults.ymlの推奨設定

# チャンク最適化
chunks:
  auto-save-interval: 6000  # 自動セーブ間隔を延長(5分)
  max-auto-save-chunks-per-tick: 6  # 1ティックあたりの最大保存チャンク数

# エンティティ最適化
entities:
  spawning:
    monster-spawn-max-light-level: 0  # モンスタースポーン光量
  behavior:
    should-remove-dragon: false  # エンダードラゴンの自動削除無効

# ホッパー最適化
hopper:
  cooldown-when-full: true  # フルホッパーのクールダウン
  disable-move-event: false  # 移動イベント(プラグイン互換性)

# レッドストーン最適化  
unsupported-settings:
  fix-invulnerable-end-crystal-exploit: true

これらの設定により、チャンクローディング、エンティティ処理、ホッパーなどの重い処理が最適化されます。


トラブルシューティングとよくある問題

メモリ不足エラーの解決

Aikarフラグ適用後、以下のエラーが出る場合があります。

java.lang.OutOfMemoryError: Java heap space

原因と対処法

  1. 割り当てメモリが不足している:-Xms/-Xmxの値を増やす
  2. メモリリークの可能性:Sparkプラグインで /spark heapdump を実行し、メモリを大量消費しているプラグインを特定
  3. チャンクが過剰にロードされている:view-distanceを10以下に削減

Old世代GCが頻繁に発生する場合

Sparkで /spark gc を実行し、Old世代のGC頻度を確認します。1時間に数回以上発生している場合は、以下を調整します。

  1. G1MixedGCLiveThresholdPercent を 85 に下げる:より早くOld世代を回収
  2. G1ReservePercent を 15 に下げる:予約メモリを減らしてOld世代に割り当て
  3. メモリを増やす:根本的な解決として、サーバーメモリを増やす

起動スクリプトが動作しない場合

Linux/Mac

# Java 21がインストールされているか確認
java -version

# 実行権限があるか確認
ls -l start.sh

# 権限付与
chmod +x start.sh

Windows

# Java 21がインストールされているか確認
java -version

# パスにスペースがある場合は引用符で囲む
"C:\Program Files\Java\jdk-21\bin\java.exe" -Xms10G ...

マインクラフトサーバーを快適に動かすためのVPS選び

目次