如何增加 PHP memory_limit 以獲得更好的效能?

有時,您可能會遇到以下錯誤:致命錯誤:記憶體大小耗盡?或者您的網站已經一片空白?安裝新主題、新增外掛程式或升級 WordPress 版本通常會導致此問題。網站運行速度是否太慢或伺服器是否超載?

您的主機的 PHP memory_limit 小於您的進程所需的記憶體。這是造成該錯誤的主要原因。如果發生這種情況,您需要增加主機記憶體限制才能完成該過程。

可以透過 PHP memory_limit 限制腳本可以分配的記憶體量(以位元組為單位)。透過這樣做,您可以避免編寫不好的腳本佔用所有伺服器記憶體。

PHP memory_limits 也可能因其他原因而增加。根據伺服器的配置,PHP 的預設記憶體限制也有所不同。

大多數網站都可以在每次安裝 PHP 時使用預設 PHP 設定來運行。PHP 設定有時可能需要調整以滿足網站的需求。因此,您的網站上的記憶體限制可能必須增加才能完成進程。

目錄

  1. PHP記憶體限制是什麼?
  2. 如何增加PHP記憶體限制?
  3. 設定最佳記憶體限制
  4. PHP memory_limit 問題疑難排解
  5. 什麼時候應該增加 PHP memory_limit?

PHP記憶體限制是什麼?

PHP 記憶體限制是 PHP 中的一項基本配置設置,它控制 PHP 腳本在運行時可以使用的最大記憶體量。每當 PHP 腳本運行時,它都會利用記憶體來保存變數、資料結構以及腳本順利執行所需的其他基本資訊。

如果腳本嘗試使用超過指定內存限制的內存,則會觸發致命錯誤,導致腳本終止。預設情況下,PHP 記憶體限制一般設定為 128 MB,但可以根據應用程式的特定需求進行自訂。

WordPress PHP 記憶體限制

WordPress PHP 記憶體限制

php.ini 檔案通常是設定 PHP 記憶體限制的標準位置。不過,也可以使用 ini_set() 函數以程式設計方式進行調整,或在某些情況下透過 .htaccess 檔案進行調整。

PHP 記憶體限制對 PHP 應用程式的效能起著至關重要的作用,因為記憶體限制不足可能會導致腳本崩潰或應用程式效能不佳。相反,過高的記憶體限制可能會導致記憶體使用不理想,並可能影響伺服器效能。

因此,建議根據應用程式的大小和複雜性以及可用的伺服器資源,將 PHP 記憶體限制設定為應用程式正常運行所需的最小量。此外,追蹤記憶體使用情況並根據需要修改記憶體限制以確保最佳效能也至關重要。

如何增加PHP記憶體限制?

每當您需要增加 PHP 中的記憶體限制時,可以使用三種方法。

  1. 編輯 php.ini 文件
  2. 使用 .htaccess 文件
  3. 使用應用程式配置選項
  4. 使用託管提供者工具

1.編輯php.ini文件

您可以編輯檔案memory_limit中的設置php.ini,該檔案是主要的 PHP 配置檔案。該php.ini檔案通常位於伺服器上的 PHP 安裝目錄中。若要增加memory_limit,您可以在文件中新增或修改以下行php.ini

memory_limit = 256M

php.ini 文件

php.ini 文件

優點

  • 允許您為整個 PHP 安裝設置memory_limit,這意味著伺服器上的所有 PHP 腳本和應用程式將使用相同的memory_limit值。
  • 如果您想確保所有 PHP 腳本和應用程式具有相同的可用記憶體量,這會很方便。

缺點

  • 需要直接存取該php.ini文件,如果您使用託管提供者或您的伺服器沒有足夠的權限,則可能無法直接存取該文件。
  • 修改php.ini檔案可能很複雜,您可能需要具備一些 PHP 配置知識才能有效地使用此方法。

2. 使用 .htaccess 檔案:

您也可以memory_limit使用.htaccess檔案增加設定。如果您無法存取主 PHP 配置文件,或者想要memory_limit為伺服器上的不同目錄設定不同的值,則此方法非常有用。若要增加文件memory_limit的使用.htaccess,您可以將以下行新增至文件:

php_value memory_limit 512M

.htaccess要使用此方法,如果您還沒有文件,則需要建立文件。該檔案應放置在您的網站或應用程式的根目錄中。

例如,如果您的網站位於public_html伺服器上的目錄中,則應將該.htaccess檔案放置在該目錄中。

優點

  • 指定伺服器上特定目錄的記憶體限制,允許您為網站的不同部分設定不同的記憶體限制值。
  • 如果您無法存取主 PHP 配置文件,或者您想要memory_limit為伺服器上的不同目錄設定不同的值,則此選項非常有用。

缺點

  • .htaccess 檔案僅會影響包含 .htaccess 檔案的目錄中的 PHP 腳本和應用程式。
  • 某些託管提供者可能不允許您使用該.htaccess文件來設定memory_limit設定。

3. 使用應用程式設定選項

如果您使用的是 CMS 或其他基於 PHP 的應用程序,則可以memory_limit使用應用程式的配置選項來增加設定。memory_limit例如,許多 CMS 允許您透過管理面板或編輯設定檔來設定。

優點

  • 可以memory_limit針對特定的基於 PHP 的應用程式(例如內容管理系統)進行設定。
  • 通常比其他方法更容易使用,例如編輯文件php.ini或使用.htaccess文件。

缺點

  • 此設定僅影響設定 memory_limit 值的 PHP 應用程式。
  • 可能不適用於所有基於 PHP 的應用程式。

4. 使用託管提供者工具

如果您使用託管提供者,則可以memory_limit使用提供者的控制面板或其他工具來增加設定。如果您無法直接存取.htaccess伺服器上的 PHP 配置檔案或文件,則此選項非常有用。

優點

  • memory_limit您無需直接存取伺服器的 PHP 設定檔或.htaccess檔案即可進行設定。
  • 提供使用者友善的介面或控制面板,讓您memory_limit輕鬆快速地進行設定。

缺點

  • 可能不適用於所有託管提供者。
  • 可能無法提供與其他方法相同程度的靈活性和控制,例如編輯文件php.ini或使用.htaccess文件。

設定最佳記憶體限制

為 PHP 腳本設定最佳記憶體限制可能會有所不同,具體取決於應用程式或腳本的特定要求。以下是如何在 PHP 中設定記憶體限制的範例:

步驟 1:確定目前記憶體限制

在設定記憶體限制之前,您需要知道當前限制是多少。您可以使用該ini_get()函數來獲取當前的記憶體限制:

$memory_limit = ini_get('memory_limit');
echo "Current memory limit is: " . $memory_limit . "\n";

步驟 2:確定最佳記憶體限制

最佳記憶體限制取決於應用程式或腳本的特定要求。您可以使用該memory_get_peak_usage()函數來確定腳本使用的最大記憶體量:

// Your code here...
echo "Peak memory usage: " . memory_get_peak_usage() . "\n";

這將輸出峰值記憶體使用量(以位元組為單位)。

步驟 3:設定記憶體限制

一旦確定了最佳記憶體限制,您可以使用以下ini_set()函數進行設定:

// Set memory limit to 256MB
ini_set('memory_limit', '256M');

請注意,記憶體限制值可以用位元組(-1表示無限制)、千位元組 ( 128K)、兆位元組 ( 256M) 或千兆位元組 ( 2G) 來表示。

請務必注意,過度增加記憶體限制也會導致問題,因此針對您的特定用例找到適當的平衡非常重要。

步驟 4:驗證新的記憶體限制

最後,您可以再次使用該函數驗證是否已設定新的記憶體限制ini_get()

$memory_limit = ini_get('memory_limit');
echo "New memory limit is: " . $memory_limit . "\n";

這將輸出您設定的新記憶體限制值。

PHP memory_limit 問題疑難排解

當您的腳本或應用程式需要的記憶體多於伺服器目前分配的記憶體時,PHP 可能會出現記憶體限制問題。以下是排除和解決 PHP 中記憶體限制問題的一些步驟:

1.檢查當前記憶體限制

您可以透過使用以下程式碼建立 PHP 檔案來檢查 PHP 配置中設定的當前記憶體限制:

<?php
phpinfo();
?>

此程式碼將顯示一個包含所有 PHP 配置設定的頁面,包括記憶體限制。

2.增加內存限制

如果當前記憶體限制低於應用程式所需的記憶體限制,您可以透過將以下程式碼新增至 PHP 腳本的開頭來增加記憶體限制:

ini_set('memory_limit', '256M');

此程式碼會將記憶體限制增加到 256MB。您可以根據需要將該值調整為更高或更低的值。

3. 優化你的程式碼

如果增加記憶體限制不是一個選項或無法解決問題,您可能需要優化程式碼以減少記憶體使用量。優化 PHP 程式碼的一些技術包括:

  • unset()當不再需要變數時,使用會釋放變數所使用的記憶體。
  • 避免不必要的大型資料結構複製。
  • 使用針對記憶體使用進行了最佳化的內建 PHP 函數。

4. 使用分析器

如果您無法確定記憶體問題的原因,可以使用分析器來分析 PHP 腳本的記憶體使用情況。Xdebug 是一種流行的 PHP 擴展,其中包含一個分析器,可以幫助您識別程式碼中的記憶體密集區域。

考慮學習PHP 中的調試技術,以有效地解決記憶體限制等問題、優化程式碼並確保應用程式的平穩性能。

什麼時候應該增加 PHP memory_limit?

由於每輛車的高速公路速度限制各不相同, PHP memory_limits 因腳本而異。例如,PHP 可能將其記憶體限制設為 1GB,但這並不意味著腳本會堆積起來使用那麼多記憶體。

在某些情況下您可能需要增加 PHPmemory_limit設定:

**1.**當執行記憶體密集型 PHP 腳本時,例如處理大量資料或影像的腳本,您可能需要增加 memory_limit 設定以確保腳本有足夠的記憶體來完成其任務。

例如,如果您有一個需要調整數千張圖片大小的 PHP 腳本,您可能需要增加 memory_limit 以防止腳本因記憶體不足而崩潰。

**2.**在使用具有特定記憶體要求的 CMS 或其他基於 PHP 的應用程式時,您可能需要增加 memory_limit 設定以滿足這些要求。

例如,如果您使用的 CMS 需要至少 128MB 內存,則需要將 memory_limit 設定為至少 128MB 以確保 CMS 正常運作。

**3.**如果您的 PHP 腳本遇到記憶體不足錯誤或其他問題,增加 memory_limit 可能有助於解決這些問題。

例如,如果您正在執行處理大型資料庫的 PHP 腳本,並且看到「記憶體不足」錯誤,則增加 memory_limit 可能允許腳本在不耗盡記憶體的情況下完成其任務。

**4.**如果您的伺服器上同時執行多個PHP腳本,您可能需要增加memory_limit以確保每個腳本有足夠的記憶體正常運作。

例如,如果您有託管多個網站的伺服器,並且每個網站都運行自己的 PHP 腳本,則增加 memory_limit 可能會阻止腳本競爭記憶體並導致效能問題。

**5.**如果您最近升級了伺服器或更改了 PHP 配置,則可能需要增加 memory_limit 以反映增加的記憶體可用性或 PHP 設定中的變更。

例如,如果您已將伺服器從單核心處理器升級為多核心處理器,則可能需要增加 memory_limit 以利用額外的核心並提高效能。

**6.**如果您使用的 PHP 擴充功能或第三方函式庫需要一定量的記憶體才能正常運行,則可能需要增加 memory_limit 以滿足這些要求。

例如,如果您使用的 PHP 擴充功能需要至少 64MB 內存,則需要將 memory_limit 設定為至少 64MB 以確保擴充功能正常運作。

一般來說,最好僅memory_limit在遇到需要更多記憶體來解決的特定問題時才增加設定。否則,建議將其保持memory_limit在合理的水平,以確保您的伺服器保持高效能和穩定。

結束

總而言之,增加 PHPmemory_limit可以透過允許 PHP 腳本使用更多記憶體來提供效能優勢,從而提高其執行速度和整體效能。

此記憶體限制錯誤是許多常見錯誤之一。提高 PHP 腳本的記憶體限制可能會對您的網站產生負面影響,因此您只應將其作為最後的手段。

但是,需要注意的是,增加記憶體限制也會導致伺服器上的記憶體使用量增加,因此應謹慎執行。

此外,在進行任何更改後監視伺服器的記憶體使用情況和效能始終是一個好主意,以確保它們達到預期的效果。

透過仔細增加 PHP 中的記憶體限制,您可以提高網站的效能並為使用者提供更好的體驗。


Atatus:PHP 效能監控與日誌管理

Atatus 是一種應用程式效能管理 (APM)解決方案,可收集對 PHP 應用程式的所有請求,而無需您更改原始程式碼。然而,該工具的作用不僅僅是追蹤應用程式的效能。

將所有 PHP 應用程式和系統的日誌監控到集中且易於導航的使用者介面中,使您可以使用PHP 監控更快地排除故障。

我們為集中式 PHP 日誌記錄提供了一種經濟高效、可擴展的方法,因此您可以全面了解複雜的架構。為了消除噪音並專注於重要的關鍵事件,您可以按主機名稱、服務、來源、訊息等搜尋日誌。當您可以將日誌事件與 APM 慢速追蹤和錯誤關聯起來時,故障排除就會變得容易。