Apache每个进程的吞吐量超过50 Mb

我使用debian + apache2 + php(如mod_apache)/ 786Mb内存运行VPS

问题是我一直在耗尽内存。

当我运行“top”命令时,它显示了大约10个apache2进程 – 并且每个进程都占用大于50Mb的内存! 我认为每个过程都太过分了,对吗? 什么可以导致它?

我正在运行几个网站,每天有大约1000次点击和几个很less访问的WordPress博客。

我访问量最大的网站之一有很多中等大小的图像 – 会不会是一个问题?

更新 (我正在添加进程表):

top - 16:19:52 up 1:55, 1 user, load average: 0.05, 0.51, 0.80 Tasks: 35 total, 2 running, 33 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 786432k total, 786432k used, 0k free, 0k buffers Swap: 0k total, 0k used, 0k free, 0k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 15 0 10308 740 620 S 0.0 0.1 0:00.71 init 9728 root 18 0 62184 1404 968 S 0.0 0.2 0:00.12 rsyslogd 9741 root 16 0 48860 1204 704 S 0.0 0.2 0:00.16 sshd 9763 root 15 0 193m 10m 5856 S 0.0 1.4 0:00.32 apache2 9773 root 15 0 66948 3376 2448 S 0.0 0.4 0:00.43 sshd 9776 bind 25 0 118m 12m 2624 S 0.0 1.6 0:00.01 named 9787 root 15 0 12372 644 460 S 0.0 0.1 0:00.02 dovecot 9813 root 18 0 71128 3004 2292 S 0.0 0.4 0:00.00 dovecot-auth 10060 Debian-e 15 0 42712 996 604 S 0.0 0.1 0:00.00 exim4 10065 nobody 15 0 21276 1432 696 S 0.0 0.2 0:00.02 memcached 10069 mongodb 18 0 116m 15m 4520 S 0.0 2.0 0:03.37 mongod 10076 dovecot 15 0 14216 2000 1604 S 0.0 0.3 0:00.01 imap-login 10117 root 19 0 17320 1448 1148 S 0.0 0.2 0:00.00 mysqld_safe 10157 mysql 15 0 200m 49m 6316 S 0.0 6.5 0:10.69 mysqld 10158 root 18 0 3776 596 504 S 0.0 0.1 0:00.00 logger 10165 root 15 0 42204 2044 1404 S 0.0 0.3 0:00.10 sftp-server 10235 proftpd 18 0 64224 1556 592 S 0.0 0.2 0:00.00 proftpd 11281 root 18 0 18544 928 712 S 0.0 0.1 0:00.01 cron 13549 root 15 0 66220 3172 2448 S 0.0 0.4 0:00.05 sshd 13551 root 15 0 42080 1888 1400 S 0.0 0.2 0:00.01 sftp-server 13560 www-data 15 0 227m 42m 5572 S 0.0 5.5 0:07.49 apache2 15702 root 15 0 66064 3132 2472 R 0.0 0.4 0:00.22 sshd 15849 root 15 0 17452 1700 1244 S 0.0 0.2 0:00.00 bash 20348 dovecot 15 0 14208 1988 1596 S 0.0 0.3 0:00.00 pop3-login 20468 root 15 0 18820 1196 940 R 0.0 0.2 0:01.56 top 21788 www-data 15 0 236m 51m 4164 S 0.0 6.8 0:06.18 apache2 21972 www-data 15 0 232m 48m 4044 S 0.0 6.3 0:07.14 apache2 21973 www-data 18 0 230m 46m 4672 S 0.0 6.1 0:01.82 apache2 26321 www-data 15 0 227m 43m 4060 S 0.0 5.6 0:00.76 apache2 26335 www-data 15 0 229m 46m 4776 S 0.0 6.0 0:00.44 apache2 26336 www-data 15 0 232m 49m 4844 S 0.0 6.4 0:01.37 apache2 26337 www-data 15 0 227m 43m 4148 S 0.0 5.6 0:00.64 apache2 26340 www-data 15 0 227m 43m 4104 S 0.0 5.6 0:00.46 apache2 26341 www-data 18 0 231m 48m 4596 S 0.0 6.3 0:00.44 apache2 27983 root 15 0 106m 8492 6192 S 0.0 1.1 0:00.10 ispmgr 

我已经将memory_get_peak_usage()添加到每个网站的页脚,并且我发现WordPress使用> 37Mb来显示网站的主页。

同时,我自己写的没有任何框架或CMS(非常复杂的站点,但比WordPress更简洁的代码)的其他站点仅使用0.9 Mb的内存。

WordPress非常饿。

首先。 786mb是一个非常小的服务器。 我想这是托pipe服务最小的内存足迹,旨在让你去,但目的是让你用尽内存时有用的东西。 我猜他们的营销模式只是工作:)

其次,你是否确定每个过程使用50MB? 记住,Apache是​​一个分叉的服务器,所以很多subprocess可以看起来很大,但实际上是共享内存。 您可能想要了解虚拟内存,保留内存和共享内存之间的差异:

http://mugurel.sumanariu.ro/linux/the-difference-among-virt-res-and-shr-in-top-output/

简而言之,它就是你想要观看的“top”输出中的“res”列,也就是每个额外的apache进程所花费的额外物理内存的数量。

图像不是问题,Apache可以整天提供服务,而不会影响其内存模型。

他们每个都需要> 50Mb的内存

没有。 像那么简单就好了。 我有一个快速的谷歌find一些关于Linux上的内存pipe理的链接,但是互联网上有很多糟糕的信息。 虽然这种描述对于一个进程的单个实例是可行的(如果不准确的话),但是自分支守护进程的图像是非常不同的。

尝试测量实际的内存使用情况是漫长而复杂的。 查看“free”的输出并比较运行的httpd进程的数量要简单得多 – 尽pipe在这种情况下,如果stream量很低,可能需要重新configuration服务器以减less空闲httpd进程的数量。

我有一个1Gb的农场,通过Apache / PHP可以轻松处理200多个客户。 虽然很多将取决于你的应用程序的性质,我当然不会期望与11日内存不足。

OTOH我没有在同一个盒子上运行mongo,exim,dovecot,bind,memcache,mysql和ftp服务器。

这是对任何使用Apache PHP5 DSO模块解释器运行的资源密集型PHP应用程序的标准观察。

Magento是世界上最知名的资源pipe理公司,它非常擅长testing并certificate您需要安装Fast-CGI来停止将Apache转换为非常低效的PHP解释器,或者更好地转换到LiteSpeed和lsphp5以提高速度和效率。

WordPress和Joomla都属于这一类,需要给予足够的内存和一个高效的服务器平台,这个平台已经超越了通常在便宜的虚拟主机上获得的OEM开箱即用的安装。