修復 Nextcloud PHP 記憶體限制警告

若要清除 Nextcloud 的 PHP 記憶體限制警告,請在 Web 伺服器使用的 PHP 配置中memory_limit至少設定512M一個值,然後重新啟動或重新載入相關的 PHP 服務。 Nextcloud 目前穩定版的管理手冊建議此 PHP 設定至少為 512 MB。編輯檔案後警告仍然存在的最常見原因是 Web 伺服器使用的 PHP 配置與命令列 PHP 安裝的設定不同。

選擇與您的部署方式相符的方案:Apache(帶 mod_php)、Apache 或 Nginx(帶 PHP-FPM)、容器或託管的 Nextcloud 套餐。請勿修改主機的隨機配置php.ini並假設所有部署都使用該配置。請在 Nextcloud 的管理概覽頁面驗證結果,該頁面反映了 Web 應用程式的配置。

這個警告是什麼意思?

PHP 的memory_limit記憶體分配上限是指單一 PHP 腳本可以分配的最大記憶體。它並非 Nextcloud 預留的總內存,也不會增加伺服器可用的實體記憶體。 Nextcloud 手冊建議為此指令至少配置 512 MB。此外,系統需求也解釋說,實際的伺服器記憶體需求會因使用者、應用程式、檔案和活動而異;他們建議每個 PHP 進程至​​少分配 512 MB 內存,最低要求為 128 MB。

提高 PHP 請求限制可以解決配置警告,並為記憶體密集型請求提供更多空間。但它無法為記憶體不足的主機增加內存,也無法修復記憶體洩漏,更無法保證每個應用程式都能成功運作。如果伺服器已經記憶體緊張,提高單次請求的請求限制可能會增加並發 PHP 工作進程耗盡系統記憶體的風險。

應該修改哪個PHP配置?

首先要確定 PHP 如何運行 Nextcloud。可以透過終端機檢查(例如php --ini`npm run dev`)來查看命令列 (CLI) 設定。 Nextcloud 的 Web 請求可能使用單獨的 Apache 模組或 PHP-FPM 服務,並可能使用不同的php.ini資源池覆蓋機制。 Nextcloud 特別指出,Web 和 CLI 的 PHP 可能會使用不同的設定檔。

在基於 Debian 的系統中,/etc/php/8.x/apache2/php.iniApache PHP 模組和/etc/php/8.x/fpm/php.iniPHP-FPM 的典型安裝位置可能有所不同。實際的 PHP 版本和目錄名稱可能有所不同。其他發行版通常使用不同的路徑,例如共用路徑/etc/php.ini。這些僅供參考;請使用您的軟體套件管理器、服務配置和 PHP 執行時間環境來尋找實際使用的 PHP 檔案。

若要檢查 CLI 配置,請執行:

php --ini
php -i | grep -i '^memory_limit'

這些命令對於從命令列呼叫 PHP 的定時任務很有用,但它們並不能證明面向瀏覽器的 Nextcloud 進程使用了相同的值。避免phpinfo()在伺服器上留下公共頁面:這可能會洩漏路徑、模組和運行時詳細資訊。

如何設定 Apache 或 PHP-FPM 的限制?

在修改目前設定檔之前,請先備份該檔案。在正確的設定檔中php.ini,找到對應的memory_limit行,並將其設定為預設值512M或根據您的工作負載選擇的更高值:

memory_limit = 512M

請使用一個有效的設置,而不是在多個文件的末尾添加重複的行。 PHP-FPM 進程池也可以為其工作進程定義值,因此如果設定的值php.ini沒有生效,請檢查進程池配置。某些 PHP 部署支援依目錄設定.user.ini;此功能是否啟用取決於伺服器配置,應與管理員確認。

Apache 使用 mod_php

編輯php.iniApache 使用的設定文件,儲存,然後重新啟動 Apache,以便模組重新載入其設定。服務名稱可能有所不同。在 Debian 或 Ubuntu 系統中,該服務通常為 `Apache` apache2;在 RHEL 系列系統中,通常為 `Apache` httpd。請使用與您的作業系統和維護流程相符的服務名稱。

