首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Debian 9,Apache 2,PHP7 -内存泄漏

Debian 9,Apache 2,PHP7 -内存泄漏
EN

Server Fault用户
提问于 2018-02-09 19:13:43
回答 1查看 878关注 0票数 1

我在Debian上和Apache和PHP7有个问题.它由apt自动配置..。我的脚本正在使用大量内存(限制-512 my )进行大量计算。但是我注意到每次运行不同参数的脚本时,/usr/sbin/apache2 -k start都会使用越来越多的内存.它似乎没有得到适当的释放。有什么办法解决吗?或者怎样才能搞清楚到底是什么原因造成的?

这个问题很严重,最终出现在Apache中的mmap() failed: [12] Cannot allocate memory和PHP中的PHP Fatal error: Out of memory中。使用了100%的内存(从未释放),无法再做任何事情。

它似乎不会扼杀连接后产生的新进程.

代码语言:javascript
复制
PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
12123 www-data   20   0  369M  117M  7272 S  0.0  *6.0*  0:18.40 /usr/sbin/apache2 -k start
12132 www-data   20   0  357M  105M  7272 S  0.0  *5.4*  0:17.96 /usr/sbin/apache2 -k start
12122 www-data   20   0  333M 84296  7860 S  0.0  *4.2*  0:18.35 /usr/sbin/apache2 -k start
12133 www-data   20   0  311M 61160  7272 S  0.0  *3.1* 0:08.00 /usr/sbin/apache2 -k start
12131 www-data   20   0  293M 42732  7272 S  0.0  *2.1*  0:17.70 /usr/sbin/apache2 -k start
12134 www-data   20   0  291M 40676  7272 S  0.0  *2.0*  0:08.32 /usr/sbin/apache2 -k start
12124 www-data   20   0  275M 25040  7900 S  0.0  *1.2*  0:16.19 /usr/sbin/apache2 -k start
12125 www-data   20   0  265M 13084  6768 S  0.0  *0.7*  0:00.01 /usr/sbin/apache2 -k start
12128 www-data   20   0  265M 13060  6708 S  0.0  *0.7*  0:00.01 /usr/sbin/apache2 -k start
12126 www-data   20   0  265M  9468  3332 S  0.0  *0.5*  0:00.00 /usr/sbin/apache2 -k start

*之间的值是来自htopMEM%。每一次新的计算都会产生新的过程。其他人使用越来越多的内存..。

apache2 -l

代码语言:javascript
复制
Compiled in modules:
  core.c
  mod_so.c
  mod_watchdog.c
  http_core.c
  mod_log_config.c
  mod_logio.c
  mod_version.c
  mod_unixd.c

a2query -M

代码语言:javascript
复制
prefork
EN

回答 1

Server Fault用户

发布于 2018-02-09 23:40:26

在使用mod_php和apache2预叉时,您看到的是正常行为。

当php脚本在预分叉的进程中运行时,在预分叉的apache进程中有类似于"PHP内存缓冲区“的东西。每当运行的脚本需要比已经分配的内存更多的内存时,它就会增长,但是只有当预分叉进程被回收(即重新启动)时,它才会缩小。

您可以通过将ServerLimitMaxClients设置为(system /phpmemory_limit)来缓解这个问题,这只会导致最多的预分叉进程数。这个数字乘以您的php memory_limit将被放入内存。

您也可以设置MaxRequestsPerChild 1,但这将对性能产生非常坏的影响。

从长期来看,您可能应该迁移到php,并仔细规划最大数量的php进程及其内存消耗。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/896576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档