我需要为一个承受巨大负载的网站找到解决方案。该网站在高峰时段可同时连接约 500 个,每天的点击量约为 42000 次。
这是一个基于 wordpress 的网站,与 vbulletin 论坛连接,内容丰富,结构相当复杂,大量使用数据库。我已经实现了代码级全页缓存(没有这个,服务器就会崩溃),并配置了所有其他缓存指令,并结合了 css 文件等,以尽可能限制 http 请求。
我需要了解是否可以通过软件完成更多工作,或者服务器的负载是否太大而无法处理并需要升级,因为服务器在高峰时段偶尔会出现宕机。
现在无法访问服务器,但它是一台专用的 CentOS 机器(我认为是 4GB 内存,不能说是什么 CPU)运行 apache/mysql。
那么回到主要问题:我怎么知道用户是否太多了?
编辑
我查看了日志,发现error.log
昨天的宕机是由于 Apache 分段错误造成的:
[Mon Apr 19 18:26:51 2010] [notice] child pid 4825 exit signal Segmentation fault (11)
[Mon Apr 19 18:26:53 2010] [notice] child pid 4794 exit signal Segmentation fault (11)
[Mon Apr 19 18:27:08 2010] [notice] child pid 4595 exit signal Segmentation fault (11)
[Mon Apr 19 18:27:11 2010] [notice] child pid 4826 exit signal Segmentation fault (11)
.....
我怎样才能知道这个段错误的原因是什么?
答案1
当你找不到需要优化的东西时,它就太多了。尝试查看负载高时是否受到 CPU 或 I/O 限制 - 这决定了下一步该去哪里。如果是 MySql 拖慢了你的速度,你可以通过仔细检查数据库来获得一些东西 - 例如创建索引或重新组织数据的存储方式/位置。理想情况下,数据库内容是从内存中提供的。
当您受到 CPU 限制时,请确定哪个进程达到最大负荷。如果是 Apache/PHP,请确定应用程序的哪个部分产生最高负载。它可能是公告板、博客等。
您可能还想查看诸如开放连接、网络吞吐量等内容。还可以看看通过从不同位置或以不同方式提供静态内容是否可以获得一些收益。
答案2
它完全依赖于软件和系统配置。长期以来,stackoverflow.com 仅通过一台服务器就能提供这些浏览量/连接数的数倍。我相信整个三部曲仍然只使用 2-3 台服务器运行。
如果您可以修改应用程序,那么您可能能够对其进行优化。您可能需要优化数据库服务器的配置。如果您无法做到这两点,那么只需使用硬件解决问题可能更简单。但是,如果您的应用程序不是为扩展到多台服务器而设计的,那么额外的硬件也无济于事。
答案3
我在 CentOS 机器上有一个基于 Vbulletin 4.0 的论坛,每天有 10 万次点击。它有 2xIntel(R) Xeon(R) CPU E5205 @ 1.86GHz、8Gb RAM。1000 名在线用户的服务器负载约为 2.0-3.0。我并不想对其进行过多的优化。
但首先你需要尝试禁用所有 vbulletin 和 wordpress 插件。你可以通过 WP 和 VB 中的管理控制面板来执行此操作。然后看看服务器是否能正常运行。如果能,我猜你的一个或多个插件写得不好。很可能包含未优化的查询。
如果你有 VBulletin 4.x,并且有许多用户和并发数据库访问 - 考虑迁移到 InnoDb。这将提高并发性。安装 memcache 并将其连接到 VB。这将减轻 DB 负担。
尝试安装 WP SuperCache,将静态页面作为静态文件。还可以考虑从 Apache 迁移到 nginx、lighttpd 或更轻量级的版本。