苦于内存占用高,站点时不时 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 生成。
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
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
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
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 系统的内存占用低,还是其它什么原因?
1
nowheretoseek 2018-10-08 12:16:44 +08:00
@Livid 麻烦 Livid 把这个贴子挪到 qna 节点可以吗?这是个技术咨询贴,可能因为关键词被放到这了,没人看得到了,谢谢!还有不知为何,发布过的主题那里怎么看不到呢?
|
2
helloiac OP 似乎部分可以用 32 - 64 位的差异解释,可是后面三台 64 位的差得也挺多的
|
3
msg7086 2018-10-09 00:14:46 +08:00
32/64 可能性大。内存占用和机器配置有啥关系?你配个 128G 的机器,程序就不吃内存了吗。
另外 prefork 本身内存占用就非常高吧,时不时挂掉很正常吧?低端机我建议试试 nginx。 |
5
kljsandjb 2018-10-09 09:13:53 +08:00 via iPhone
内存不管多大都是一种稀缺资源
|