如何识别PHP进程内存问题并进行优化(EC2)?

如何识别PHP进程内存问题并进行优化(EC2)?,php,apache,memory,amazon-ec2,Php,Apache,Memory,Amazon Ec2,我一直在四处寻找,但没有成功,也没有为我的案例找到解决方案 我注意到,在我的EC2实例上运行PHP时,它需要大量内存(这同时似乎会缓冲HTTPD进程所需的内存,因为如果禁用PHP扩展,HTTPD进程内存将下降) 为了执行一个简单的检查,我运行了Apache(HTTPD)和一个非常简单的php程序 <?php while(true) { sleep(1); $x = 1; } 您会注意到,尽管Apache服务刚刚启动且处于非活动状态,并且只有一个简单的php脚本,但它们都在消耗

我一直在四处寻找,但没有成功,也没有为我的案例找到解决方案

我注意到,在我的EC2实例上运行PHP时,它需要大量内存(这同时似乎会缓冲HTTPD进程所需的内存,因为如果禁用PHP扩展,HTTPD进程内存将下降)

为了执行一个简单的检查,我运行了Apache(HTTPD)和一个非常简单的php程序

<?php
while(true) {
   sleep(1);
   $x = 1;
}
您会注意到,尽管Apache服务刚刚启动且处于非活动状态,并且只有一个简单的php脚本,但它们都在消耗大量内存

从一个类似的问题

我去运行了
pmap-d31505
,找到了两个主要条目

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
...
从这里,我可以注意到265Mb被一些
[anon]
使用,103Mb被一个文件
区域设置存档使用

通过进一步的研究,我对
locale archive
有了更多的了解,我在系统上找到了文件
/usr/lib/local/locale archive
,该文件大约有103Mb,与之匹配

我找到了另一个链接,我试图按照该链接缩小
区域设置存档文件的大小,但在同一链接上遇到了所有问题,无法调整其大小。
(问题:/usr/sbin/build locale archive:无法读取归档头)

因此,似乎介于这个
[anon]
区域设置存档的大小之间的某个地方是导致PHP进程消耗大量内存的原因

问题
  • 什么是
    [anon]
    以及如何减少它
  • 减小
    区域设置存档的大小是否有帮助?
    如果是这样的话,我如何只使用像
    en
    这样的单一语言环境重新安装
    glibc common
这种需要的原因是什么 我需要用至少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的内存来运行这些脚本,基于单个php脚本使用的默认294Mb内存,我最多只能运行2个脚本,该脚本只使用大约1kb的内存,但其余的是php进程本身

现在,尽管
httpd
消耗了大部分内存,但它似乎是该服务启动的底层
PHP
模块的间接结果。(与我禁用PHP模块的测试相比,
httpd
进程占用的内存减少了1/3)

因此,
PHP
进程显然是罪魁祸首,它受到
[anon]
是什么的影响,并间接受到
区域设置存档的大小的影响


如果我能让PHP进程不使用太多内存,那么我不仅可以毫无问题地运行10个脚本(我可以运行20个或30个),而且Apache甚至可以有更多内存来处理更多的连接。

你想解决什么问题?你的内存用完了吗?你为什么认为这是一个问题?不要试图优化一些实际上不是问题的东西。好问题,我在最后添加了一个额外的部分来解释我为什么要解决这个问题并进行优化。可能重复
             total       used       free     shared    buffers     cached
Mem:         15042      14558        484         26        216        695
-/+ buffers/cache:      13645       1397
Swap:            0          0          0