关于 Apache 的内存占用的疑惑,附多个 vps 的比较数据

2018-10-08 11:18:19 +08:00
 helloiac

苦于内存占用高,站点时不时 down 掉,比较了 4 几台 VPS 上的 apache2 进程的内存占用,发现差别很大。希望了解原因,并都能达到最低机器的水平,所以发帖求教。

环境

vps 都是 1G 内存,指标硬件基本无差异。都是 apache2+mysql+php-fpm 的栈。 apache2 都是 2.4.34 ,都是 mpm-prefork 工作模式,启用的 module 都是 35 个左右,差别不超过 2 个。 mpm-prefork 的配置都是默认的,也就是:

<IfModule mpm_prefork_module>
        StartServers                     5
        MinSpareServers           5
        MaxSpareServers          10
        MaxRequestWorkers         150
        MaxConnectionsPerChild   0
</IfModule>

内存差异

后面的进程数据都是 ps -eo rss,pmem,pcpu,vsize,args | sort -k 1 -r -n 生成的,内存数据是 free -m 生成。

机器 1,阿里云,34 个 module:

Ubuntu 16.04.5 LTS / 4.4.0-137-generic / i686

166932 16.3 0.0 577508 /usr/sbin/mysqld
46872  4.5  0.0  83148 /usr/sbin/apache2 -k start
46440  4.5  0.0  83316 /usr/sbin/apache2 -k start
46356  4.5  0.0  83004 /usr/sbin/apache2 -k start
46036  4.4  0.0  83164 /usr/sbin/apache2 -k start
46016  4.4  0.0  83244 /usr/sbin/apache2 -k start
45996  4.4  0.0  83256 /usr/sbin/apache2 -k start
45916  4.4  0.0  83076 /usr/sbin/apache2 -k start
45672  4.4  0.0  82860 /usr/sbin/apache2 -k start
45580  4.4  0.0  83092 /usr/sbin/apache2 -k start
45448  4.4  0.0  83188 /usr/sbin/apache2 -k start
44544  4.3  0.0  48192 /usr/sbin/apache2 -k start
43840  4.2  0.0 152732 php-fpm: pool www
40232  3.9  0.0 142440 php-fpm: pool www
29996  2.9  0.0 140120 php-fpm: pool www
15396  1.5  0.0 136824 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)

              total        used        free      shared  buff/cache   available
Mem:            999         352         444          47         203         455
Swap:             0           0           0

机器 2,vultr,37 个 module:

Ubuntu 16.04.5 LTS / 4.15.14-041514-generic / x86_64 相比阿里云多出了 cgi_module headers_module status_module。

137956 13.6 0.0 1107788 /usr/sbin/mysqld
136640 13.5 0.0 502656 php-fpm: pool www
110928 10.9 0.0 478908 php-fpm: pool www
84540  8.3  0.0 223332 /usr/sbin/apache2 -k start
84516  8.3  0.0 222760 /usr/sbin/apache2 -k start
84488  8.3  0.0 222796 /usr/sbin/apache2 -k start
84444  8.3  0.0 222784 /usr/sbin/apache2 -k start
84196  8.3  0.0 222744 /usr/sbin/apache2 -k start
83780  8.3  0.0 223416 /usr/sbin/apache2 -k start
81348  8.0  0.0 222956 /usr/sbin/apache2 -k start
81228  8.0  0.0 222844 /usr/sbin/apache2 -k start
79884  7.9  0.0 188560 /usr/sbin/apache2 -k start
47208  4.6  0.0 411756 php-fpm: pool www
16652  1.6  0.0 377384 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)

              total        used        free      shared  buff/cache   available
Mem:            985         726          63          47         194          50
Swap:             0           0           0

机器 3,digitalocean,35 个 module

Ubuntu 16.04.5 LTS / 4.18.7-041807-generic / x86_64 相比阿里云多处了 status_module

