所謂內存泄漏是指進稱在執行過程當中,內存的佔有率逐步升高,不釋放, 系統所擁有的可用內存愈來愈少的現象。php
php-fpm耗光內存,不釋放,就是所謂的內存泄漏,內存泄漏對長期運行的程序有威脅,因此應該按期重啓進程,例如php-fpm裏面有個配置,max-request,就是控制fast-cgi進程處理多少個請求後重啓,這樣系統可用釋放內存,可是若是內存佔用率增加速度很是快,頻繁重啓進程,就會影響服務的穩定性,因此這個問題必須正面解決。nginx
後來,我才發現其實不須要去修改php的源代碼,php.ini配置文件裏面有兩個配置項: auto_append_file,auto_prepend_file,能夠在請求先後注入代碼 ....web
真是悲劇數組
web程序作性能優化也是這個思路,可是要簡單不少,無需寫代碼,在nginx log裏面加上$request_time ,用awk/sort 處理一下就能夠找出瓶頸。性能優化
可能有不少的讀者碰到過相似下面的錯誤吧:app
Fatal error: Allowed memory size of X bytes exhausted (tried to allocate Y bytes)
這個錯誤的信息很明確,PHP已經達到了容許使用的最大內存了,一般上來講這頗有多是咱們的程序編寫的有些問題。好比:一次性讀取超大的文件到內存中,或者出現超大的數組,或者在大循環中的沒有及時是放掉再也不使用的變量,這些都有可能會形成內存佔用過大而被終止。函數
PHP默認的最大內存使用大小是32M, 若是你真的須要使用超過32M的內存能夠修改php.ini配置文件的以下配置:php-fpm
memory_limit = 32M
若是你沒法修改php配置文件,若是你的PHP環境沒有禁用ini_set()函數,也能夠動態的修改最大的內存佔用大小:性能
<?php ini_set("memory_limit", "128M");
既然咱們能動態的調整最大的內存佔用,那咱們是否有辦法獲取目前的內存佔用狀況呢?答案是確定的。優化