如何减少 CentOS 6.4 中的 php-fpm RAM 使用率?

如何减少 CentOS 6.4 中的 php-fpm RAM 使用率?

我已经在服务器上安装了 LEMP 堆栈。我的服务器有 1GB 的 RAM,没有负载。我已经安装了 php-fpm,它似乎占用了我服务器的大部分 RAM。

我使用以下命令来获取正在运行的程序列表:

ps aux

该命令产生的结果是:

[user@server]$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1  19232  1348 ?        Ss   Aug23   0:00 init
root         2  0.0  0.0      0     0 ?        S    Aug23   0:00 [kthreadd/145]
root         3  0.0  0.0      0     0 ?        S    Aug23   0:00 [khelper/145]
root       125  0.0  0.0  10640   476 ?        S<s  Aug23   0:00 /sbin/udevd -d
root       462  0.0  0.1 183552  1936 ?        Sl   Aug23   0:00 /sbin/rsyslogd
root       476  0.0  0.1  66256  1200 ?        Ss   Aug23   0:00 /usr/sbin/sshd
root       483  0.0  0.0  22136   988 ?        Ss   Aug23   0:00 xinetd -stayali
root       519  0.0  0.1  11304  1532 ?        S    Aug23   0:00 /bin/sh /usr/bi
mysql      726  0.0  4.6 781640 49200 ?        Sl   Aug23   3:30 /usr/libexec/my
root       765  0.0  0.0  66444   968 ?        Ss   Aug23   0:00 /usr/sbin/sasla
root       767  0.0  0.0  66444   660 ?        S    Aug23   0:00 /usr/sbin/sasla
root       784  0.0  0.2  82496  2360 ?        Ss   Aug23   0:07 sendmail: accep
smmsp      792  0.0  0.1  78228  2072 ?        Ss   Aug23   0:00 sendmail: Queue
root       802  0.0  0.4 278324  4472 ?        Ss   Aug23   0:11 php-fpm: master
nginx      804  0.0  5.5 305848 58388 ?        S    Aug23   0:18 php-fpm: pool w
nginx      805  0.0  5.4 305528 57432 ?        S    Aug23   0:18 php-fpm: pool w
nginx      806  0.0  5.4 304972 57440 ?        S    Aug23   0:19 php-fpm: pool w
nginx      807  0.0  5.9 308032 62004 ?        S    Aug23   0:19 php-fpm: pool w
nginx      808  0.0  5.2 298328 55292 ?        S    Aug23   0:19 php-fpm: pool w
root       818  0.0  0.4  96768  4812 ?        Ss   Aug23   0:00 nginx: master p
root       829  0.0  0.1  20412  1264 ?        Ss   Aug23   0:01 crond
nginx      852  0.0  5.3 299400 55724 ?        S    Aug23   0:18 php-fpm: pool w
nginx     1054  0.0  5.6 305744 59072 ?        S    Aug23   0:17 php-fpm: pool w
nginx     4211  0.0  5.8 308008 60992 ?        S    Aug23   0:17 php-fpm: pool w
nginx     4215  0.0  5.7 308332 60720 ?        S    Aug23   0:17 php-fpm: pool w
nginx     4216  0.0  5.6 305840 59300 ?        S    Aug23   0:18 php-fpm: pool w
root     13238  0.0  0.4  95924  4232 ?        Ss   19:41   0:00 sshd: user [pr
user    13242  0.0  0.1  95924  1828 ?        S    19:41   0:00 sshd: user@pts
user    13243  0.0  0.1  11440  1816 pts/0    Ss   19:41   0:00 -bash
nginx    13488  0.0  0.3  97184  3416 ?        S    21:07   0:00 nginx: worker p
nginx    13489  0.0  0.3  97184  3416 ?        S    21:07   0:00 nginx: worker p
nginx    13490  0.0  0.3  97448  4064 ?        S    21:07   0:00 nginx: worker p
nginx    13491  0.0  0.3  97184  3416 ?        S    21:07   0:00 nginx: worker p
user    13508  0.0  0.1  13372  1060 pts/0    R+   21:13   0:00 ps aux

正如您所看到的,php-fpm 进程正在使用大量 RAM。告诉我如何优化 php-fpm 并减少服务器的内存消耗。

答案1

php-fpm 默认情况下可以运行大量子服务器...每个子服务器可以占用 20-30 MB 的 RAM,这很容易累积起来...

最简单的做法是减少默认启动服务器数量,以及服务器的 php-fpm 配置中的最大服务器数量...

要编辑的文件通常是/etc/php-fpm.d/www.conf。小型网站的典型设置是

pm.max_children = 10
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 3

显然,您可能想要阅读文档(或者至少是默认配置文件中的注释),但是这些示例设置应该从大约 90-100MB 开始,并在所有子进程启动并运行时达到最大值大约 300-400MB。

根据您的需要,您应该适当地使用这些数字。(基于流量的测试配置和实际内存使用情况)。

答案2

每个进程约 60MB 并不是一个奇怪的值。

如果您需要消耗更少的内存,您可以减少池中的工作器数量。

答案3

  1. ps 无法准确显示使用了多少内存,请检查以下命令:

    http://www.pixelbeat.org/scripts/ps_mem.py

  2. 开始memory_limitphp.ini

答案4

对于列出的每个配置文件:

php --ini

逐个注释掉不使用的模块的扩展行:

; extension=redis.so

每次都重新启动 php-fpm。

此外,如果安装了 APC 或其他优化器,每个实例都会占用 N MB 的 RAM,如 apc.ini 中配置的那样。

相关内容