幻獸帕魯伺服器很卡:先分清楚是哪一種
《幻獸帕魯》專用伺服器的「卡」其實是四件事,修的地方各不相同。先用誰在卡、什麼時候卡分流,讀伺服器自己的 FPS 把它確定下來,開服前再量 ping、挑地區。
「伺服器很卡」這一句裡,裝著四件彼此無關的毛病。在遊戲裡看起來都差不多,要修的地方卻完全不同——所以才會有人為了家裡的 Wi-Fi 問題去加記憶體,或是把伺服器搬到別的地區,去治一個重啟就能解決的問題。
這篇寫的不是修法,是找法:兩個問題在一分鐘內把大部分情況分完,一個數字把剩下的確定下來,然後每種成因各自在哪裡修。每一條岔路的盡頭,都是專門講那件事的那篇。
第一步:到底是不是伺服器的問題
在動任何設定之前,先搞清楚這是誰的問題。兩個問題就能分掉絕大多數:別人有沒有一起卡,以及是畫面在跳,還是操作慢半拍。
| 你看到的 | 是誰的問題 | 在哪裡修 |
|---|---|---|
| 只有你的操作慢半拍,別人都正常 | 你的連線 | 下面的「是你的連線時:ping 與地區」 |
| 畫面一格一格跳但操作是即時的,別人都正常 | 你自己的電腦 | 下面的「用戶端掉 FPS 是另一個數字」 |
| 所有人在同一個瞬間被位置拉扯 | 伺服器 | 下面的第二步 |
| 根本連不進去、清單裡找不到、有人隨機斷線 | 這不是卡 | 連不上時的檢查順序 |
第三列是第二步、第三步要處理的事,第一列在下面單獨一節。其餘三列有一個共同點:伺服器那邊的設定怎麼調都動不了它們。
動手之前有一條捷徑值得先知道:重啟之後立刻就好,代表機器並不小。光是這個測試就能排掉最貴的那個錯答案,並且直接指向執行久了累積下來的東西。
第二步:讀伺服器自己的 FPS
《幻獸帕魯》伺服器有自己的 FPS,它就是「感覺很卡」和「數字是多少」之間的差別。值來自官方的 REST API,伺服器只把它開在 localhost 上(怎麼啟用,以及那條不能破的安全規則,在 REST API 這篇):
curl -s -u "admin:$PW" http://127.0.0.1:8212/v1/api/metrics

