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通常像这样增长,我会感到惊讶.
$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或多或少.
如果我能提供任何其他数据,请告诉我.
任何帮助表示赞赏.我一直试图解决这个问题好几天.我已经没想完了.