パルワールドのサーバーが重い:原因の切り分け方
パルワールドの専用サーバーの「重い」は原因の違う四つです。誰が感じるか・いつ起きるかで切り分け、サーバー自身のフレームレートを読み、リージョンを選ぶ前に ping を測るまでの順番。
「サーバーが重い」の一言には、互いに関係のない四つの不具合が入っています。ゲームの中から見ると似ていて、直す場所はまったく別です。だから家の Wi-Fi が原因なのにメモリを買い足したり、再起動すれば直ったものをリージョンの引っ越しで直そうとしたりということが実際に起きます。
この記事は直し方ではなくたどり方です。一分でおおよその見当をつける二つの質問、それでも残るものを確定させる一つの数字、そして原因ごとの直す場所。どの分岐も、その主題を詳しく扱った記事につながっています。
ステップ1:そもそもサーバーの問題か
設定を触る前に、これが誰の問題なのかを決めます。質問は二つで足ります。ほかの人も感じているか、そして画面がカクつくのか、操作が遅れて効くのか。
| 見え方 | 誰の問題か | どこで直すか |
|---|---|---|
| 自分の操作だけ半拍遅れて効く。ほかの人は平気 | 自分の回線 | 下の「自分の回線のとき:ping とリージョン」 |
| 画面はカクつくが操作は即反応する。ほかの人は平気 | 自分の PC | 下の「クライアントの FPS 低下は別の数字」 |
| 全員が同じ瞬間に巻き戻る | サーバー | 下のステップ2 |
| そもそも入れない、一覧に出ない、ときどき切断される | 重さではありません | 接続できないときの点検順 |
三行目はステップ2と3の主題で、一行目は下で一節を割いています。三行目以外の三つに共通するのは、サーバー側の設定をどういじっても動かないことです。
作業を始める前に知っておくと得をする近道が一つあります。再起動して即座に良くなるなら、マシンが小さいのではありません。このテスト一つで、いちばん高くつく誤った判断を除外でき、原因は稼働時間とともに溜まったものだと分かります。
ステップ2:サーバー自身のフレームレートを読む
パルワールドのサーバーには、サーバー自身のフレームレートがあります。「なんとなく重い」と「この数字だ」を分けるのがこれです。値は公式の REST API から取れます。サーバーが localhost にだけ開くインターフェースです(有効化の手順とセキュリティ上の一線は REST API の記事にあります)。
curl -s -u "admin:$PW" http://127.0.0.1:8212/v1/api/metrics

