Maison > développement back-end > Problème PHP > Que faire s'il y a trop de processus php

Que faire s'il y a trop de processus php

藏色散人
Libérer: 2023-03-13 21:00:02
original
3668 Les gens l'ont consulté

Solutions à trop de processus php : 1. Utilisez la commande "ps -ef | wc -l" pour afficher les processus du système actuel ; 2. Utilisez ensuite les commandes associées pour afficher le processus qui occupe la plus grande quantité de mémoire. ; 3. Interrogez le processus php-fpm ; 4. Arrêtez le processus ou limitez la taille de la mémoire.

Que faire s'il y a trop de processus php

L'environnement d'exploitation de cet article : système linux5.9.8, version PHP5.5, ordinateur DELL G3

php Que dois-je faire s'il y a trop de processus ?

La mémoire est pleine à cause d'un trop grand nombre de processus php-fpm sur le serveur Linux :

Je suis allé travailler ce matin et j'ai constaté que le serveur MySQL s'était arrêté puis redémarré

Le journal des requêtes a montré que la mémoire était plein et le service mysql a été supprimé sur le serveur Linux. Si la mémoire est pleine, le processus sera automatiquement nettoyé pour empêcher le serveur de se bloquer. Si vous le souhaitez, celui qui occupe le plus de mémoire sera tué en premier. mon serveur occupe la plus grande mémoire, donc je vais tuer mysql

Puis redémarrer mysql pour interroger la mémoire

Parlons de la façon de vérifier la mémoire de Linux

Par exemple

Comme indiqué ci-dessous, des émissions gratuites l'utilisation actuelle de la mémoire, et -m signifie M octets pour afficher le contenu. Allons-y. Jetons un coup d'oeil.

$ 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
-----------------
Copier après la connexion

La première partie de la ligne Mem :

total 内存总数: 1002M
used 已经使用的内存数: 769M
free 空闲的内存数: 232M
shared 当前已经废弃不用,总是0
buffers Buffer 缓存内存数: 62M
cached Page 缓存内存数:421M
Copier après la connexion

Relation : total(1002M) = used(769M). ) + free(232M)

La deuxième partie (-/+ buffers/cache) :

(-buffers/cache) used内存数:286M (指的第一部分Mem行中的used - buffers - cached)
(+buffers/cache) free内存数: 715M (指的第一部分Mem行中的free + buffers + cached)
Copier après la connexion

On peut voir que -buffers/cache reflète la mémoire réellement consommée par le programme, tandis que +buffers/cache reflète la quantité totale de mémoire qui peut être appropriée.

La troisième partie fait référence à la partition swap. Je pense que tout le monde la comprend sans l'expliquer.

Je pense que tout le monde est encore confus après avoir lu ce qui précède. + buffers/Pourquoi sont utilisés et free dans les résultats du cache) si étranges ? En fait, on peut l'expliquer sous deux aspects. Pour le système d'exploitation, c'est un paramètre de Mem qui est tous utilisé, donc il le considère. gratuit Seulement 232.

pour les applications est (-/+ buffers/cach). Les buffers/cached sont également disponibles, car le buffer/cached est destiné à améliorer les performances d'exécution du programme. Lorsque le programme utilise de la mémoire, le buffer/cached sera utilisé rapidement. .

Donc, en regardant l'application, gratuite et utilisée (-/+ tampons/cache) sont les principales. Alors regardons simplement cela. En plus, je vais vous faire part d'un peu de bon sens afin de vous améliorer. accès au disque et à la mémoire, Linux Pour plus d'efficacité, Linux a réalisé de nombreuses conceptions soignées. En plus de la mise en cache dentry (utilisée dans VFS pour accélérer la conversion des noms de chemin de fichier en inodes), il adopte également deux méthodes de cache principales : Buffer Cache et Cache de pages. Le premier sert à lire et à écrire des blocs de disque, et le second à lire et à écrire des inodes de fichiers. Ces caches peuvent réduire efficacement la durée des appels système d'E/S (tels que lecture, écriture, getdents).

N'oubliez pas que la mémoire est destinée à l'utilisation et non à la visualisation. Contrairement à Windows, quelle que soit la quantité de mémoire physique réelle dont vous disposez, elle utilisera le disque dur pour échanger des fichiers à lire. C'est pourquoi Windows demande souvent la mémoire virtuelle. pour un espace insuffisant. Pensez-y, à quel point il est ennuyeux d'utiliser une partie de l'espace du disque dur comme mémoire alors qu'il y a encore la majeure partie de la mémoire. Comment le disque dur peut-il être plus rapide que la mémoire. Alors, quand on regarde Linux, comme. tant que l'espace de swap n'est pas utilisé, il ne vous inquiétez pas d'avoir trop peu de mémoire. Si vous utilisez souvent beaucoup de swap, vous devrez peut-être envisager d'ajouter de la mémoire physique. C'est également la norme pour Linux pour voir si le. la mémoire suffit.

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

