我有一台运行 apache2 的 Ubuntu 服务器,我预计在有限的时间内会有大约 500-1000 个(并发)用户访问。该服务器提供连接到 postgresql db(大小约为 20 Mb)的自定义(相当轻量)php 页面和静态内容。硬件稳定且非常强大:
- 英特尔至强 E5420 @ 2.5 GHz
- 12 GB 内存
在之前对该服务器进行测试时,我增加了 ServerLimit、MPM 模块的 MaxClients 并减少了 Timeout 和 KeepAliveTimeout。这很有效,但运行缓慢,我觉得还可以做更多。您建议如何配置 Apache 服务器来处理这种负载?
答案1
在这种情况下,瓶颈将是 PHP 及其对数据库的操作。如果每次调用都打开一个新连接,那么您很可能会遇到磁盘访问 I/O 瓶颈。最好的办法是将数据库和静态内容放在 RAM 磁盘中,并根据需要将更改提交到磁盘上的数据库。此外,使用 PHP 中的 RAM 专用快速哈希查找来维护高效的查询缓存机制,这样您就不会因为与查询缓存查找相关的不必要的处理周期而给 postgresql 带来负担。尽管 postgresql 在查询缓存方面可能比您自己的代码更高效,但它并不像从一开始就不需要连接那样快。
答案2
您的服务器应该能够轻松处理事情。以下是几点注意事项:
- 使用 SSL 将增加您的计算要求。因此,请使用纯 HTTP。
- 使用 prefork MPM 将增加您的内存需求。因此,请使用 worker MPM。
- 使用更多核心的并发性将提高性能。
- 为您的 PostgreSQL 数据库分配更多 RAM。
这些只是通用的指导方针。