KeepWorlds

幻獸帕魯伺服器記憶體洩漏:越跑越卡的成因與定時重啟方案

《幻獸帕魯》伺服器端有已知的記憶體洩漏,記憶體只升不降、跑幾天就當機,加記憶體治不了本。唯一有效的是定時重啟:依記憶體大小多久一次、哪些設定在加速洩漏、怎麼做到不掉存檔。

一台《幻獸帕魯》專用伺服器的典型一生是這樣的:開服第一天很順,一週後開始偶爾頓一下,第二週半夜全員斷線一次,之後斷線越來越頻繁,直到某天早上發現存檔打不開。這不是設定沒調好,是遊戲伺服器端有一個已知的、至今沒修掉的記憶體洩漏:程式佔用的記憶體只升不降,跑得越久越接近實體上限,最後被系統砍掉。

這篇講清楚它怎麼發生、哪些設定在給它加速、為什麼光加記憶體沒用,以及唯一真正有效的辦法,依固定節奏重啟,該怎麼自動化。想先確認機器規格夠不夠,先看開服要什麼規格

先確認是不是這個問題

三個訊號同時出現,基本上就是它:

訊號怎麼看
記憶體佔用一直在漲,人下線了也不回落top / htop 裡看伺服器端程式的 RES;Windows 看工作管理員
卡頓隨運行時間加重,重啟後立刻恢復重啟是最好的診斷:重啟就好 = 洩漏,重啟也不好 = 機器本身不夠
程式無聲消失,全員同時斷線Linux 上 dmesg 裡有 OOM killer 的記錄

最後一條最傷:程式被系統砍掉的那一刻可能正在寫存檔,寫到一半的 Level.sav 會在下次啟動時暴露出來。這就是為什麼洩漏問題要和備份一起看。

記憶體去哪了

帕魯伺服器端的記憶體由四塊組成,其中三塊只增不減:

  1. 基礎佔用。1.0 之後冷啟動就要 4 GB 上下,這是底。
  2. 線上玩家。每個人的視距載入與探索範圍,大約每人 1.5 GB。人下線後這一塊會回落一部分,但不是全部。
  3. 世界裡累積的東西。據點、建築、工作中的帕魯、地上的掉落物,玩家下線後它們照樣留在記憶體裡被模擬。這是佔大頭的一塊,而且只增不減:退坑的人不會把據點帶走。
  4. 洩漏殘差。引擎沒有回收乾淨的部分,隨運行時間線性增長。哪怕世界一動不動,這一塊也在漲。

前三塊決定了你需要多少記憶體,第四塊決定了你多久必須重啟一次。分清這兩件事,後面的取捨就很清楚。

1.0 讓這個問題比搶先體驗時期更重:海上據點帶來了新的游泳與飛行尋路計算,天空島和世界樹是額外的載入區域,重做後的襲擊一次生成的實體更多。以前 8 GB 撐得住的世界,1.0 之後要按 16 GB 起算。

哪些設定在給洩漏加速

四項設定直接對上洩漏速度,全都在 PalWorldSettings.ini 那一行裡(改法見世界設定詳解):

設定預設建議為什麼
bEnableInvaderEnemyTrueFalse據點襲擊是公認最大的洩漏來源:一次襲擊生成大量 AI 實體和尋路網格,打退之後引擎回收不乾淨。關掉後同一世界的記憶體佔用大約減半
BaseCampWorkerMaxNum15保持預設每隻工作帕魯都在跑自己的行為模擬,據點多的伺服器把它調到 50 是最快把單核心吃滿的方式
DropItemAliveMaxHours1.00.5地上無主掉落物的存活時長(小時)。縮短一半,實體回收得更快
AutoSaveSpan30保持預設,最多放寬到 60自動存檔間隔,單位是秒。間隔越短寫入越頻繁,硬碟慢的機器每次存檔都會頓一下;但別超過 60 秒,當機時丟的進度就是這個間隔

第一項值得單獨說。關掉 bEnableInvaderEnemy 只關掉腳本觸發的據點襲擊,野生帕魯路過據點打架照舊,PvP 不受影響。對經常離線的固定隊伍來說,襲擊本來就發生在沒人上線的時候,回來只看到一地廢墟,關掉它多數人不會覺得少了什麼,卻換來一半的記憶體餘量。

加記憶體為什麼治不了本

這是最常見的誤判。記憶體從 16 GB 加到 32 GB,得到的不是「不當機了」,是「當機從三天一次變成六天一次」。洩漏會填滿任何容量,只是時間問題。

加記憶體買到的是兩次重啟之間的間隔更長,這本身有價值,它決定了你能不能把重啟安排在凌晨而不是每四小時一次。但它不能取代重啟。

反過來,有幾件事不要做

  • 不要關掉 bIsUseBackupSaveData。存檔備份不是洩漏來源,關了它只會在當機那天少一條退路。
  • 不要把 ServerReplicatePawnCullDistance 調到 5000 以下。這是帕魯同步距離的官方下限,再低玩家看到的是站著不動的帕魯。
  • 不要在同一台機器上跑兩個帕魯伺服器端。兩份洩漏疊在一起,OOM 來得更快。

多久重啟一次

依機器記憶體和是否開襲擊決定,下面是實際運作中站得住的區間:

機器記憶體襲擊事件重啟間隔
8 GB開著每 1–2 小時
8 GB關掉每 2–4 小時
16 GB 及以上開著每 2–4 小時
16 GB 及以上關掉每 4–6 小時

對固定隊伍的伺服器,實際上更實用的答案是:16 GB 以上、關掉襲擊、每天凌晨重啟一次。這個組合下一天之內洩漏漲不到危險線,而凌晨四點的重啟對絕大多數人是無感的。公開伺服器、全天有人的伺服器再考慮縮短到每幾小時一次。

判斷間隔夠不夠的方法很簡單:看重啟前一刻的記憶體佔用離實體上限還有多遠。餘量少於 20% 就該縮短間隔,或者加記憶體把間隔拉開。

怎麼做到不掉存檔的自動重啟

直接 kill 掉程式等於每天製造一次當機。正確的重啟是四步:提前廣播 → 強制存檔 → 停止 → 啟動,全部透過官方 REST 介面完成(RCON 已被官方停止支援,別再往它上面寫腳本)。

先在 PalWorldSettings.ini 裡開介面,並且只監聽本機

RESTAPIEnabled=True
RESTAPIPort=8212
AdminPassword="一個夠長的密碼"

介面用 HTTP Basic 認證,使用者名稱固定是 admin,密碼就是 AdminPassword官方文件明確說過它不設計為直接暴露在網際網路上,所以防火牆不要放行 8212。

Linux 上一份能直接用的腳本:

#!/bin/bash
# /home/palserver/restart.sh:廣播、存檔、重啟
PW='一個夠長的密碼'
API='http://127.0.0.1:8212/v1/api'

curl -s -u "admin:$PW" -X POST "$API/announce" \
     -H 'Content-Type: application/json' \
     -d '{"message":"Server restarts in 5 minutes for maintenance"}'
sleep 240
curl -s -u "admin:$PW" -X POST "$API/announce" \
     -H 'Content-Type: application/json' \
     -d '{"message":"Saving and restarting in 60 seconds"}'
sleep 60
curl -s -u "admin:$PW" -X POST "$API/save"
sleep 10
sudo systemctl restart palworld

掛到 cron,每天凌晨四點:

0 4 * * * /home/palserver/restart.sh >> /home/palserver/restart.log 2>&1

前提是伺服器端已經按開服教學註冊成 systemd 服務。Restart=on-failure 只負責當機後拉起,它管不了記憶體爬升,兩者要一起用。

Windows 上思路完全一樣:PowerShell 裡用 Invoke-RestMethod 依序呼叫 announcesave,再 Stop-ProcessPalServer-Win64-Shipping 並重新拉起 PalServer.exe,然後交給「工作排程器」每天定時跑。

順手把更新也接進去

遊戲一更新,伺服器端不跟著更就全員進不去。既然每天都要停一次,把版本校驗放進重啟流程是零成本的:

# palworld.service 的 [Service] 段裡加一行
ExecStartPre=/usr/games/steamcmd +force_install_dir /home/palserver/palworld +login anonymous +app_update 2394010 validate +quit

每次啟動前先對一遍版本,有更新就順手裝上。代價是啟動多花一兩分鐘,換來的是「官方發版當天早上伺服器已經是新版本」。記得更新前那次備份要留好,存檔格式偶爾會跟著版本變。

常見問題

幻獸帕魯伺服器為什麼記憶體越用越多?

三個來源疊在一起:世界裡的據點、帕魯和掉落物在玩家下線後照樣留在記憶體裡被模擬,只增不減;引擎自身有回收不乾淨的已知洩漏;據點襲擊事件每次都會留下一批回收不掉的實體。前兩個決定了你需要多少記憶體,最後一個可以直接關掉。

關掉襲擊事件會失去什麼?

只失去腳本觸發的據點襲擊。野生帕魯的日常騷擾、PvP、Boss 都不受影響。換來的是同一個世界記憶體佔用大約減半。

幻獸帕魯伺服器多久重啟一次合適?

16 GB 以上且關掉襲擊的伺服器,每天凌晨一次就夠;8 GB 或開著襲擊的伺服器要縮短到每 2–4 小時。判據是重啟前一刻的記憶體離實體上限還剩多少,少於兩成就該縮短間隔。

加記憶體能解決幻獸帕魯伺服器當機嗎?

不能根治。洩漏會填滿任何容量,加記憶體只是把兩次當機的間隔拉長。它的價值是讓你能把重啟安排在凌晨而不是每幾小時一次,但重啟本身省不掉。

這件事在託管上是一個開關

上面整套方案的難點不在任何一步,在於它要長期無人看守地跑對:腳本要有人寫、密碼要有人管、cron 要有人盯、當機要有人半夜爬起來。寫完的第一週它是好的,三個月後沒人記得它還在不在。

KeepWorlds《幻獸帕魯》專用伺服器把這些收成了會員中心裡的幾項:每日定時重新啟動是一個開關加一個時刻,勾上「開啟每日定時重新啟動」選個凌晨的時間就完事;程式當機由系統自動拉起;存檔按固定間隔自動備份,每次備份前先透過介面強制存檔一次;襲擊事件、據點帕魯數這些設定在遊戲設定面板裡直接改,不用碰 ini。想弄清每一項設定的含義,世界設定詳解裡逐項寫了。

其他語言版本

不想自己維護?

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

看看支援的遊戲