2013-04-06 54 views
0

我需要一些帮助。目前,我有以下的包:高流量协助优化服务器

2048 MB 80GB RAID 10磁盘空间 4X CPU优先 5000 GB的带宽 CentOS的

(VPS-4) http://www.knownhost.com/vps_packages.html

我的VPS已经接收大量的流量。它有一天有100万的页面浏览量,甚至!

尽管很酷,但自从命中率大幅上升以来,我们一直受到困扰。

我们最初使用的是SuPHP,这是资源密集型的。服务器每隔几天就会关闭,我们会收到有关过度运行的自动电子邮件。

然后,我们切换到FastCGI。这一直运行良好,我们停止收到这些电子邮件。但是,在高峰时段,如果有很多人连接,那么网页将无法显示。您将不得不刷新页面几次才能显示(听起来好像所有连接插槽都被阻止)。

我们目前在此服务器上使用NGINX + Apache w/CPANEL + eAccelerator + FastCGI。

忽略当前的设置配置并记住我们正在使用的硬件,你们是否有任何建议的配置可能最适合支持所有这些命中?

请记住,大量的命中发生一个页面(不要问!)。该页几乎没有任何PHP(但部分动态,所以需要PHP),甚至不连接到数据库。

非常感谢。

+0

声音就像连接一样,直到线程变得可用。也许这个答案可以帮助http://serverfault.com/questions/191251/apache-maximum-number-of-threads – Bart 2013-04-06 20:58:27

回答

1

在整个过程中,我将修改nginx配置。 Apache可以保持原样。

步骤1:部署gzip压缩

该步骤是相当简单的 - 用gzip压缩输出。

gzip    on; 
gzip_min_length 1000; 
gzip_proxied  expired no-cache no-store private auth; 
gzip_types  text/plain application/xml application/json; 

所有这将要做的就是启用gzip压缩:text/html的(默认),应用/ XML的应用程序/ JSON和文本/平原。顺便说一下,我假设你正在从CDN提供图片。如果不是,那么也为他们启用。

这应该会看到您已使用带宽的下降,但会略微降低CPU成本。但是,CPU几乎不是瓶颈 - 通常是带宽和磁盘I/O,尤其是在静态网站上,所以我们将继续努力。

步骤2(可选):删除阿帕奇如果你能

如果你只是提供静态内容,nginx的本身是值得拥有的。如果您已经使用fastCGI,请考虑PHP-FPM,它允许您缩短Apache的内存管理器。

步骤3:通过头

缓存这将迫使nginx的服务的所有网页的本地缓存的版本降低带宽使用。非常酷的东西,因为它会完全阻止客户重新下载他们已有的东西。

expires  24h; 
add_header Cache-Control public; 

这一步也将有一场突发的优势:Apache将获得较少的查询。

步骤4:在内存中的页面缓存

这一步将你的页面了磁盘I/O和内存。如果你有一个静态页面,你应该看到这样做的重大收益。 this question对此有很多。覆盖它需要很长的时间。

这将有两个优点:

  • nginx的会更频繁地从内存中加载,而不是查询阿帕奇,在轻负载减轻的Apache
  • 的Apache本身,由于这一点,就会从磁盘读取和叉工较少

一旦完成了这一切,您应该看到负载减少,可能足以降低Apache上的工作人员数量。

+0

谢谢你的一切!我会给它一个镜头。虽然获得大部分流量的网站确实有一些PHP,所以它不是100%静态的。不知道缓存是否会对此有所帮助。 – Mike 2013-04-06 21:20:41

+0

@Mike:只有在您知道PHP脚本详细说明的情况下,才能回答此问题。顺便说一下,这是我为客户提供的专业服务 - 分析和高效缓存。客户端通过头文件进行强制缓存,但也有很多人忘记了:你可以使用诸如** memcached **之类的工具进行应用内缓存,并且nginx也支持它,以减轻重复计算数据,例如。 – 2013-04-06 21:22:52

+0

PHP脚本只输出一些随机消息(由于人们可以在JS文件中查看所有消息,因此无法使用JavaScript来完成)。我们以这种方式设置消息,以便根据百分比显示消息。即消息#1显示1%的时间。消息#2可以显示30%的时间,等等。真的很简单,但不幸的是,我们没有一种合法的方式来不使用PHP。这有点像隐藏的促销代码,但偶尔会出现。 – Mike 2013-04-06 21:32:40