中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php如何解決進程太多的問題

發布時間:2021-11-17 09:33:52 來源:億速云 閱讀:378 作者:小新 欄目:編程語言

小編給大家分享一下php如何解決進程太多的問題,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

php進程太多的解決辦法:1、通過“ps -ef  | wc -l”命令查看當前系統的進程;2、再使用相關命令查看占用內存最大的進程;3、查詢php-fpm進程;4、殺死進程或限制內存大小即可。

本文操作環境:linux5.9.8系統、PHP5.5版、DELL G3電腦

linux服務器php-fpm進程數過多導致內存占滿處理:

早上到單位 發現服務器 mysql 服務器停了 然后起來了

查詢日志 顯示 內存滿了 把mysql服務給殺了 linux 服務器如果 內存滿了 會自動清理進程 防止服務器掛掉 選擇的話 誰占的的內存大 就先殺誰 我的服務器里面 mysql服務占的內存是最大的 所以就把mysql就給殺了

php如何解決進程太多的問題

然后 重啟mysql 查詢內存

php如何解決進程太多的問題

在這說一下 怎么看linux的內存

舉個例子

如下顯示free是顯示的當前內存的使用,-m的意思是M字節來顯示內容.我們來一起看看.

$ free -m
total  used  free  shared  buffers  cached
Mem:  1002M  769M 232M  0M  62M  421M
-/+ buffers/cache:  286M  715M
Swap:  1153M  0M  1153M
---------------------------
真實內存占用 = used-buffers-cached = 286M
-----------------

第一部分Mem行:

total 內存總數: 1002M
used 已經使用的內存數: 769M
free 空閑的內存數: 232M
shared 當前已經廢棄不用,總是0
buffers Buffer 緩存內存數: 62M
cached Page 緩存內存數:421M

關系:total(1002M) = used(769M) + free(232M)

第二部分(-/+ buffers/cache):

(-buffers/cache) used內存數:286M (指的第一部分Mem行中的used - buffers - cached)
(+buffers/cache) free內存數: 715M (指的第一部分Mem行中的free + buffers + cached)

可見-buffers/cache反映的是被程序實實在在吃掉的內存,而+buffers/cache反映的是可以挪用的內存總數。

第三部分是指交換分區, 我想不講大家都明白.

我想大家看了上面,還是很暈.第一部分(Mem)與第二部分(-/+ buffers/cache)的結果中有關used和free為什么這么奇怪.

其實我們可以從二個方面來解釋.

對操作系統來講是Mem的參數.buffers/cached 都是屬于被使用,所以它認為free只有232.

對應用程序來講是(-/+ buffers/cach).buffers/cached 是等同可用的,因為buffer/cached是為了提高程序執行的性能,當程序使用內存時,buffer/cached會很快地被使用。

所以,以應用來看看,以(-/+ buffers/cache)的free和used為主.所以我們看這個就好了.另外告訴大家一些常識.Linux為了提高磁盤和內存存取效率, Linux做了很多精心的設計, 除了對dentry進行緩存(用于VFS,加速文件路 徑名到inode的轉換), 還采取了兩種主要Cache方式:Buffer Cache和Page Cache。前者針對磁盤塊的讀寫,后者針對文件inode的讀寫。這些Cache能有效縮短了 I/O系統調用(比如read,write,getdents)的時間。

記住內存是拿來用的,不是拿來看的.不象windows, 無論你的真實物理內存有多少,他都要拿硬盤交換文件來讀.這也就是windows為什么常常提示虛擬空間不足的原因.你們想想,多無聊,在內存還有大部分的時候,拿出一部分硬盤空間來充當內存.硬盤怎么會快過內存.所以我們看linux,只要不用swap的交換空間,就不用擔心自己的內存太少.如果常常 swap用很多,可能你就要考慮加物理內存了.這也是linux看內存是否夠用的標準哦.

--------------------------------------------------------------------------------------------------------------------------

接來下

發現服務器的內存就剩1.9G了 再用top命令 查看一下

php如何解決進程太多的問題

第一行top分別為:當前時間;系統運行天數;使用者個數;系統負載的平均值,后面的三個值分別為1分鐘前、5分鐘前、15分鐘前進程的平均數,這個數值超過 CPU 數目時,說明負載過高

第二行Tasks分別為:進程總數;運行進程數;睡眠進程數;被停止的進程數;被復原的進程數

第三行CPU(s)分別為:

us:user 用戶空間占用cpu的百分比
sy:system 內核空間占用cpu的百分比
ni:niced 改變過優先級的進程占用cpu的百分比
空閑cpu百分比
wa:IO wait IO等待占用cpu的百分比
hi:Hardware IRQ 硬中斷 占用cpu的百分比
si:software 軟中斷 占用cpu的百分比
st:被hypervisor偷去的時間

第四行Mem分別為:總內存;已用內存;空閑內存;緩沖使用中內存

第五行(Swap):類似第四行,但反映著交換分區(Swap)的使用情況。交換分區(Swap)被頻繁使用,可以看作物理內存不足而造成的

top 輸出界面的頂端,也顯示了系統整體的內存使用情況,這些數據跟 free 類似,我就不再重復解釋。我們接著看下面的內容,跟內存相關的幾列數據,比如 VIRT、RES、SHR 以及 %MEM 等。

