避免PHP-FPM内存泄漏导致内存耗尽
程序员文章站
2022-04-19 16:04:57
...
php-FPM如果出现存存泄漏问题可能导致服务器内存不足从而导致服务器资源用尽了,这样就会导致网站无法访问了,下面一起来看一篇避免PHP-FPM内存泄漏导致内存耗尽的配置。
对于PHP-FPM多进程的模式,想要避免内存泄漏问题很简单,就是要让PHP-CGI在处理一定数量进程后退出即可。
否则PHP程序或第三方模块(如Imagemagick扩展)导致的内存泄漏问题会导致内存耗尽或不足。
php-fpm.conf中有相关配置:
请自行按需求配置pm.max_requests = 1024
实际上还有另一个跟它有关联的值max_children,这个是每次php-fpm会建立多少个进程,这样实际上的内存消耗是max_children*max_requests*每个请求使用内存
。
另外一些粗暴的方法包括建立cron kill掉占用内存过多的php-cgi,
- 检查php进程的内存占用,杀掉内存使用超额的进程
一般情况下,如果php-cgi进程占用超过1%的内存,就得考虑一下是否要杀掉它了。因为普通情况下,php-cgi进程一般占用0.2%或以下。
这里提供一个脚本供各位使用,就是放在cron任务里,每分钟执行一次。
使用crontab -e 命令,然后添加如下调度任务
* * * * * /bin/bash /usr/local/script/kill_php_cgi.sh
kill_php_cgi.sh
脚本如下
#!/bin/sh
#如果是要杀掉php-fpm的进程,下面的语句中php-cgi请改成php-fpm
pids=`ps -ef|grep php-cgi|grep -v "grep"|grep -v "$0"| awk '{print $2}'`
if [ "$pids" != "" ];then
for pid in $pids;
do
kill -9 $pid
done
fi
```
* 增加内存,将PHP_FCGI_MAX_REQUESTS的值设置成跟你内存总存储量相对应的值
* 优化程序,降低处理每次请求占用的内存大小
如果PHP-FPM能够提供配置子进程内存超过指定大小就被kill,那就省事多了
上一篇: Java 中可能会存在内存泄漏吗
下一篇: Java中会存在内存泄露吗?请简单描述。
推荐阅读
-
Android 避免内存泄漏
-
Nacos本地进行了远程配置而远程未配置相关信息而导致应用报内存泄漏问题的异常
-
解决Linux下php-fpm进程过多导致内存耗尽问题
-
Android Handler 避免内存泄漏之清空队列
-
讲述Sagit.Framework解决:双向引用导致的IOS内存泄漏(中)- IOS不为人知的Bug
-
讲述Sagit.Framework解决:双向引用导致的IOS内存泄漏(上)
-
未设置SWAP分区导致内存耗尽主机Hang死
-
怎样解决php-fpm在Linux下进程过多导致内存耗尽
-
javascript removeChild 导致的内存泄漏_javascript技巧
-
SwiftUI 内功之TextField和@State如何避免内存泄漏(格式化文本输入)