我的512MB Debian Rackspace VPS上的内存使用情况

您好我正在运行一个512MB的Debian VPS的Apache2 / PHP5 / MYSQL服务于一个WordPress的网站。 该网站非常繁忙,可能每天访问超过1000次。 博客是一个新闻博客,提供图片,文字和允许评论。 自从2天前搬到VPS以来,由于内存问题,网站已经停机了两次。 我已经运行了顶,得到这个:

Tasks: 93 total, 1 running, 92 sleeping, 0 stopped, 0 zombie Cpu(s): 2.3%us, 0.1%sy, 0.0%ni, 97.2%id, 0.2%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 517980k total, 458876k used, 59104k free, 12900k buffers Swap: 1044216k total, 9060k used, 1035156k free, 87592k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 14087 www-data 20 0 302m 42m 3880 S 11 8.3 0:03.67 apache2 14086 www-data 20 0 299m 38m 3896 S 5 7.7 0:03.56 apache2 13779 mysql 20 0 68240 11m 6572 S 1 2.3 0:03.93 mysqld 14455 john 20 0 19072 1316 1000 R 0 0.3 0:00.13 top 1 root 20 0 8356 604 572 S 0 0.1 0:00.42 init 

我试图优化Mysql和Apache,但是Apache似乎仍然占用了很多内存 – 每个进程有302M虚拟和42M。

  • 这是正常的吗?
  • 有什么我可以做的,以减lessApache的负载?
  • 移动到工人MPM有很大的不同?

谢谢

UPDATE

搬到工人mpm后,我发现当服务器非常闲置时,正在使用memeory。 但是,当我向网站发布故事时,这是从Top读取的数据 –

 Tasks: 237 total, 2 running, 230 sleeping, 0 stopped, 5 zombie Cpu(s): 3.0%us, 1.1%sy, 0.0%ni, 29.8%id, 66.0%wa, 0.0%hi, 0.0%si, 0.1%st Mem: 1042268k total, 764492k used, 277776k free, 6304k buffers Swap: 2096472k total, 1275928k used, 820544k free, 49472k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 13520 www-data 20 0 265m 50m 4852 R 10 5.0 0:00.60 php-fcgi-wrappe 13282 www-data 20 0 246m 28m 2576 D 5 2.8 0:00.96 php-fcgi-wrappe 13081 www-data 20 0 247m 29m 2620 D 4 2.9 0:00.45 php-fcgi-wrappe 953 mysql 20 0 198m 17m 2832 S 3 1.8 4:34.19 mysqld 13517 www-data 20 0 254m 40m 4620 S 3 4.0 0:00.46 php-fcgi-wrappe 13560 www-data 20 0 250m 36m 3380 S 1 3.6 0:00.32 php-fcgi-wrappe 13290 www-data 20 0 253m 35m 3712 D 1 3.5 0:01.08 php-fcgi-wrappe 13557 www-data 20 0 249m 36m 3300 S 1 3.5 0:00.32 php-fcgi-wrappe 13221 www-data 20 0 250m 9932 2008 D 1 1.0 0:00.68 php-fcgi-wrappe 13594 john 20 0 19208 1468 1000 R 1 0.1 0:00.05 top 655 root 20 0 9140 996 876 S 0 0.1 0:01.39 xe-daemon 13232 www-data 20 0 197m 2876 1008 D 0 0.3 0:00.59 php-fcgi-wrappe 13281 www-data 20 0 134m 1772 516 D 0 0.2 0:00.03 php-fcgi-wrappe 13294 www-data 20 0 196m 2748 924 D 0 0.3 0:00.44 php-fcgi-wrappe 13296 www-data 20 0 212m 2412 892 D 0 0.2 0:00.57 php-fcgi-wrappe 15262 www-data 20 0 482m 6128 1288 S 0 0.6 0:15.39 apache2 1 root 20 0 8356 600 572 S 0 0.1 0:01.02 init 

正如你所看到的,有很多进程正在运行,Apache只有一个小的6MB,PHP-FCGI-Wrapper相当大,并且有很多。 但有趣的是,我的整体空闲内存比系统运行很less或者什么都没有时多。 为什么是这样? 有没有其他的事情可以做,以减less正在使用的内存量? 我读过Nginx是另一种select,但我已经运行了W3 Total Cache插件,PHP APC,Mysql Querycaching和Cloudflare。 Nginx会帮助这个设置吗?

谢谢

是的,这很正常。 我假设你正在运行prefork mpm( mpm_prefork_module ),在这种情况下,每个Apache进程加载所有的库和模块。 你的第一步应该是把它们降到最低。 然后,您需要计算出您可以负载多less个Apache进程并适当地设置您的mpm限制。

假设您还没有这样做,您可能需要考虑使用worker mpm( mpm_worker_module ),但由于PHP不是线程安全的,因此需要额外的工作。 这通常意味着您需要以CGI的方式运行PHP(使用FastCGI之类的东西)。

我看到你在使用Debian。 Debian带有两个FastCGI模块,分别是libapache2-mod-fcgidlibapache2-mod-fastcgi 。 它们是二进制兼容的,我可以相信,但是fcgid更新,并且与suexec更好地工作。 所以你应该使用libapache2-mod-fcgid除非你知道你需要libapache2-mod-fastcgi出于某些特定的原因。 如果您阅读有关libapache2-mod-fastcgi示例,则可以使用libapache2-mod-fcgid

不要一次安装它们 – 你可以做,但没有意义,只会造成混乱。 你只需要一个。

基本上,Apache + PHP +的WordPress是一个巨大的内存猪,你需要积极实现一个低内存设置,使其在512MB的可靠工作。 如果你还没有这样做,你也应该尽可能的减lessmysql的内存占用。

Linux通常将数据caching到与Windows不同的地方,它将尽可能利用内存来caching数据,所以从顶部的信息可以看出,第一个贴图中的caching大小为87 MB,然后是49 MB在第二个,这是完全正常的,当一个程序需要更多的内存的时候,Linux将简单地从caching中删除一些数据,并给予程序的空闲内存,由于缓冲区允许顺利发生,所以除非它的caching被削减到一个非常小的数量上,否则我不会在这个问题上压力太大,但是从这些cgi进程的外观来看,你可能会从调整你的php安装一点,虽然这是特定版本,所以你会最好的谷歌search