nginx php fmp 記憶體不釋放

2021-05-27 09:56:25 字數 1081 閱讀 7432

由於伺服器只有600m的記憶體,上面跑了乙個併發並不是很大的php應用,當執行一段時間後,發現記憶體不斷增長,其中一部分是pagecache的增長,這個可以通過echo 3 > /proc/sys/vm/drop_caches 命令來進行有效的釋放,另外乙個應用記憶體的增長,且無法釋放,通過top命名(輸入命名後按m鍵可按程序占用記憶體大小的排序)檢視,發現大部分記憶體都被 php-fpm 占用,網上查了一下,大概的意思是說,處理每個php請求完成後,php-fpm會**記憶體,但不會釋放給作業系統,從而導致大量的記憶體被php-fpm 占用。網上也提到解決方法,就是調整php-fpm.conf中的pm.max_requests值,pm.max_requests的作用是傳送多少個請求後會重啟該執行緒,從而使其釋放占用的記憶體,預設0,即決不重啟。在我的應用把該值設定為250,觀察一段時間後,發現還是有好幾個php-fpm占用記憶體的比例是2.8%左右,效果不理想,可能的原因是請求量大,還是無法達到這個閥值,將其設定為10的時候,發現php-fpm是會不斷的重啟的。個人感覺這樣配置不是太好,所有還是把這個值置為250,同時用乙個指令碼來進行殺掉php-fpm,從而釋放他占用的記憶體,另外如果系統負載巨大,重啟會導致 cpu的使用率飆公升。指令碼如下:

#!/bin/bash

log=/home/www/scripts/php-fpm.log

echo `date "+%f %h:%m:%s"` >> $log

for pid in `ps aux|grep php-fpm|grep -v grep|awk ''`

dokill -9 $pid

echo $pid >> $log

done

可以把指令碼加到crontab中讓其定期執行.

另外記錄幾個長用的命令:

1、按順序列出記憶體佔用率的程序     ps -a --sort -rss -o comm,pmem,pcpu |uniq -c |head -15

2、指令vmstat可以監控記憶體使用情況,作為對記憶體監控,我們比較關心swpd、free、si、so。一般系統不繁忙的狀態下,我們看到swpd,so的值不會持續很高,經常為0

3、通過pmap來檢視程序占用記憶體的詳細情況,例如,pmap 程序號

本文參考了:和

Objective C 記憶體管理 物件建立與釋放

基本概念 objective c中記憶體管理使用保留計數 retain count 基本原則是乙個物件 object 的保留計數如果大於0,那麼這個物件存在,如果等於0,則系統自動刪除,相當於沒媽的孩子。乙個物件可 以有多個擁有者 owner 不好意思,前面舉了個很不恰當的例子,乙個孩子不能有多個媽...

粗淺記錄Oracle RAC系統記憶體無法釋放

交代一下環境,是現網實時生產資料庫主機。hp ux 11.31 oracle 10.2.0.4.0 rac集群。兩台機器戶外rac,essdb3與essdb4兩台機器。物理記憶體128g,sga分配64g,pga分配5g。早上發現essdb4主機glance執行只有6g的空閒記憶體。使用如下命令進行...

vector利用swap 函式進行記憶體的釋放

首先,vector與deque不同,其記憶體占用空間只會增長,不會減小。比如你首先分配了10,000個位元組,然後erase掉後面9,999個,則雖然有效元素只有乙個,但是記憶體占用仍為10,000個。所有空間在vector析構時 1 釋放記憶體 empty 是用來檢測容器是否為空的,clear 可...