Heim > Artikel > Backend-Entwicklung > Was tun, wenn zu viele PHP-Prozesse vorhanden sind?
Lösungen für zu viele PHP-Prozesse: 1. Verwenden Sie den Befehl „ps -ef | wc -l“, um die Prozesse des aktuellen Systems zu überprüfen. 2. Verwenden Sie dann entsprechende Befehle, um den Prozess zu überprüfen, der die größte Menge an Speicher beansprucht 3. Fragen Sie den PHP-FPM-Prozess ab. 4. Beenden Sie den Prozess oder begrenzen Sie die Speichergröße.
Die Betriebsumgebung dieses Artikels: Linux5.9.8-System, PHP5.5-Version, DELL G3-Computer
php Was soll ich tun, wenn zu viele Prozesse vorhanden sind?
Der Speicher ist aufgrund zu vieler PHP-FPM-Prozesse auf dem Linux-Server voll:
Ich ging heute Morgen zur Arbeit und stellte fest, dass der MySQL-Server gestoppt und dann gestartet wurde.
Das Abfrageprotokoll zeigte, dass der Speicher leer war war voll und der MySQL-Dienst wurde auf dem Linux-Server beendet. Wenn der Speicher voll ist, wird der Prozess automatisch bereinigt, um zu verhindern, dass der Server hängen bleibt. Wenn Sie dies auswählen, wird der MySQL-Dienst zuerst beendet Mein Server belegt den größten Speicher, daher werde ich MySQL töten die aktuelle Speichernutzung, und -m bedeutet M Bytes zum Anzeigen des Inhalts. Werfen wir einen Blick darauf ) + free(232M)
Der zweite Teil (-/+ buffers/cache):$ 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 -----------------
Es ist ersichtlich, dass -buffers/cache den tatsächlich vom Programm verbrauchten Speicher widerspiegelt, während +buffers/cache spiegelt die Gesamtspeichermenge wider, die genutzt werden kann.
Der dritte Teil bezieht sich auf die Swap-Partition. Ich denke, jeder versteht es, ohne es zu erklären.
Ich denke, jeder ist immer noch verwirrt, nachdem er den ersten Teil (Mem) gelesen hat. + Puffer/Warum sind die Ergebnisse so seltsam?
Tatsächlich können wir es aus zwei Aspekten erklären: Für das Betriebssystem werden alle Puffer/Cache verwendet , also gilt es nur als kostenlos 232.
Für Anwendungen ist (-/+ buffers/cach).buffers/cached sind gleichermaßen verfügbar, da buffer/cached die Leistung der Programmausführung verbessern soll. Wenn das Programm Speicher verwendet, buffer/. Zwischengespeichert wird schnell verwendet.
Also, wenn ich mir die Anwendung ansehe, sind freie und genutzte (-/+ Puffer/Cache) die wichtigsten. Schauen wir uns das zusätzlich an, um es zu verbessern Festplatten- und Speicherzugriff, Linux Aus Effizienzgründen hat Linux viele sorgfältige Designs entwickelt. Zusätzlich zum Caching-Dentry (wird in VFS verwendet, um die Konvertierung von Dateipfadnamen in Inodes zu beschleunigen) werden auch zwei Haupt-Cache-Methoden verwendet: Buffer Cache und Seitencache. Ersteres dient zum Lesen und Schreiben von Festplattenblöcken und letzteres zum Lesen und Schreiben von Datei-Inodes. Diese Caches können die Zeit von E/A-Systemaufrufen (z. B. Lesen, Schreiben, Getdents) effektiv verkürzen.
Denken Sie daran, dass der Speicher im Gegensatz zu Windows, egal wie viel realer physischer Speicher Sie haben, zum Auslagern von Dateien zum Lesen verwendet wird. Aus diesem Grund fordert Windows häufig den virtuellen Speicher an Denken Sie darüber nach, wie langweilig es ist, einen Teil des Festplattenspeichers als Speicher zu verwenden, wenn der größte Teil des Speichers vorhanden ist. Wenn wir uns Linux ansehen Solange der Swap-Speicherplatz nicht verwendet wird, besteht kein Grund zur Sorge, dass zu wenig Speicher vorhanden ist. Wenn Sie häufig viel Swap verwenden, müssen Sie möglicherweise darüber nachdenken, physischen Speicher hinzuzufügen Erinnerung reicht.
------------ -------------------------------- --------------------------------------------------- -----------
Nächster Schritt
Ich habe festgestellt, dass der Speicher des Servers nur 1,9 GB groß ist, und verwende dann den Befehl top Um es zu überprüfen
Die erste Zeile von top ist: aktuelle Zeit; Anzahl der laufenden Benutzer; Die nächsten drei Werte sind die durchschnittliche Anzahl der Prozesse vor 1 Minute. Vor 5 Minuten und vor 15 Minuten bedeutet dies, dass die Auslastung zu hoch ist. Die Aufgaben in der zweiten Zeile sind: die Gesamtzahl der laufenden Prozesse; Schlafende Prozesse; die Anzahl der wiederhergestellten Prozesse: us: Benutzerraum belegt CPUsy:system Der Prozentsatz der CPU, der vom Kernelraum belegt wird Der Prozentsatz der CPU, der von Prozessen belegt ist, die ihre Priorität geändert haben.
Der Prozentsatz der CPU im Leerlauf.wa:IO wait. Der Prozentsatz der CPU, die von wartenden E/As belegt ist.
hi:Hardware IRQ. Die CPU, die von harten Interrupts belegt ist. Der Prozentsatz der Software-Interrupts vonsi:software Belegung des CPU-Prozentsatzes
st: die vom Hypervisor gestohlene Zeit
第五行(Swap):类似第四行,但反映着交换分区(Swap)的使用情况。交换分区(Swap)被频繁使用,可以看作物理内存不足而造成的
top 输出界面的顶端,也显示了系统整体的内存使用情况,这些数据跟 free 类似,我就不再重复解释。我们接着看下面的内容,跟内存相关的几列数据,比如 VIRT、RES、SHR 以及 %MEM 等。
这些数据,包含了进程最重要的几个内存使用情况,我们挨个来看。
除了要认识这些基本信息,在查看 top 输出时,你还要注意两点。
第一,虚拟内存通常并不会全部分配物理内存。从上面的输出,你可以发现每个进程的虚拟内存都比常驻内存大得多。
第二,共享内存 SHR 并不一定是共享的,比方说,程序的代码段、非共享的动态链接库,也都算在 SHR 里。当然,SHR 也包括了进程间真正共享的内存。所以在计算多个进程的内存使用时,不要把所有进程的 SHR 直接相加得出结果。
只是这样看 还是不行 感觉内存 不应该 占用很多 然后 使用命令 查看 当前系统有多少进程
ps -ef | wc -l
然后使用命令查看占用内存最大的500个进程:
ps -aux | sort -k4nr | head -n 500
截取部分 PHP的进程 占到了200个 每个都100多兆
解释一下含义
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 的配置文件
发现配置的 是 静态 配置的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-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 normale Benutzerdaten werden im Array gespeichert, was etwa 4472,8671875 KB entspricht.
Empfohlenes Lernen: „PHP-Video-Tutorial“
Das obige ist der detaillierte Inhalt vonWas tun, wenn zu viele PHP-Prozesse vorhanden sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!