Étape suivante

J'ai découvert que la mémoire du serveur n'est que de 1,9 Go, puis utilisez la commande top pour le vérifier

La première ligne du haut est : l'heure actuelle ; le nombre de jours d'exécution du système ; le nombre moyen d'utilisateurs ; les trois valeurs suivantes sont le nombre moyen de processus il y a 1 minute, Il y a 5 minutes et il y a 15 minutes. Lorsque cette valeur dépasse le nombre de processeurs, cela signifie que la charge est trop élevée

Les tâches de la deuxième ligne sont : le nombre total de processus en cours d'exécution ; processus en veille ; le nombre de processus arrêtés ; le nombre de processus restaurés. La troisième ligne de CPU(s) est :

us : l'espace utilisateur occupe le processeur

sy:system Le pourcentage de CPU occupé par l'espace du noyau

ni:niced Le pourcentage de CPU occupé par les processus qui ont changé de priorité

Le pourcentage de CPU inactif

wa:IO wait Le pourcentage de CPU occupé par IO en attente

hi:Hardware IRQ Le CPU occupé par les interruptions matérielles Le pourcentage de

si:software interruptions logicielles occupe le pourcentage du CPU

st : le temps volé par l'hyperviseur


La quatrième ligne Mem est : la mémoire totale utilisée ; la mémoire libre du tampon utilisé ;

第五行(Swap):类似第四行,但反映着交换分区(Swap)的使用情况。交换分区(Swap)被频繁使用,可以看作物理内存不足而造成的

top 输出界面的顶端,也显示了系统整体的内存使用情况,这些数据跟 free 类似,我就不再重复解释。我们接着看下面的内容,跟内存相关的几列数据,比如 VIRT、RES、SHR 以及 %MEM 等。

这些数据,包含了进程最重要的几个内存使用情况,我们挨个来看。

  • VIRT 是进程虚拟内存的大小,只要是进程申请过的内存,即便还没有真正分配物理内存,也会计算在内。
  • RES 是常驻内存的大小,也就是进程实际使用的物理内存大小,但不包括 Swap 和共享内存。
  • SHR 是共享内存的大小,比如与其他进程共同使用的共享内存、加载的动态链接库以及程序的代码段等。
  • %MEM 是进程使用物理内存占系统总内存的百分比。

除了要认识这些基本信息,在查看 top 输出时,你还要注意两点。

第一,虚拟内存通常并不会全部分配物理内存。从上面的输出,你可以发现每个进程的虚拟内存都比常驻内存大得多。

第二,共享内存 SHR 并不一定是共享的,比方说,程序的代码段、非共享的动态链接库,也都算在 SHR 里。当然,SHR 也包括了进程间真正共享的内存。所以在计算多个进程的内存使用时,不要把所有进程的 SHR 直接相加得出结果。

只是这样看 还是不行 感觉内存 不应该 占用很多 然后 使用命令 查看 当前系统有多少进程

ps -ef  | wc -l
Copier après la connexion

然后使用命令查看占用内存最大的500个进程:

ps -aux | sort -k4nr | head -n 500
Copier après la connexion

截取部分 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:所执行的指令
Copier après la connexion

查询PHP-fpm 总进程数

pstree|grep php-fpm
Copier après la connexion

然后 查询 php-fpm 进程

ps -ef|grep php-fpm
Copier après la connexion

发现PHP起了四个主进程 这里截取了三个

然后看的PHP 的配置文件

发现配置的 是 静态 配置的50个进程 四个主进程 每个配50个子进程 就200多个进程 进程太多了 平时的话 一般就六七个进程在处理 修改 进程数量 把50 改成10 这个进程数量 根据自己服务器的内存大小 来设置

查看当前php-fpm进程的内存占用情况及启动时间,命令如下:

ps -e -o &#39;pid,comm,args,pcpu,rsz,vsz,stime,user,uid&#39;|grep www|sort -nrk5
Copier après la connexion

查看当前php-fpm进程平均占用内存情况,一般来说一个php-fpm进程占用的内存为30-40MB,命令如下:

ps --no-headers -o "rss,cmd" -C php-fpm | awk &#39;{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }&#39;
Copier après la connexion

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

步骤

先 查找 然后 杀死

ps aux |grep php
Copier après la connexion
kill 21605 (进程pid)
Copier après la connexion

检测

启动

./php-fpm -y /usr/local/php/etc/php-fpm.conf
Copier après la connexion

重启完 内存就降下来了

然后就事查找问题 猜测是内存泄露 但是不确定是哪里 对一些感觉有问题的地方 加上了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 éléments de données utilisateur ordinaires sont stockés dans le tableau, représentant environ 4472,8671875 Ko

Apprentissage recommandé : "Tutoriel vidéo PHP"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
php
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal