最近碰到的問題 Fatal error: Allowed memory size of XXX bytes exhausted 的兩種解決方法

有人來問到底前陣子發生什麼事情,那就順便寫一下。前陣子的伺服器延遲狀況,其實是因為同時開兩個WordPress,然後為了要多使用外掛,因此我將記憶體的分配調得過高,以至於達到虛擬主機資源的上限,反而讓多人連線的時候無法分配到資源,因此常常處於「連線中」但是網頁出不來的狀況。

  • 這個問題為何會出來?

WordPress升級到2.8之後,預設的32MB記憶體往往不夠使用,這個時候會看到如下的錯誤,會在什麼地方看到並不一定,基本上累加超過你的記憶體上限就會出現了。

Fatal error: Allowed memory size of 33554432 bytes exhausted

因此要手動開啟更多記憶體分配給WP,至於要如何開啟,依照你的伺服器不同,會有幾個方法。

  • 分配更多記憶體的方法

一般網路上建議的主要方法:

  1. WP2.8是將wp-setting.php中的define(‘WP_MEMORY_LIMIT’, ’32M’);後面的32M給改成更大的數值即可。
  2. WP2.9左右在wp-config.php中也加入了這條參數,當然也是一併修改。不過我的伺服器不適用這個方法。
  • 另外一個分配更多記憶體的方法

我的伺服器必需要在各個目錄中,都要新增一個php.ini的檔案,內容如下,就這樣一行就好。

memory_limit = 64M

這樣的話就可以分配更多資源給WP,不過虛擬主機一個用戶能分到的資源,往往是主機的幾十分之一,要更多的資源,必需要用VPS這樣的東西。因此像我一次兩個網誌開成兩倍的情況下,等於耗用原本四倍的資源,上限本身就不高的情況下,自然會排擠到其他用戶的使用,導致連線狀況變得緩慢。

因此我就把*yonglan:F那邊的記憶體修改檔全部停止,*yonglan這邊的略為提高,改成「memory_limit = 40M」,這樣讓主機有比較多的資源能分配給各用戶,所以速度感覺起來就回復到原來的狀況。

我開的外掛應該不算多,*yonglan這邊三個(備份+阻擋廣告+Google分析),*yonglan:F那邊四個(備份+阻擋廣告+Google分析+首頁的特效),可見和WP本身變得巨大也有關係。


5 則迴響

  • Y

    2010 年 3 月 16 日

    外掛比我那邊還少…

    之前我是沒有特別慢的感覺,不過這幾天反而常常碰到連線很久甚至連不上的情況,不知是伺服器或hinet的問題

    回復
    • Kyte

      2010 年 3 月 17 日

      我公司也在用hinet不過似乎是還好?
      如果下次有碰到這樣狀況的話,可以查一下連線的狀況看看是那邊阻塞住了。

      回復
      • Y

        2010 年 3 月 17 日

        不知道問題在哪,不過今天連過來的速度比昨天更慢了,開啟網頁的等待時間至少一分鐘,還曾因為太久沒反應而出現錯誤訊息「欲連結之網址(URL)無法正確的傳回」…

        回復
        • Kyte

          2010 年 3 月 17 日

          如果出現這狀況的話,試試看重新執行網址看看。
          這狀況我再請伺服器的公司檢查一下,請稍待囉!

          回復
  • Pingback: WordPress障礙排除(001) | 黑熊零零七

發佈留言