sudo systemctl restart apache2

如果您的發行版使用不同的單元名稱,請進行替換apache2。如果 Nextcloud 是透過 PHP-FPM 而不是 mod_php 提供服務的,則單獨重新啟動 Apache 不會重新載入 PHP 工作進程。

使用 PHP-FPM 的 Apache 或 Nginx

編輯網站實際使用的 PHP-FPM 配置。儲存變更後,重新啟動或重新載入對應的 PHP-FPM 服務。其配置單元可能包含 PHP 版本信息,例如 `<version>` php8.3-fpm,或使用其他廠商特定的名稱。

sudo systemctl restart php8.3-fpm

請使用與已安裝的 PHP 版本對應的正確服務名稱。 Nginx 會將 PHP 請求傳遞給 FPM,因此更改 PHP 設定通常需要同時套用到 FPM;單獨重新啟動 Nginx 並不會重新載入 PHP 的記憶體限制。如果您的 PHP-FPM 連線池配置覆蓋了其他設置memory_limit,請調整連線池設定或移除覆蓋,然後重新啟動連線池。

如果 Nextcloud 運行在 Docker、AIO、Snap 或其他軟體包中呢?

請使用與該安裝方法相符的配置機制。編輯主機上的 PHP 檔案通常不會改變容器或隔離套件內的 PHP 執行環境。官方 Nextcloud Docker 映像檔中記錄了環境變量,目前映像檔中的PHP_MEMORY_LIMIT預設值為 `--enable ...512M

environment:
  PHP_MEMORY_LIMIT: 512M

請勿將該設定複製到所有安裝類型。 Nextcloud 手冊指出,AIO、Snap、NCP 和 Community Docker 等開箱即用環境已預先配置了 PHP,並引導管理員參考特定軟體包的自訂說明。對於這些設置,請使用該軟體包支援的介面或文件。持久卷掛載和產生的配置也可能覆蓋一次性手動編輯。

如何確認警告已修復?

  1. 將變更套用至 Web 導向的 PHP 配置,然後重新啟動或重新載入相關的 Web/PHP 服務。
  2. 以管理員身分登入 Nextcloud,然後開啟設定 > 管理 > 概覽。
  3. 刷新頁面並查看配置警告。確認 PHP 記憶體限制警告已消失。
  4. 執行先前觸發警告的代表性操作,例如受影響的應用程式任務,並查看 Nextcloud 和 PHP 日誌中是否存在記憶體耗盡訊息。

如果您也透過系統 cron 執行 Nextcloud 背景作業,請單獨檢查 CLI PHP 配置。即使 CLI 作業仍然使用較低的限制,也可以清除面向 Web 的警告。請使用 `--command` 指令確認 CLI 的值,php --ini並php -i確保 cron 指令使用的 PHP 二進位與 CLI 的值一致。

何時應該將數值提高到 512M 以上?

只有當警告消失但已記錄的工作負載仍然達到 PHP 記憶體限制,或者應用程式的官方指南要求更高的記憶體使用量時,才應提高此限制。首先檢查實際的伺服器記憶體、PHP-FPM 工作進程數、資料庫記憶體和其他服務。由於 PHP 是按腳本應用記憶體限制,因此多個繁忙的工作進程可能會同時佔用大量記憶體。設定符合主機記憶體預算的實際限制-1,而不是使用 PHP 文件中聲稱沒有記憶體限制的 `<PHP_FPM_LOAD_LIMITED>`。

如果警告消失,但伺服器仍然變慢或進程被終止,請檢查系統記憶體和交換空間使用情況、PHP-FPM 日誌以及 Nextcloud 日誌。考慮是否有特定應用或請求消耗了過多記憶體。記憶體快取(例如 APCu 或 Redis)可以解決快取和效能問題;但它不能取代 PHP 的記憶體配置memory_limit。每次只更改一個因素,以便確定結果是否有改善。

根據症狀快速檢查

  • 編輯 php.ini 文件後警告仍然存在:請檢查您是否編輯了 CLI 文件而不是 Apache/FPM 文件,或者是否有池設定覆蓋了它。
  • 警告已清除,但 cron 任務仍然失敗:請檢查 CLI PHP 二進位檔案及其單獨的配置。
  • 重新啟動後 Web 伺服器傳回錯誤:檢查 Web 伺服器或 PHP-FPM 服務狀態和日誌,如果設定變更導致啟動失敗,請還原備份。
  • 警告消失,但主機內存不足:降低並發性、增加內存,或在進一步提高 PHP 限制之前確定佔用內存的進程。
  • 如果您使用容器或開箱即用的軟體包:請更改軟體包支援的 PHP 設置,而不是主機的 php.ini 檔案。

官方參考資料

留下評論

10 款最佳 Ping 掃描工具,協助您尋找網路上的設備

10 款最佳 Ping 掃描工具,協助您尋找網路上的設備

比較 10 款 ping 掃描工具,它們可用於快速發現區域網路、跨平台掃描和 IP 位址管理。了解掃描可以告訴您什麼,以及不能告訴您什麼。

用於追蹤效能的 6 款最佳網路管理工具

用於追蹤效能的 6 款最佳網路管理工具

比較六款網路管理工具的效能監控功能,包括 SNMP 覆蓋範圍、映射、警報、部署模型和成本權衡。

適用於 Windows、iOS 和 Android 的最佳 Wi-Fi 分析器

適用於 Windows、iOS 和 Android 的最佳 Wi-Fi 分析器

比較適用於 Windows、iPhone 和 Android 的 Wi-Fi 分析器,包括頻道擁塞、訊號覆蓋範圍、熱圖和網路故障排除工具。

Ping 監控:7 款免費開源的網路可用性工具

Ping 監控:7 款免費開源的網路可用性工具

比較七款免費開源的 ping 監視器,從完整的網路套件到專注於延遲探測的工具,選擇最適合可用性、丟包率和歷史記錄的工具。

網路中的服務品質 (QoS):服務品質的角色和工作原理

網路中的服務品質 (QoS):服務品質的角色和工作原理

了解 QoS 在網路中的意義,DSCP 標記和流量佇列如何對語音、視訊和業務應用程式進行優先排序,以及 QoS 無法解決的問題。

最佳SFTP伺服器軟體,實現安全檔案傳輸

最佳SFTP伺服器軟體,實現安全檔案傳輸

比較適用於 Windows 和 Linux 的可靠 SFTP 伺服器軟體,包括 OpenSSH、Bitvise、SolarWinds 和 SFTPGo。尋找最適合您的安全性和文件傳輸需求的軟體。

適用於網路團隊的 7 款最佳 IP 位址管理工具

適用於網路團隊的 7 款最佳 IP 位址管理工具

比較七款 IP 位址管理工具,包括子網路發現、DNS 和 DHCP 協調、網路清單和開源 IPAM。

網路監控最佳實務:監控哪些內容以及使用哪些工具

網路監控最佳實務:監控哪些內容以及使用哪些工具

建置實用的網路監控,提供清晰的設備覆蓋範圍、有用的效能指標、可操作的警報,並對 SolarWinds NPM、PRTG 和 OpManager 進行比較。

十大最佳網路掃描工具,幫助您發現裝置和 IP 位址

十大最佳網路掃描工具,幫助您發現裝置和 IP 位址

比較網路掃描工具,以實現快速設備發現、跨平台 IP 掃描和企業級 IPAM,並指導如何將每個選項與您的網路相符。

如何使用 Nmap 進行路由追蹤並讀取網路路徑

如何使用 Nmap 進行路由追蹤並讀取網路路徑

使用 Nmap 的 --traceroute 選項將躍點對應到授權主機,了解躍點和 RTT 輸出,並在不進行過度掃描的情況下排查缺失的回應。