1.0 起,《幻獸帕魯》專用伺服器的滿速約是 60 FPS。我們跑在 v1.0.5 的伺服器,只要不吃緊(閒置或只有一兩個人上線),一整天每分鐘的讀數都穩穩停在 59。下面的門檻都是這個數字的比例,所以讀到 55 完全不用擔心。數字的意思:
serverfps | 玩家的體感 |
|---|---|
| 50~60 | 正常。這裡沒有要修的,回到第一步再看一次 |
| 30~50 | 開始有人抱怨。戰鬥手感變鈍,但說不出哪裡怪 |
| 低於 30 | 所有人都感覺得到:位置拉扯、帕魯做到一半僵住、打擊延遲 |
| 個位數 | 已經不能玩了,而且通常離程式被系統殺掉只剩幾分鐘 |
同一份回應裡還有三個值值得一起看:
serverframetime是每一格花掉的毫秒數,大致是 FPS 的倒數(60 FPS 約 17 ms)。它的價值在於尖峰會比平均 FPS 更早顯現,所以「平均看起來沒事、每隔幾秒卡一下」的伺服器是靠它抓出來的。uptime是程式啟動到現在的秒數。它是累積的證據:低 FPS 配上很長的執行時間,答案在量其他東西之前就已經出來了。basecampnum是世界裡的據點數。這個 API 給的所有值裡,它和 FPS 的連動最緊——世界不是因為人變多而變重,是因為蓋的東西變多才變重。
要在有人正在抱怨的時候去讀。清晨沒人時抓到的數字,對週六晚上沒有任何解釋力。
第三步:把伺服器 FPS 拉下來的四件事
照實際出現的頻率排。每一件都有一個一分鐘內能判生死的測試。
1. 執行時間——上次重啟以來累積的東西。有人在玩的時候記憶體會往上漲,連開好幾天的伺服器背著的東西,比今天早上才重啟過的多。測試就是重啟:立刻變好就是它。解法是定時重啟——間隔、「公告→存檔→停止→啟動」的順序和腳本都在幻獸帕魯伺服器 24 小時不關機,那裡也有一台真實的伺服器十天裡記憶體實際怎麼走。
2. 世界變重了。據點、建築、工作中的帕魯和掉在地上的道具,在所有人下線之後仍然在被模擬,而且不會自己消失。測試是 basecampnum 加上進遊戲繞一圈:十幾個據點、每個據點都站滿帕魯,那是第一週好幾倍的工作量。直接有效的設定有四個——bEnableInvaderEnemy、BaseCampWorkerMaxNum、BaseCampMaxNum、DropItemAliveMaxHours(設定項目全解)——而第一個要關的是襲擊。
3. 尖峰時段——主執行緒。物理、尋路、戰鬥和狀態同步全擠在同一條執行緒上,所以決定天花板的是時脈,不是核心數。測試是曲線的形狀:四個人時正常、十個人時往下垮、人走了又回來,那是人數對規格的問題,不是累積。該照什麼來估在開服要什麼配備,人數上限為什麼不只是一個數字在人數上限那篇。
4. 規律的一頓一頓——硬碟。所有人一起凍住極短的一下,間隔固定,而且和伺服器忙不忙無關。測試是看錶:頓的間隔如果和 AutoSaveSpan(預設 30 秒)對得上,那是自動存檔撞上慢硬碟。這一條被當成網路問題誤判的次數多得驚人。換 SSD 就結束了。
兩件同時成立的情況也有,開了幾個月的伺服器多半如此。順序仍然照上面走:重啟不花錢,而且先排掉最大的那個。
託管這邊,這條曲線已經畫好了
KeepWorlds的《幻獸帕魯》專用伺服器每分鐘記錄一次 FPS 和線上人數,畫在會員中心的健康曲線裡:兩條 24 小時的線、平均 FPS 與 最低 FPS,還有一條畫在滿速一半的警戒線,所以這款遊戲裡 40 算不算低,一眼就看得出來。把兩條線對著看,就是不用 curl 的第三步:FPS 跟著線上人數一起往下是主執行緒,人數不動而 FPS 往下是執行久了的累積或世界變重。曲線上斷掉的那幾段是伺服器停著的時間,其中也包括替你處理掉成因 1 的每日定時重新啟動。
用戶端掉 FPS 是另一個數字
兩個 FPS 共用一個名字,搞混了就會跑去調一台根本沒問題的機器。你的用戶端 FPS 是顯示卡畫出來的速度,伺服器 FPS 是世界被模擬的速度。兩者各走各的。
要分開只要問一句:操作還是即時的嗎?
| 症狀 | 哪一個 FPS | 要做什麼 |
|---|---|---|
| 畫面在跳但揮砍和選單都即時反應,朋友都沒事 | 你的用戶端 | 你自己電腦上的畫質設定 |
| 畫面很順但打擊延遲,而且大家都這樣說 | 伺服器 | 上面的第二步 |
| 兩個一起,而且只在世界的某一塊 | 兩個都是——重的據點對誰都重 | 第三步的成因 2 |
值得記住的是最後一列。一個蓋了好幾百個建築、站滿工作帕魯的據點,對伺服器是模擬負擔,對你的顯示卡是繪製負擔,所以地圖上同一個位置會讓兩個數字一起垮。玩家把它講成「在我們據點那邊伺服器就卡」,然後開始查錯那台機器。
用戶端這一側能動的全在自己電腦裡:畫質預設、解析度縮放、還有正在跟遊戲搶顯示卡的那些程式。專用伺服器一項都幫不上。它能保證的是另外半邊是健康的,而那正是這篇其餘部分在講的事。
是你的連線時:ping 與地區
只有一個人在卡,那是延遲,也就是你的電腦到伺服器來回一趟的時間,而把伺服器搬近一點會好轉的,也只有這一種。ping 是三段性質完全不同的路加起來的,哪一段大,能做的事就不一樣:
- 實體距離。光在光纖裡直線每 1,000 公里單程約 5 ms;實際線路不走直線,距離 1,500 公里的地方,最低就是來回 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 與 120 之間跳的線路,比穩定 120 ms 的線路難受得多。封包遺失同理:《幻獸帕魯》走 UDP,掉了的封包不會重送補回來,只要超過大約 1%,平均值再漂亮也會出現位置拉扯。
一群人分散在幾個國家時,要壓的不是平均值,是最慘那個人的數字。每個人量同一批候選地區、彙進同一張表,每個候選取最大的那個值,挑最大值最小的候選。如果只有一個人在別的洲,不論挑哪裡他都下不到 150 ms,這件事先講開比較好,只要別把王戰的節奏押在他身上。這也是專用伺服器的好處之一:用邀請碼連線,房主住哪就是全隊的 ping(邀請碼和專用伺服器的差別)。
地區要在開服前定下來。事後換地區等於換連線位址,存檔得跟著搬、所有人得重新輸入位址。
託管上地區是下單時選一次
KeepWorlds 的《幻獸帕魯》專用伺服器把地區做成下單時跟方案一起挑的一欄。可選的地區以下單畫面當時列出的為準,拿著上面那張表去對,挑離玩家最近的那個。開起來之後,連線位址就在會員中心的我的伺服器裡,直接複製給隊友即可。
還有一種看起來像網路問題、其實不是的情況:版本不一致。遊戲更新之後,還停在舊版本的伺服器不是變慢,是把所有人擋在外面。請看不弄丟存檔的更新順序。
常見問題
幻獸帕魯伺服器為什麼會卡?
先確認是誰在卡。只有你,那是你的連線或你的電腦。所有人同時被拉扯,就重啟伺服器:立刻變好就是執行久了累積下來的,排上定時重啟它就不會再回來。重啟沒有改善的話,趁大家還在抱怨的時候用 REST API 讀 serverfps——跟著線上人數一起垮是 CPU 主執行緒,人數不動卻在垮是世界變重了。
幻獸帕魯伺服器 FPS 多少才正常?
1.0 起專用伺服器的滿速約是 60(我們 v1.0.5 的伺服器讀數是 59),所以 50 以上都算正常。30 到 50 之間開始有人抱怨;低於 30 時,位置拉扯和做到一半僵住的帕魯會讓世界裡的每個人都感覺到。值從 REST API 的 /metrics 讀,而且要在伺服器忙的時候讀,不是清閒的時候。
畫面卡是我的電腦還是伺服器?
看操作還是不是即時的。畫面在跳但操作即時,那是你的顯示卡,而且別人不會有事。畫面很順但打擊延遲,那是伺服器,而且所有人在同一個瞬間都會遇到。如果兩個一起垮、又只發生在地圖的某一塊,那是一個重到同時吃掉伺服器模擬和你顯示卡繪製的據點。
幻獸帕魯伺服器 ping 多少才夠玩?
80 ms 以下幾乎沒人察覺,到 150 ms 都還算好玩。150~250 ms 建造採集沒問題,但王戰會難受。不過別只看一個數字:平均低而忽高忽低的線路,體感比穩定偏高的線路更差。
ping 很低卻一直被拉回原地,為什麼?
平均值低藏得住抖動與封包遺失。先把 Wi-Fi 換成網路線,排掉最後一哩。若換完一樣,而且是全員同時被拉,那就不是你的線路而是伺服器端,看上面的第二步。
據點蓋太多會讓伺服器變卡嗎?
一群人對自家伺服器造成的負擔,最重的就是這個。據點、上面的建築和放在那裡工作的帕魯,在所有人下線之後仍然在被模擬,所以負載跟著蓋的量跑,而不是跟著線上人數跑。要盯的值是 /metrics 裡的 basecampnum;限制據點數、限制每個據點的工作帕魯數、關掉襲擊,是最直接的三個開關。
沒有人能在當下去量的時候
上面所有做法都建立在一個前提上:有人能在大家抱怨的那一刻去讀數字。而那個時刻通常正是沒有人方便連進去的時刻。伺服器卡頓真正難的地方就在這裡——證據只存在於當下,等有人去看的時候伺服器已經閒下來,數字漂亮得很。
KeepWorlds的《幻獸帕魯》伺服器已經替你量好了:每分鐘一次的 FPS 和線上人數,存成帶警戒線的 24 小時曲線,「昨天晚上超卡」是打開來看的,不是靠回想拼出來的。執行久了的累積在你到場之前就處理掉了:每日定時重新啟動會在你指定的時刻,先發遊戲內公告、強制存檔,再把記憶體拉回低點。其餘成因背後的那些設定——襲擊、據點上限、每個據點的工作帕魯數——是遊戲設定表單上的欄位,不是要連進機器去改的 .ini。