我在Debian上和Apache和PHP7有个问题.它由apt自动配置..。我的脚本正在使用大量内存(限制-512 my )进行大量计算。但是我注意到每次运行不同参数的脚本时,/usr/sbin/apache2 -k start都会使用越来越多的内存.它似乎没有得到适当的释放。有什么办法解决吗?或者怎样才能搞清楚到底是什么原因造成的?
mmap() failed: [12] Cannot allocate memory和PHP中的PHP Fatal error: Out of memory中。使用了100%的内存(从未释放),无法再做任何事情。。
它似乎不会扼杀连接后产生的新进程.
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*之间的值是来自htop的MEM%。每一次新的计算都会产生新的过程。其他人使用越来越多的内存..。
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.cprefork发布于 2018-02-09 23:40:26
在使用mod_php和apache2预叉时,您看到的是正常行为。
当php脚本在预分叉的进程中运行时,在预分叉的apache进程中有类似于"PHP内存缓冲区“的东西。每当运行的脚本需要比已经分配的内存更多的内存时,它就会增长,但是只有当预分叉进程被回收(即重新启动)时,它才会缩小。
您可以通过将ServerLimit和MaxClients设置为(system /phpmemory_limit)来缓解这个问题,这只会导致最多的预分叉进程数。这个数字乘以您的php memory_limit将被放入内存。
您也可以设置MaxRequestsPerChild 1,但这将对性能产生非常坏的影响。
从长期来看,您可能应该迁移到php,并仔细规划最大数量的php进程及其内存消耗。
https://serverfault.com/questions/896576
复制相似问题