php 內存泄漏

 

所謂內存泄漏是指進稱在執行過程當中,內存的佔有率逐步升高,不釋放, 系統所擁有的可用內存愈來愈少的現象。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");

既然咱們能動態的調整最大的內存佔用,那咱們是否有辦法獲取目前的內存佔用狀況呢?答案是確定的。優化

  1. memory_get_usage(),這個函數的做用是獲取目前PHP腳本所用的內存大小。
  2. memory_get_peak_usage(),這個函數的做用返回當前腳本到目前位置所佔用的內存峯值,這樣就可能獲取到目前的腳本的內存需求狀況。
相關文章
相關標籤/搜索