Debian x86_64 + Nginx + PHP5-FPM 优化

Debian x86_64 + Nginx + PHP5-FPM 优化

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

现在我有另一个 VPS(不同的托管公司),我也在nginx + php5-fpmDebian Lenny 上运行(x86_64)。系统是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

那么,问题是,有没有办法使用较少的内存?顺便说一句,我有 16 个核心,如果能充分利用它们就好了……

答案1

  • PHP, NGINX

由于您的 VPS 内存很少,所以在您使用完所有核心之前,您就会进行交换 - 忘掉它吧:运行 1 个 nginx 工作进程 - 这样就能够处理比您需要的更多的请求。

由于您很可能运行的是 Lenny 发行版的 PHP,因此其中编译了大量内容。重新编译 PHP 将为您节省一些 RAM。因此不会加载您不需要的扩展 - 检查 php.ini 中正在加载的内容。

PHP-FPM 将请求从队列发送给工作进程(循环),因此您可以根据需要将子进程数量减少到 3-4 个 - 如果有更多请求,它们只需等待轮到自己即可。

  • 其余的 vps

检查您正在运行哪些服务以及是否真的需要它们。默认安装包含很多东西

如果您正在运行 saslauthd 并且希望它继续运行,请务必添加一个 cron 作业以便每天重新启动它 - 它已经存在严重的内存泄漏很久了,我发现它在我的一个机器上在大约两周内膨胀到 1.5GB。

答案2

我不能 100% 确定是否可以减少 php5-fpm 的内存使用量,但是,如果你想在 nginx 中使用所有 16 个核心,请在 nginx.conf 中将 worker_processes 更改为 16

答案3

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

“x” 是您可以允许 php/fpm 使用的内存量,然后将 x 除以每个 php 脚本可能需要使用的内存量 (memory_limit),您就会得到 php-fpm“服务器”的数量(不包括任何操作码缓存或 php-fpm 的开销)。

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

不过,我猜多花几美元购买更多内存是值得的。

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

答案4

64 位系统比 32 位系统占用更多内存,这是很正常的,因为代码中几乎每个数字或指针都需要两倍以上的内存。你真的需要 64 位吗?

在同一台计算机上,严格受 CPU 限制的 64 位程序可以比 32 位程序运行得更快,但在您的环境下(RAM 非常少),程序使用的 RAM 越少越好,因为更多的 RAM 可以用于缓存。

我建议恢复到 32 位。

相关内容