KeepWorlds

幻獸帕魯伺服器很卡:先分清楚是哪一種

《幻獸帕魯》專用伺服器的「卡」其實是四件事,修的地方各不相同。先用誰在卡、什麼時候卡分流,再讀伺服器自己的 FPS 把它確定下來。

「伺服器很卡」這一句裡,裝著四件彼此無關的毛病。在遊戲裡看起來都差不多,要修的地方卻完全不同——所以才會有人為了家裡的 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
{"serverfps":13,"serverframetime":76.9,"currentplayernum":4,
 "maxplayernum":16,"uptime":259200,"days":137,"basecampnum":11}

《幻獸帕魯》專用伺服器健康時跑的是 30 FPS,不是 60。 以為伺服器會跟自己的客戶端一樣的人看到這裡都會愣一下,而這也正是讀到 28 完全不用擔心的原因。數字的意思:

serverfps玩家的體感
25~30正常。這裡沒有要修的,回到第一步再看一次
15~25開始有人抱怨。戰鬥變黏,但說不出哪裡怪
低於 15所有人都感覺得到:位置拉扯、帕魯做到一半僵住、打擊延遲
個位數已經不能玩了,而且通常離程式被系統殺掉只剩幾分鐘

同一份回應裡還有三個值值得一起看:

  • serverframetime 是畫一格花掉的毫秒數,大致是 FPS 的倒數(30 FPS 約 33 ms)。它的價值在於尖峰會比平均 FPS 更早顯現,所以「平均看起來沒事、每隔幾秒卡一下」的伺服器是靠它抓出來的。
  • uptime 是程式啟動到現在的秒數。它是洩漏的證據:低 FPS 配上很長的執行時間,答案在量其他東西之前就已經出來了。
  • basecampnum 是世界裡的據點數。這個 API 給的所有值裡,它和 FPS 的連動最緊——世界不是因為人變多而變重,是因為蓋的東西變多才變重。

要在有人正在抱怨的時候去讀。清晨沒人時抓到的數字,對週六晚上沒有任何解釋力。

第三步:把伺服器 FPS 拉下來的四件事

照實際出現的頻率排。每一件都有一個一分鐘內能判生死的測試。

1. 執行時間——記憶體洩漏。 伺服器的記憶體只升不降,FPS 跟著垮,最後程式被系統殺掉。測試就是重啟:立刻變好就是它。它是遙遙領先的第一名,加記憶體只是把當機的間隔拉長,真正的解法是定時重啟——間隔、「公告→存檔→停止→啟動」的順序和腳本都在記憶體洩漏與定時重啟

2. 世界變重了。 據點、建築、工作中的帕魯和掉在地上的道具,在所有人下線之後仍然在被模擬,而且不會自己消失。測試是 basecampnum 加上進遊戲繞一圈:十幾個據點、每個據點都站滿帕魯,那是第一週好幾倍的工作量。直接有效的設定有四個——bEnableInvaderEnemyBaseCampWorkerMaxNumBaseCampMaxNumDropItemAliveMaxHours設定項目全解)——而第一個要關的是襲擊。

3. 尖峰時段——主執行緒。 物理、尋路、戰鬥和狀態同步全擠在同一條執行緒上,所以決定天花板的是時脈,不是核心數。測試是曲線的形狀:四個人時正常、十個人時往下垮、人走了又回來,那是人數對規格的問題,不是洩漏。該照什麼來估在開服要什麼配備,人數上限為什麼不只是一個數字在人數上限那篇

4. 規律的一頓一頓——硬碟。 所有人一起凍住極短的一下,間隔固定,而且和伺服器忙不忙無關。測試是看錶:頓的間隔如果和 AutoSaveSpan(預設 30 秒)對得上,那是自動存檔撞上慢硬碟。這一條被當成網路問題誤判的次數多得驚人。換 SSD 就結束了。

兩件同時成立的情況也有,開了幾個月的伺服器多半如此。順序仍然照上面走:重啟不花錢,而且先排掉最大的那個。

託管這邊,這條曲線已經畫好了

KeepWorlds《幻獸帕魯》專用伺服器每分鐘記錄一次 FPS 和線上人數,畫在會員中心的健康曲線裡:兩條 24 小時的線、平均 FPS最低 FPS,還有一條畫在滿速一半的警戒線,所以這款遊戲裡 13 算不算低,一眼就看得出來。把兩條線對著看,就是不用 curl 的第三步:FPS 跟著線上人數一起往下是主執行緒,人數不動而 FPS 往下是洩漏或世界變重。曲線上斷掉的那幾段是伺服器停著的時間,其中也包括替你處理掉成因 1 的每日定時重新啟動

