我一直在四处寻找,但是没有成功并为我的案例寻找解决方案。
我注意到在我的EC2实例上运行PHP时需要大量内存(同时这似乎会增加HTTPD进程所需的内存,因为如果禁用PHP,HTTPD进程内存将会关闭扩展)
要执行简单的检查,我有Apache运行(HTTPD)和一个非常简单的php程序
<?php
while(true) {
sleep(1);
$x = 1;
}
然后,在一个单独的控制台上,我运行top
命令和SHIFT+m
按内存排序
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
31155 apache 20 0 936m 299m 27m S 0.0 7.6 0:00.48 httpd
31141 apache 20 0 935m 298m 27m S 0.0 7.5 0:00.41 httpd
31147 apache 20 0 936m 297m 26m S 0.0 7.5 0:00.41 httpd
31121 root 20 0 839m 294m 29m S 0.0 7.5 0:00.93 httpd
31505 ec2-user 20 0 630m 279m 16m S 0.0 7.1 0:00.81 php
31264 apache 20 0 847m 271m 6404 S 0.0 6.9 0:00.18 httpd
31266 apache 20 0 847m 271m 6404 S 0.0 6.9 0:00.18 httpd
31123 apache 20 0 1039m 271m 6400 S 0.0 6.9 0:00.30 httpd
31143 apache 20 0 847m 271m 6400 S 0.0 6.9 0:00.31 httpd
31145 apache 20 0 847m 271m 6400 S 0.0 6.9 0:00.30 httpd
31149 apache 20 0 847m 271m 6400 S 0.0 6.9 0:00.31 httpd
31151 apache 20 0 847m 271m 6400 S 0.0 6.9 0:00.31 httpd
31157 apache 20 0 847m 271m 6400 S 0.0 6.9 0:00.30 httpd
31261 apache 20 0 847m 271m 6244 S 0.0 6.9 0:00.17 httpd
您会注意到,尽管Apache服务刚刚启动并处于非活动状态,并且只是一个简单的PHP脚本,但它们都消耗了大量内存。
来自类似的问题How to optimize the php process memory usage?
我去了pmap -d 31505
我找到了两个主要条目
31505: php /home/ec2-user/infinite.php
Address Kbytes Mode Offset Device Mapping
0000000000400000 3044 r-x-- 0000000000000000 0ca:00001 php-5.5
...
00000000027a3000 265876 rw--- 0000000000000000 000:00000 [ anon ]
00007f9f1e249000 1028 rw--- 0000000000000000 000:00000 [ anon ]
...
00007f9f2de29000 32 rw--- 0000000000000000 000:00000 [ anon ]
00007f9f2de31000 103588 r---- 0000000000000000 0ca:00001 locale-archive
00007f9f3435a000 120 r-x-- 0000000000000000 0ca:00001 libselinux.so.1
00007f9f34378000 2044 ----- 000000000001e000 0ca:00001 libselinux.so.1
...
据此,我注意到一些[ anon ]
使用了265Mb而文件locale-archive
使用了103Mb
做了一些更多的研究,我对locale-archive
有了更多了解,我发现系统/usr/lib/local/locale-archive
上的文件大约是103Mb匹配。
我发现了另一个我尝试遵循的链接,以减少locale-archive
文件的大小,但我遇到了同一链接上提到的所有问题,并且无法调整其大小。<登记/>
(问题:/ usr / sbin / build-locale-archive:无法读取存档标题)
https://unix.stackexchange.com/questions/90006/how-do-i-reduce-the-size-of-locale-archive
因此,似乎介于此[ anon ]
和locale-archive
之间的某处导致PHP进程占用大量内存。
[ anon ]
以及如何减少它?locale-archive
的大小会有帮助吗?
如果是这样,我如何只使用glibc-common
等单一区域设置重新安装en
?我需要与至少10个进程并行运行PHP脚本
在尝试时,我注意到由于内存分配不足,许多进程无法启动
在试图找出这一点时,我注意到httdd
和php
进程只消耗了不真实的内存
执行free -m
收益
total used free shared buffers cached
Mem: 15042 14558 484 26 216 695
-/+ buffers/cache: 13645 1397
Swap: 0 0 0
所以,我几乎只有大约400Mb来运行这些脚本,这只允许我运行最多2个基于单个php脚本使用的默认294Mb,该脚本仅使用大约1kb的内存,但其余的是PHP过程本身。
现在,尽管httpd
占用了大部分内存,但它似乎是使用该服务启动的基础PHP
模块的间接结果。 (与我禁用PHP模块并且httpd
进程下降到他们使用的内存的1/3的测试相比)
所以,它确实看起来PHP
进程是责任者,受[ anon ]
的影响,间接受locale-archive
如果我可以让PHP进程不使用这么多内存,那么我不仅可以运行10个脚本(我可以运行20或30)而且没有问题,Apache甚至可以拥有更多内存来提供更多连接我想。