Palworld 専用サーバーの最適化

「Optimizing PalWorld Dedicated Server」というRedditの投稿の翻訳メモ
完全に自分用。責任は取らん。

Engine.iniに以下の文字列が追記されていることが前提。

Paths=../../../Pal/Plugins/Wwise/Content

iniの文法

iniって特に規格化されてるわけではないということを最近知りました。
それっぽーい文法決まってますが、割と方言があるようです。

だいたい以下の感じらしいです。

[Section]
Key=Value ; Comment
; Comment2

サーバーTickRate

クライアント側のゲームのFPSを上げてもサーバーのTickRateが遅ければそっちで律速します。
TickRateを上げることにより、サーバーとクライアントを高頻度で同期し、ゲームプレイをスムーズにします。

例示している数値は120FPSです。

[/script/onlinesubsystemutils.ipnetdriver]
LanServerMaxTickRate=120 ; ローカル(LAN)サーバー向け設定値
NetServerMaxTickRate=120 ; インターネットサーバー向け設定値

プレイヤーごとのネットワーク帯域幅

プレイヤーごとのネットワーク帯域幅を設定できます。
帯域が大きくなることで、データ転送のボトルネックを解消させます。

例示している数値は100Mbpsです。(100 * 1024 * 1024 = 104857600)

[/script/engine.player]
ConfiguredLanSpeed=104857600 ; ローカル(LAN)サーバー向け設定値
ConfiguredInternetSpeed=104857600 ; インターネットサーバー向け設定値

データ転送速度

クライアントのデータ転送速度を設定します。(?)
多分全体の帯域幅の設定。

[/script/socketsubsystemepic.epicnetdriver]
MaxClientRate=104857600 ; 全体の設定値
MaxInternetClientRate=104857600 ; インターネットサーバー向け設定値

エンジン設定

ゲームエンジンのフレームレートの処理方法の設定。

[/script/engine.engine]
bSmoothFrameRate=true ; フレームレートの最小値と最大値を定義するかどうかの設定。(trueにすると設定範囲でFPSを一定に保とうとする)
bUseFixedFrameRate=false ; 固定フレームレートにするかどうかの設定。(falseで可変)
SmoothedFrameRateRange=(LowerBound=(Type=Inclusive,Value=30.000000),UpperBound=(Type=Exclusive,Value=120.000000)) ; bSmoothFrameRate=trueの場合有効になる設定値。下限(30FPS)と上限(120FPS)を設定します。
MinDesiredFrameRate=60.000000 ; 最小フレームレートのしきい値。この値を下回ると設定を下げてFPSを維持しようとする。(クライアント向けでは?)
FixedFrameRate=120.000000 ; bUseFixedFrameRate=trueの場合有効になる設定値。固定フレームレートの設定値
NetClientTicksPerSecond=120 ; TickRateの設定値

ガベージコレクション

メモリー上のゴミ情報を掃除するガベージコレクション(GC)という仕組みがあるのですが、それの設定。
メモリーを大量に積めば弄る必要はないと思うけど・・・。

[/Script/Engine.GarbageCollectionSettings]
TimeBetweenPurgingPendingKillObjects=30 ; 30秒ごとにGCを行う。(デフォルトは60秒)

終わり

デフォルト設定だと60FPSまででカクつくしラグいから、120FPSぐらいにするといい感じに快適だよね。
まあ、CPU負荷は増えますが・・・。

サーバーは定期的に再起動するように仕組んだほうが安定するのでおすすめだよ。
systemd-timerやcronとか使ってね。