Debian x86_64 + Nginx + PHP5-FPM优化

我曾经有一个来自Linode的VPS(512MB),我正在Debian Lenny( i686 )上运行nginx + php5-fpm (随php5.3.3提供)。 总内存使用量约为90-100MB

现在我有另一个VPS(不同的托pipe公司),我也在Debian Lenny( x86_64 )上运行nginx + php5-fpm 。 该系统是64位的,所以内存使用率现在更高,大约210-230MB ,我认为是太多了。

这是我的php5-fpm.conf:

 pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 2 pm.max_spare_servers = 5 pm.max_requests = 300 

这是top命令告诉我的:

 top - 15:36:58 up 3 days, 16:05, 1 user, load average: 0.00, 0.00, 0.00 Tasks: 209 total, 1 running, 208 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.0%sy, 0.0%ni, 99.9%id, 0.1%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 532288k total, 469628k used, 62660k free, 28760k buffers Swap: 1048568k total, 408k used, 1048160k free, 210060k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 22806 www-data 20 0 178m 67m 31m S 1 13.1 0:05.02 php5-fpm 8980 mysql 20 0 241m 55m 7384 S 0 10.6 2:42.42 mysqld 22807 www-data 20 0 162m 43m 22m S 0 8.3 0:04.84 php5-fpm 22808 www-data 20 0 160m 41m 23m S 0 8.0 0:04.68 php5-fpm 25102 www-data 20 0 151m 30m 21m S 0 5.9 0:00.80 php5-fpm 10849 root 20 0 44100 8352 1808 S 0 1.6 0:03.16 munin-node 22805 root 20 0 145m 4712 1472 S 0 0.9 0:00.16 php5-fpm 21859 root 20 0 66168 3248 2540 S 1 0.6 0:00.02 sshd 21863 root 20 0 66028 3188 2548 S 0 0.6 0:00.06 sshd 3956 www-data 20 0 31756 3052 928 S 0 0.6 0:06.42 nginx 3954 www-data 20 0 31712 3036 928 S 0 0.6 0:06.74 nginx 3951 www-data 20 0 31712 3008 928 S 0 0.6 0:06.42 nginx 3957 www-data 20 0 31688 2992 928 S 0 0.6 0:06.56 nginx 3950 www-data 20 0 31676 2980 928 S 0 0.6 0:06.72 nginx 3955 www-data 20 0 31552 2896 928 S 0 0.5 0:06.56 nginx 3953 www-data 20 0 31552 2888 928 S 0 0.5 0:06.42 nginx 3952 www-data 20 0 31544 2880 928 S 0 0.5 0:06.60 nginx 

那么,问题是有没有办法使用更less的内存? 顺便说一句,我有16个核心,这将是很好的利用他们…

  • PHP,NGINX

有了小内存,你的VPS将会交换很久,然后才能使用所有内核 – 忘记它吧:运行1个nginx工作进程 – 将能够处理WAY多于你需要的请求。

由于您最有可能从Lenny发行版运行PHP,因此编译了很多东西。 重新编译PHP将为您节省一些RAM。 所以不会加载你不需要的扩展 – 在php.ini中检查正在加载的内容。

PHP-FPM将队列中的请求发送给工作人员(循环赛),因此如果必须的话,您可以将subprocess的数量减less到3-4个 – 如果有更多的请求,他们将等待轮到他们。

  • 其他的VPS

检查你正在运行的服务,如果你真的需要它们。 默认安装包括很多东西

如果你有saslauthd正在运行,并且你想运行它,那么一定要添加一个cron作业,每天都会重新启动它 – 现在已经有一个令人讨厌的内存泄漏,我已经看到它膨胀到1.5GB左右几个星期在我的一个盒子里。

我并不是100%确定要减lessphp5-fpm的内存使用量,但是,如果您想要将所有16个内核与nginx一起使用,请将nginx.conf中的worker_processes改为16

您可以降低php-fpm服务器的数量,或者减lessphp可以使用的内存量。

“x”是你可以允许php / fpm使用的内存数量,然后用x除以每个php脚本可能需要使用的内存量(memory_limit),并且你有一些php-fpm“服务器”(不包括任何操作码caching或由php-fpm开销)。

例如:如果你可以让它使用最大的256M,并且每个脚本被限制为64M,那么'256/64 = 4'的php-fpm服务器。

我的猜测是,多花一些额外的美元更多的内存是值得每一分钱,但。

参考文献: http : //www.php.net/manual/en/ini.core.php#ini.memory-limit

这是正常的,64位系统使用比32位更多的内存,因为几乎所有的数字或指针代码将需要两倍多。 你真的需要64位?

在同一台计算机上严格限制CPU的64位程序可能比32位的程序快,但是在你的情况下(RAM非常less),RAM程序使用的越less越好,因为它可以用于caching。

我build议回到32位。