linux – php-cgi进程的内存使用量正在稳步增长

我正在尝试在VPS上设置Web服务器.我的问题是php-cgi进程的内存使用量随着时间的推移而增加,即使网站根本没有收到任何流量. (暂时在防火墙后面)

VPS有360MB RAM.我正在使用Debian Lenny 32bit及其lighttpd和PHP5-cgi软件包.除了一些配置更改(下面列出),我正在使用Debian的库存设置.

该网站基于Drupal.使用Drupal的devel模块,我可以看出PHP脚本的内存使用量平均不到20KB,而且它永远不会超过8MB.

以下是ps aux输出的相关部分:

USER       PID %cpu %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
www-data 29871  0.0  1.7  54552  6368 ?        Ss   Aug12   0:00 /usr/bin/php-cgi
www-data 29873  0.0  7.4  65808 27468 ?        S    Aug12   0:00 /usr/bin/php-cgi
www-data 29874  0.0  3.7  55808 13736 ?        S    Aug12   0:00 /usr/bin/php-cgi
www-data 29875  0.0  4.3  58040 16204 ?        S    Aug12   0:00 /usr/bin/php-cgi
www-data 29876  0.0  4.4  57444 16288 ?        S    Aug12   0:00 /usr/bin/php-cgi
www-data 29877  0.0  1.7  54552  6368 ?        Ss   Aug12   0:00 /usr/bin/php-cgi
www-data 29879  0.0  9.6  67140 35684 ?        S    Aug12   0:26 /usr/bin/php-cgi
www-data 29880  0.0  6.6  59172 24492 ?        S    Aug12   0:23 /usr/bin/php-cgi
www-data 29881  0.0  7.1  59784 26388 ?        S    Aug12   0:22 /usr/bin/php-cgi
www-data 29882  0.0  7.4  60880 27440 ?        S    Aug12   0:23 /usr/bin/php-cgi

>让php-cgi这么大是正常的吗?
>是否可以根据设置估算php-cgi内存使用情况?
>任何减少php-cgi进程内存消耗的技巧?

搜索已知的内存泄漏错误并没有产生任何相关性.如果认的Debian软件包/配置有如此明显的内存泄漏,我会感到惊讶.同一主机上的其他用户没有此问题.

到目前为止我所做的是将PHP_FCGI_MAX_REQUESTS设置为一个较低的值,以便快速回收php-cgi进程.当我使用ab来模拟高负载时,这非常有效.进程在高于10MB之前快速死亡.但是,在中低负载下,所有进程都会稳定增长(由于负载平衡),并且大多数进程同时消耗28MB,这使我的VPS面临交换风险.请注意,即使没有任何流量,流程也会稳步增长.

我可以减少php-cgi进程的数量,但这感觉就像解决方法而不是修复.如果php-cgi通常像这样增长,我会感到惊讶.

另外,总结php-cgi进程的RSS总数给出:

$ps -C php-cgi -o RSS= | awk '{s+=$1}END{print s/1024}'
195.738

然而,free -m给出了以下输出

total       used       free     shared    buffers     cached
Mem:           360        351          8          0         33        190
-/+ buffers/cache:        127        232
Swap:          255          0        255

>我错过了什么吗?为什么使用的内存(没有缓冲区)低于主机上php-cgi进程的总驻留内存?

我有以下PHP扩展:

PHP5-CGI
PHP5常见
PHP5卷曲
PHP5-GD
PHP5-MysqL
PHP5-了XCache

xcache.size设置为24M.它曾经是32M,但减少它并没有帮助. xcache.var_size设置为0.其余插件使用库存配置. xcache管理页面显示xcache使用的不到1MB.

PHP的memory_limit设置为32M.

这是我的FastCGI配置:

fastcgi.server    = ( ".PHP" =>
  ((
    "bin-path" => "/usr/bin/php-cgi","socket" => "/tmp/PHP.socket","max-procs" => 2,"idle-timeout" => 20,"bin-environment" => (
      "PHP_FCGI_CHILDREN" => "4","PHP_FCGI_MAX_REQUESTS" => "1000"
    ),"bin-copy-environment" => (
      "PATH","SHELL","USER"
    ),"broken-scriptfilename" => "enable" 
  ))
)

我使用Debian附带的股票lighttpd.conf或多或少.

如果我能提供任何其他数据,请告诉我.

任何帮助表示赞赏.我一直试图解决这个问题好几天.我已经没想完了.

解决方法

尝试降低var_size.如果我们有64MB的价值,几个小时后就开始交换了很多,接下来的几个小时它就完全失效了.尝试将原始设置保持在32M,也许这应该对你有很大帮助 – 我们在 travel网站遇到了同样的问题Xcache仍然是很多有缺陷的软件:(

相关文章

Linux中的ARP防火墙主要用于防御ARP欺骗攻击,其效果取决于多...
insmod和modprobe加-f参数导致Invalid module format错误 这...
将ArchLinux安装到U盘 几个月前入门Arch的时候上网搜了不少安...
1、安装Apache。 1)执行如下命令,安装Apache服务及其扩展包...
一、先说一下用ansible批量采集机器信息的实现办法: 1、先把...
安装配置 1. 安装vsftpd 检查是否安装了vsftpd # rpm -qa | ...