我的web應用程序通過AJAX向我的PHP腳本進行了很多POST和GET調用。我發現我的服務器的內存使用情況是調用我的腳本導出爲PDF/Excel中,查找,插入/更新/刪除等時,PHP內存使用exit()清除?
無我的PHP腳本與exit()
或die()
結束後達到一個相當低的水平。這可能會導致我的記憶問題?如果我在每個腳本的末尾添加exit()
或die()
,是否會清除該給定腳本剛剛使用的內存?
我的web應用程序通過AJAX向我的PHP腳本進行了很多POST和GET調用。我發現我的服務器的內存使用情況是調用我的腳本導出爲PDF/Excel中,查找,插入/更新/刪除等時,PHP內存使用exit()清除?
無我的PHP腳本與exit()
或die()
結束後達到一個相當低的水平。這可能會導致我的記憶問題?如果我在每個腳本的末尾添加exit()
或die()
,是否會清除該給定腳本剛剛使用的內存?
我不認爲exit()
或die()
會有所作爲。
請確保您有免費的數據庫資源(結果集,連接等)。此外,請考慮您使用的所有擴展,並確保其中沒有人知道有關內存泄漏的錯誤,尤其是在使用特殊擴展的情況下。
如果您在Linux上,即使「空閒內存」爲「低」,您的服務器也不在磁盤上交換,這可能是由於磁盤高速緩存。那樣的話,一切都很好。請參閱:linuxatemyram.com。
順便說一句,你從哪裏得到有關可用內存的信息?
exit
和die
與到達文件結尾基本相同。運行析構函數,ob_start
級別刷新並結束,並且運行任何關閉函數。
然而,在任何PHP進程結束時,進程就像任何其他程序一樣結束。沒有記憶留下。
這不是一個PHP問題,它是一個Apache功能。
當阿帕奇啓動一個新的進程來處理你的請求時,它不會立即處置其資源,您的申請已經被處理後,相反,它保持可用於任何未來可能的請求。
如果您使用'top'命令,您將看到多個apache進程正在運行。
讀到它在這裏:http://abdussamad.com/archives/169-Apache-optimization:-KeepAlive-On-or-Off.html
什麼庫是您使用導出PDF和Excel - 我懷疑這些是罪魁禍首比PHP本身更容易。 – Spudley 2013-02-17 21:49:45
我使用TCPDF爲我的PDF導出...我不使用我的Excel導出的庫 – FastTrack 2013-02-17 21:51:07
當腳本退出時,PHP已經清理了已用內存。僅僅因爲你的代碼沒有明確的exit()或die()調用並不意味着服務器奇蹟般地保持它以某種方式運行。 – 2013-02-17 22:13:15