我已经在服务器上安装了 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
ps 无法准确显示使用了多少内存,请检查以下命令:
开始
memory_limit
php.ini
答案4
对于列出的每个配置文件:
php --ini
逐个注释掉不使用的模块的扩展行:
; extension=redis.so
每次都重新启动 php-fpm。
此外,如果安装了 APC 或其他优化器,每个实例都会占用 N MB 的 RAM,如 apc.ini 中配置的那样。