客戶端掉 FPS 是另一個數字

兩個 FPS 共用一個名字,搞混了就會跑去調一台根本沒問題的機器。你的客戶端 FPS 是顯示卡畫出來的速度,伺服器 FPS 是世界被模擬的速度。 兩者各走各的。

要分開只要問一句:操作還是即時的嗎?

症狀哪一個 FPS要做什麼
畫面在跳但揮砍和選單都即時反應,朋友都沒事你的客戶端你自己電腦上的畫質設定
畫面很順但打擊延遲,而且大家都這樣說伺服器上面的第二步
兩個一起,而且只在世界的某一塊兩個都是——重的據點對誰都重第三步的成因 2

值得記住的是最後一列。一個蓋了好幾百個建築、站滿工作帕魯的據點,對伺服器是模擬負擔,對你的顯示卡是繪製負擔,所以地圖上同一個位置會讓兩個數字一起垮。玩家把它講成「在我們據點那邊伺服器就卡」,然後開始查錯那台機器。

客戶端這一側能動的全在自己電腦裡:畫質預設、解析度縮放、還有正在跟遊戲搶顯示卡的那些程式。專用伺服器一項都幫不上。它能保證的是另外半邊是健康的,而那正是這篇其餘部分在講的事。

調設定治不好的卡

有兩種根本不屬於伺服器,設定怎麼調都碰不到。

  • 高 ping 與封包遺失。《幻獸帕魯》走 UDP,遺失的封包不會重送,所以遺失率只要超過 1%,平均 ping 再漂亮也會有位置拉扯。怎麼量、怎麼讀抖動、隊友分散在幾個國家時地區怎麼定,都在 ping、地區與卡的三種樣子
  • 版本不一致。 遊戲更新之後,還停在舊版本的伺服器不是變慢,是把所有人擋在外面,而且症狀看起來像網路問題。請看不弄丟存檔的更新順序

常見問題

幻獸帕魯伺服器為什麼會卡?

先確認是誰在卡。只有你,那是你的連線或你的電腦。所有人同時被拉扯,就重啟伺服器:立刻變好就是引擎的記憶體洩漏,這是最常見的成因。重啟沒有改善的話,趁大家還在抱怨的時候用 REST API 讀 serverfps——跟著線上人數一起垮是 CPU 主執行緒,人數不動卻在垮是世界變重了。

幻獸帕魯伺服器 FPS 多少才正常?

專用伺服器的滿速是 30,所以 25 以上都算正常。15 到 25 之間開始有人抱怨;低於 15 時,位置拉扯和做到一半僵住的帕魯會讓世界裡的每個人都感覺到。值從 REST API 的 /metrics 讀,而且要在伺服器忙的時候讀,不是清閒的時候。

畫面卡是我的電腦還是伺服器?

看操作還是不是即時的。畫面在跳但操作即時,那是你的顯示卡,而且別人不會有事。畫面很順但打擊延遲,那是伺服器,而且所有人在同一個瞬間都會遇到。如果兩個一起垮、又只發生在地圖的某一塊,那是一個重到同時吃掉伺服器模擬和你顯示卡繪製的據點。

據點蓋太多會讓伺服器變卡嗎?

一群人對自己伺服器做過最重的事就是這個。據點、上面的建築和放在那裡工作的帕魯,在所有人下線之後仍然在被模擬,所以負載跟著蓋的量跑,而不是跟著線上人數跑。要盯的值是 /metrics 裡的 basecampnum;限制據點數、限制每個據點的工作帕魯數、關掉襲擊,是最直接的三個開關。

沒有人能在當下去量的時候

上面所有做法都建立在一個前提上:有人能在大家抱怨的那一刻去讀數字。而那個時刻通常正是沒有人方便連進去的時刻。伺服器卡頓真正難的地方就在這裡——證據只存在於當下,等有人去看的時候伺服器已經閒下來,數字漂亮得很。

KeepWorlds《幻獸帕魯》伺服器已經替你量好了:每分鐘一次的 FPS 和線上人數,存成帶警戒線的 24 小時曲線,「昨天晚上超卡」是打開來看的,不是靠回想拼出來的。最常見的那個成因在你到場之前就處理掉了:每日定時重新啟動會在你指定的時刻,先發遊戲內公告、強制存檔,再把洩漏清掉。其餘成因背後的那些設定——襲擊、據點上限、每個據點的工作帕魯數——是遊戲設定表單上的欄位,不是要連進機器去改的 .ini

其他語言版本

不想自己維護?

選好遊戲與方案就能開伺服器,整機獨享,備份、遊戲更新與期限提醒都由我們盯著。

查看方案