這些數據,包含了進程最重要的幾個內存使用情況,我們挨個來看。

  • VIRT 是進程虛擬內存的大小,只要是進程申請過的內存,即便還沒有真正分配物理內存,也會計算在內。

  • RES 是常駐內存的大小,也就是進程實際使用的物理內存大小,但不包括 Swap 和共享內存。

  • SHR 是共享內存的大小,比如與其他進程共同使用的共享內存、加載的動態鏈接庫以及程序的代碼段等。

  • %MEM 是進程使用物理內存占系統總內存的百分比。

除了要認識這些基本信息,在查看 top 輸出時,你還要注意兩點。

第一,虛擬內存通常并不會全部分配物理內存。從上面的輸出,你可以發現每個進程的虛擬內存都比常駐內存大得多。

第二,共享內存 SHR 并不一定是共享的,比方說,程序的代碼段、非共享的動態鏈接庫,也都算在 SHR 里。當然,SHR 也包括了進程間真正共享的內存。所以在計算多個進程的內存使用時,不要把所有進程的 SHR 直接相加得出結果。

只是這樣看 還是不行 感覺內存 不應該 占用很多 然后 使用命令 查看 當前系統有多少進程

ps -ef  | wc -l

php如何解決進程太多的問題

然后使用命令查看占用內存最大的500個進程:

ps -aux | sort -k4nr | head -n 500

截取部分 PHP的進程 占到了200個 每個都100多兆

php如何解決進程太多的問題

php如何解決進程太多的問題

解釋一下含義

USER: 行程擁有者
PID: pid
%CPU: 占用的 CPU 使用率
%MEM: 占用的記憶體使用率
VSZ: 占用的虛擬記憶體大小
RSS: 占用的記憶體大小
TTY: 終端的次要裝置號碼 (minor device number of tty)
STAT: 該行程的狀態,linux的進程有5種狀態:
D 無法中斷的休眠狀態(通常 IO 的進程);
R 正在運行可中在隊列中可過行的;
S 處于休眠狀態;
T 停止或被追蹤;
W 進入內存交換  (從內核2.6開始無效);
X 死掉的進程   (基本很少見);
Z 僵尸進程;
< 優先級高的進程
N 優先級較低的進程
L 有些頁被鎖進內存;
s 進程的領導者(在它之下有子進程);
l 多進程的(使用 CLONE_THREAD, 類似 NPTL pthreads);
+ 位于后臺的進程組;
注: 其它狀態還包括W(無駐留頁), <(高優先級進程), N(低優先級進程), L(內存鎖頁).
START: 行程開始時間
TIME: 執行的時間
COMMAND:所執行的指令

查詢PHP-fpm 總進程數

pstree|grep php-fpm

然后 查詢 php-fpm 進程

ps -ef|grep php-fpm

發現PHP起了四個主進程 這里截取了三個

php如何解決進程太多的問題

然后看的PHP 的配置文件

php如何解決進程太多的問題

php如何解決進程太多的問題

發現配置的 是 靜態 配置的50個進程 四個主進程 每個配50個子進程 就200多個進程     進程太多了    平時的話  一般就六七個進程在處理    修改 進程數量   把50  改成10      這個進程數量  根據自己服務器的內存大小  來設置

查看當前php-fpm進程的內存占用情況及啟動時間,命令如下:

ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid'|grep www|sort -nrk5

查看當前php-fpm進程平均占用內存情況,一般來說一個php-fpm進程占用的內存為30-40MB,命令如下:

ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'

然后我重啟了PHP 指定配置文件

步驟

先  查找  然后  殺死

ps aux |grep php
kill 21605 (進程pid)

檢測

php如何解決進程太多的問題

啟動

./php-fpm -y /usr/local/php/etc/php-fpm.conf

重啟完 內存就降下來了

然后就事查找問題 猜測是內存泄露 但是不確定是哪里 對一些感覺有問題的地方 加上了unset()

然后檢測 發現 內存一直都很平穩

如果內存還是一直增加 可以限制內存大小

設置方法:編輯php-fpm.conf配置文件

php_admin_value[memory_limit] = 128M(我服務器上的配置文件在/etc/php5/fpm/pool.d/www.conf 這個文件是被包含在php-fpm.conf里的) 后邊的數字可以隨便更改:32M,64M,128M,256M,512M,這個設置可根據你的服務器內存大小和你的需求來寫,修改后要加載一下php-fpm服務。

這個時候 程序那個步驟出問題了 就說明哪里有內存泄露 但是也不是絕對的 這里還要了解一下 PHP的垃圾回收機制

如果你在一個進程里面 應該也是 累加的 也不是很好判斷 就要根據程序 對不用的變量進程銷毀 或者 限制 PHP的進程數量

注: 普通用戶數據1000條 存在數組里面 大約占2246.2734375kb

普通用戶數據2000條 存在數組里面 大約占4472.8671875kb

以上是“php如何解決進程太多的問題”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

虹口区| 丰都县| 全椒县| 台北县| 通渭县| 平阴县| 江阴市| 从江县| 上高县| 行唐县| 渝中区| 茶陵县| 文水县| 巫山县| 如皋市| 仁寿县| 行唐县| 辉县市| 从化市| 乐山市| 德令哈市| 通州区| 晋江市| 蒲江县| 东兴市| 雅江县| 神木县| 九龙城区| 四子王旗| 武夷山市| 樟树市| 安远县| 文水县| 仲巴县| 吉安县| 富川| 临武县| 南陵县| 娄烦县| 开阳县| 新巴尔虎左旗|