1.0 以降、パルワールドの専用サーバーの全速はおよそ毎秒60フレームです。私たちが v1.0.5 で動かしているサーバーでは、負荷がかかっていないとき(空いているときや1〜2人の接続中)の分単位の計測値が一日中59で安定しています。下の目安はすべてこの数字に対する割合なので、55という値なら何の心配もいりません。数字の意味はこうです。
serverfps | プレイヤーの体感 |
|---|---|
| 50〜60 | 正常です。ここに直すところはないので、ステップ1へ戻ってください |
| 30〜50 | 最初の苦情が出る帯。戦闘がもたつくが、うまく言葉にできない |
| 30未満 | 全員が感じます。巻き戻り、作業中に止まったパル、遅れて入る攻撃 |
| 一桁 | 遊べる状態ではなく、たいていプロセスが落ちる数分前です |
同じ応答の中で、一緒に見る価値のある値があと三つあります。
serverframetimeは1フレームにかかったミリ秒です。フレームレートのおおよその逆数で(60fps ならおよそ17ms)、平均フレームレートが動く前にスパイクがこちらに出ます。平均は平気なのに数秒おきに引っかかるサーバーを捕まえる値です。uptimeはプロセスが起動してからの秒数です。溜まったものの証拠で、低いフレームレートと長い稼働時間が揃った時点で答えは出ています。basecampnumはワールドにある拠点の数です。この API が返す値のなかで、フレームレートといちばん連動します。ワールドは人が増えて重くなるのではなく、建てた量が増えて重くなるからです。
値は誰かが文句を言っているその時に取ってください。空いている朝の数字では、土曜の夜の状態は何も分かりません。
ステップ3:サーバーの FPS を下げる四つ
よく出てくる順に並べています。それぞれ、一分以内に白黒つくテストがあります。
1. 稼働時間 — 前回の再起動から溜まったもの。メモリは遊んでいる間に増えるので、何日も起動したままのサーバーは、今朝再起動したサーバーより多くを抱えています。テストは再起動です。すぐ良くなればこれが原因です。対策は定時再起動で、間隔と「告知→保存→停止→起動」の順序、スクリプト、そして実機で10日間メモリが実際にどう動いたかまでパルワールドのサーバーを24時間動かし続けるにあります。
2. ワールドが重くなった。拠点、建築物、働くパル、落ちたアイテムは、全員がログアウトしたあともシミュレーションされ続け、自然には減りません。テストは basecampnum を見ることと、ワールドをひと回り見て回ることです。拠点が十いくつあって各拠点にパルが詰まっていれば、最初の週の数倍の処理をこなしています。直接効く設定は四つ(bEnableInvaderEnemy、BaseCampWorkerMaxNum、BaseCampMaxNum、DropItemAliveMaxHours — 設定項目の全解説)。まず切るのは襲撃です。
3. 人が集まる時間帯 — メインスレッド。物理、経路探索、戦闘、状態同期はすべて一本のスレッドで動きます。だから天井を決めるのはコア数ではなくクロックです。テストは曲線の形です。4人なら平気、10人で落ち込み、人が減ると戻る。それは溜まったものではなく人数に対するスペックの問題です。何を基準に見積もるかは必要スペックに、人数上限が数字一つでは済まない理由は人数上限の話にあります。
4. 規則正しい引っかかり — ディスク。全員が一瞬固まり、それが一定間隔で繰り返され、サーバーが混んでいるかどうかとは無関係です。テストは時計です。引っかかる間隔が AutoSaveSpan(既定30秒)と一致すれば、オートセーブが遅いディスクに当たっています。これは本当によくネットワークの問題と誤診されます。SSD にすれば解消します。
二つが同時に成り立っていることもあります。数か月経ったサーバーならたいていそうです。それでも上の順番どおりに対処してください。再起動は無料で、いちばん大きな原因を取り除いてくれます。
レンタルサーバーではこの数字がすでに引かれています
KeepWorldsのパルワールドの専用サーバーでは、フレームレートとオンライン人数を毎分記録して、コンソールのサーバーの健全性にグラフで表示しています。24時間の折れ線が二本、平均 FPS と 最低 FPS、そして全速(約60fps)の半分に引かれた警告ラインまであるので、このゲームで40が低いのかどうかが一目で分かります。二本の曲線を見比べるのが、curl なしのステップ3です。人数が増えるのに合わせて下がるならメインスレッド、人数が横ばいなのに下がるなら稼働中に溜まったものかワールドの重さ。折れ線が途切れている区間はサーバーが止まっていた時間で、原因1を自動で片づける毎日の定時再起動もそこに見えます。
クライアントの FPS 低下は別の数字
同じ名前のフレームレートが二つあり、取り違えると何ともないほうのマシンの設定をいじることになります。自分のクライアントの FPS はグラフィックボードが描く速さ、サーバーの FPS はワールドがシミュレーションされる速さ。二つは別々に動きます。
分ける質問は一つです。操作はいまも即座に効きますか。
| 症状 | どちらのフレームレート | 何をするか |
|---|---|---|
| 画面はカクつくが攻撃もメニューも即反応、友達は平気 | 自分のクライアント | 自分の PC の描画設定 |
| 画面は滑らかなのに攻撃が遅れて入り、全員がそう言う | サーバー | 上のステップ2 |
| 両方で、しかもワールドの特定の場所だけ | 両方 — 重い拠点は全員にとって重い | ステップ3の原因2 |
覚えておく価値があるのは最後の行です。建築物が数百、働くパルで埋まった拠点は、サーバーにはシミュレーションの負荷、自分の PC には描画の負荷をかけます。だから地図の同じ場所で二つの数字が一緒に落ちます。それを「うちの拠点でサーバーが重くなる」と言ってしまい、見当違いのマシンを探し始めることになります。
クライアント側の低下は、手を入れる場所がすべて自分の PC の中です。描画プリセット、解像度スケール、GPU を一緒に使っている別のソフト。専用サーバーに手伝えることは一つもありません。できるのは、もう半分が健全であることを保証することで、それがこの記事の残りの内容です。
自分の回線のとき:ping とリージョン
自分だけが感じるなら原因は遅延、つまり自分の PC とサーバーの往復時間で、リージョンを近づけて直るのはこの一種類だけです。ping は性質の違う三つの区間の合計で、どこが大きいかで打てる手が変わります。
- 物理的な距離。光ファイバーの中では直線1,000 km で片道5 ms、往復10 ms が下限です。実際の経路は直線ではないので、1,500 km 離れていれば往復20 ms 前後が下限です。両端の機材をどれだけ良くしてもこれ以上は縮みません。
- 途中の経路。同じ二点間でも、どこで受け渡されるかで往復が数十 ms 変わります。隣の国どうしなのに第三国の交換点を回る経路が組まれることは実際にあり、距離から計算した値より明らかに大きいときはたいていこれです。
- ラストワンマイル。ルーターから回線事業者の接続点まで、そして家の中の Wi-Fi です。国際区間よりこちらのほうが大きい例は珍しくありません。有線に替えるだけで消える「サーバーのラグ」はかなりあります。
測るのは数分で終わります。Windows は ping -n 20 対象アドレス、macOS と Linux は ping -c 20 対象アドレス。平均だけでなく最小と最大の差を見てください。その差がジッターです。tracert / traceroute を使えばどの区間で急に数十 ms 増えるかが見え、Linux で mtr -r -c 100 対象アドレス が使えるならホップごとの損失率まで一度に出ます。まだサーバーがないなら、候補リージョンの中にある公開ホストなら何でも構いません。目的は正確な値ではなく候補どうしの順位なので、同じ日の同じ時間帯に続けて測って表にすれば十分です。
パルワールドは対戦専用のゲームではないので、遅延には思うより寛容です。
| 往復 ping | 体感 |
|---|---|
| 80 ms 未満 | ほとんど誰も気づきません |
| 80〜150 ms | 十分遊べます。捕獲と回避が半拍遅れる感じ |
| 150〜250 ms | 建築と採集は平気、ボス戦と PvP がもどかしい |
| 250 ms 以上 | ジッターが少し乗るだけで巻き戻りが頻発します |
そして大事なのは平均よりばらつきです。平均60 ms でも30 ms と120 ms を行き来する回線は、ずっと120 ms の回線より不快に感じます。損失も同じで、パルワールドは UDP で通信し落ちたパケットを送り直して埋めません。1% を超えると平均がどれだけ良くても巻き戻りが出ます。
メンバーが複数の国に散っているなら、見るべきは平均ではなくいちばん悪い人の値です。全員が同じやり方で候補リージョンを測って一つの表にまとめ、候補ごとにいちばん大きい値を見て、それが最小の候補を選びます。一人だけ大陸が違う場合、どこを選んでもその人は150 ms を切りません。先に言っておき、ボス戦の予定をその人基準で組まなければ回ります。これは専用サーバーの利点でもあります。招待コードではホストの家の回線がそのまま全員の ping になりますが、専用サーバーはメンバーの間のどこにでも置けます(招待コードと専用サーバーの違い)。
リージョンは立てる前に決めておきます。リージョンが変わると接続アドレスも変わり、セーブを新しいサーバーへ移して全員がアドレスを入力し直すことになるからです。
リージョンは注文時に選ぶ項目
KeepWorldsのパルワールド専用サーバーでは、リージョンは注文時にプランと並んで選ぶ項目です。選べるリージョンはそのとき注文画面に並んでいるものがすべてなので、上で作った表を持ってその一覧と突き合わせてください。立ち上がったあとの接続アドレスはコンソールのマイサーバーにそのまま出ているので、コピーして全員に渡せば済みます。
もう一つ、ネットワークの問題に見えて違うものがあります。バージョンの不一致です。ゲームのアップデート後、古いビルドのままのサーバーは遅くなるのではなく全員を締め出します。セーブを守るアップデートの順番をどうぞ。
よくある質問
パルワールドのサーバーが重いのはなぜですか?
まず誰が感じているかを確かめてください。自分だけなら自分の回線か自分の PC です。全員が同時に巻き戻るならサーバーを再起動してみてください。すぐ良くなれば稼働中に溜まったもので、定時再起動を入れておけば繰り返しません。再起動しても変わらないなら、人が文句を言っているその時間に REST API で serverfps を読みます。オンライン人数に連れて下がるなら CPU のメインスレッド、人数が横ばいなのに下がるなら重くなったワールドです。
パルワールドのサーバー FPS はいくつなら正常ですか?
1.0 以降のパルワールドの専用サーバーは全速がおよそ60(私たちの v1.0.5 のサーバーでは59)なので、50以上なら正常です。30〜50で最初の苦情が出はじめ、30を下回るとワールドの全員が巻き戻りと作業中に止まったパルで気づきます。値は REST API の /metrics から読み、空いている時間帯ではなくサーバーが混んでいるときに取ってください。
カクつくのは自分の PC ですか、サーバーですか?
操作が即座に効くかどうかで分かれます。画面だけがカクついて操作は即反応なら自分のグラフィックボード側で、ほかの人には何も起きていません。画面は滑らかなのに攻撃が遅れて入るならサーバー側で、同じ瞬間に全員が感じます。両方が同時に、しかも地図の特定の区画だけで落ちるなら、サーバーのシミュレーションと自分の PC の描画を同時に食うほど重い拠点です。
パルワールドのサーバーは ping がどのくらいなら快適ですか?
80 ms を切ればほとんど気づかれず、150 ms までは十分遊べます。150〜250 ms は建築と採集なら平気ですが、ボス戦がもどかしくなります。ただし数字一つで決めないでください。平均が低くてもばらつく回線は、安定して高い回線より悪く感じます。
ping は低いのに巻き戻りが起きます。なぜですか?
平均の ping が低くても、損失率とジッターが大きければそう感じます。まず Wi-Fi を有線に替えて、ラストワンマイルの影響を除いてください。それでも同じで、しかも全員が同時に戻されるなら自分の回線ではなくサーバー側です。見る場所は上のステップ2です。
拠点が多いとサーバーは重くなりますか?
グループがサーバーにかける負荷のなかで、いちばん大きいのが拠点です。拠点と建築物、配置したパルは全員がログアウトしたあともシミュレーションされ続けるので、負荷はオンライン人数より建てた量に連動します。見るべき値は /metrics の basecampnum です。拠点数と拠点あたりの働き手を制限すること、襲撃を切ることが、いちばん直接的な三つのつまみです。
測る人がいない時間帯のために
ここまでの手順はすべて、人が文句を言っているまさにその瞬間に値を取ってくれる誰かがいることを前提にしています。そしてその時刻はたいてい、誰も SSH をつなげる状況ではありません。サーバーの重さの本当の難しさはそこです。証拠はその時しかなく、誰かが見にいく頃にはサーバーは空いていて、まったく健全な数字を返します。
KeepWorldsのパルワールドのサーバーでは、その値はすでに取ってあります。フレームレートとオンライン人数を毎分記録し、警告ライン付きの24時間の曲線として残しています。「昨夜はひどかった」を思い出して組み立て直す代わりに、開いて見るだけです。稼働中に溜まるものは、たどり着く前に片づいています。毎日の定時再起動が、決めておいた時刻にゲーム内告知と強制保存を先に済ませてから、メモリを元の水準まで戻してくれるからです。残りの原因を左右する設定、つまり襲撃と拠点の上限、拠点あたりの働き手は、SSH で直す .ini の一行ではなくゲーム設定フォームの入力欄です。