184480 18.2 0.0 1146780 /usr/sbin/mysqld
70472  6.9  0.0 204352 /usr/sbin/apache2 -k start
70448  6.9  0.0 204468 /usr/sbin/apache2 -k start
70428  6.9  0.0 204284 /usr/sbin/apache2 -k start
70396  6.9  0.0 204300 /usr/sbin/apache2 -k start
70328  6.9  0.0 204096 /usr/sbin/apache2 -k start
70300  6.9  0.0 204104 /usr/sbin/apache2 -k start
70260  6.9  0.0 204164 /usr/sbin/apache2 -k start
70256  6.9  0.0 203920 /usr/sbin/apache2 -k start
70232  6.9  0.0 204032 /usr/sbin/apache2 -k start
70220  6.9  0.0 204004 /usr/sbin/apache2 -k start
69064  6.8  0.0 169360 /usr/sbin/apache2 -k start
46772  4.6  0.0 379108 php-fpm: pool www
44524  4.4  0.0 377092 php-fpm: pool www
43116  4.2  0.0 378404 php-fpm: pool www
16876  1.6  0.0 296200 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)

              total        used        free      shared  buff/cache   available
Mem:            985         592          65          43         327         160
Swap:             0           0           0

机器 4,linode,35 个 module

Ubuntu 16.04.5 LTS / 4.15.13-x86_64-linode106 / x86_64 同上,相比阿里云多了 status_module

143724 14.3 0.0 1108572 /usr/sbin/mysqld
70484  7.0  0.0 204408 /usr/sbin/apache2 -k start
70324  7.0  0.0 204224 /usr/sbin/apache2 -k start
70312  7.0  0.0 204400 /usr/sbin/apache2 -k start
70196  6.9  0.0 204208 /usr/sbin/apache2 -k start
70160  6.9  0.0 204484 /usr/sbin/apache2 -k start
70112  6.9  0.0 204048 /usr/sbin/apache2 -k start
70096  6.9  0.0 203836 /usr/sbin/apache2 -k start
70084  6.9  0.0 204088 /usr/sbin/apache2 -k start
69988  6.9  0.0 204472 /usr/sbin/apache2 -k start
69984  6.9  0.0 203888 /usr/sbin/apache2 -k start
68644  6.8  0.0 169364 /usr/sbin/apache2 -k start
39592  3.9  0.0 398820 php-fpm: pool www
38028  3.7  0.0 399008 php-fpm: pool www
37960  3.7  0.0 398840 php-fpm: pool www
11148  1.1  0.0 316932 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)

              total        used        free      shared  buff/cache   available
Mem:            979         499         110          51         370         380
Swap:           255          68         187

结果就是,访问量最大的那台阿里云的机器 apache2 内存占用反而最低,我也注意到了后面三台都有 status_module,但是 disable 之后,其内存占用并无什么差别。

实在没发现其它什么可能导致阿里云内存占用最低的配置,难道我该认为阿里云的机器的实际配置最好吗?还是 32 系统的内存占用低,还是其它什么原因?

303 次点击
所在节点    VPS
5 条回复
nowheretoseek
2018-10-08 12:16:44 +08:00
@Livid 麻烦 Livid 把这个贴子挪到 qna 节点可以吗?这是个技术咨询贴,可能因为关键词被放到这了,没人看得到了,谢谢!还有不知为何,发布过的主题那里怎么看不到呢?
helloiac
2018-10-08 15:25:32 +08:00
似乎部分可以用 32 - 64 位的差异解释,可是后面三台 64 位的差得也挺多的
msg7086
2018-10-09 00:14:46 +08:00
32/64 可能性大。内存占用和机器配置有啥关系?你配个 128G 的机器,程序就不吃内存了吗。

另外 prefork 本身内存占用就非常高吧,时不时挂掉很正常吧?低端机我建议试试 nginx。
helloiac
2018-10-09 01:02:25 +08:00
@msg7086 已经换 event 了,内存占用好了不少。
kljsandjb
2018-10-09 09:13:53 +08:00
内存不管多大都是一种稀缺资源

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/495520

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX