我有一个 Web 服务器,目前托管两个 Wordpress 网站和一些基于 Java 的协作软件。该服务器有 2G 内存,目前使用大约 1.8G 的可用内存。目前这里的内容几乎是一个试点项目,流量微乎其微,所以我认为很明显我需要更多内存。
我在想,如果我要发布它,我该如何根据它获得的流量来预测我的内存需求。我在 Google 上搜索了一下,但发现结果有点牵强。在根据服务器上的基本(无流量)负载计算内存需求时,是否有一个好的启发式方法可以采用?
作为参考,输出free -m
如下所示:
total used free shared buffers cached
Mem: 2048 1832 215 0 0 0
-/+ buffers/cache: 1832 215
Swap: 0 0 0
对我来说,这看起来像是实际使用的内存,而不是由于缓存或其他原因造成的错觉。
我认为我的协作软件的要求必须经过实验测试,因此这是free -m
没有运行该软件的情况:
total used free shared buffers cached
Mem: 2048 1109 938 0 0 0
-/+ buffers/cache: 1109 938
Swap: 0 0 0
我的 B 计划是向服务器添加大量交换空间,为其提供一些流量,并根据交换使用量进行调整。我只是想知道是否有人有一个很好的经验法则来估计我应该提前计划多少内存……或者我的想法是否是疯狂的。
提前谢谢大家(我对此真的很陌生)。
答案1
答案基本上是:视情况而定。根据您的具体情况,您安装的网站的质量和效率可能会受到质疑。
例如,本周我在一台流量相对适中的服务器上工作,但占用了 4GB 的 RAM。在进行代码审查后(整个网站使用的是与 WordPress 类似但经过自定义的现成 CMS),我们发现了一个主要瓶颈。在我们重新编码解决问题后,服务器现在平均每天使用大约 2GB 的 RAM。RAM 使用量下降了 50%!
我不建议做类似拆分服务器以使用 Ngnix 和 Apache 之类的事情。只需使用 Apache。平衡两个不同服务器的配置所带来的麻烦不值得付出边际效益。Apache 很好。但话虽如此,您应该考虑在同一台机器上将 WordPress PHP 站点与 Java 应用程序和 MySQL 进行组合。根据我的经验,您应该执行以下操作:
- 正确配置Apache:Apache 是一款优秀的软件,但开箱即用,占用大量内存。例如,我认为默认设置是允许每秒 255 个连接?我可以向您保证,大多数简单网站在好日子里每秒也只能获得 40 个连接。因此,调整 Apache 以适应您的流量会有所帮助。此外,
KeepAlive
Apache 中有一个设置效果很好!但开箱即用,我认为它设置为MaxKeepAliveRequests
100,这相当疯狂。我通常将其设置为大约 30 个连接,耗时KeepAliveTimeout
2 到 3 秒。关键是要让KeepAliveTimeout
速度与平均页面下载所需的速度相匹配,并留出一点开销/缓慢空间。因此,如果页面加载时间为 1 秒,则将加载时间KeepAliveTimeout
为 2 秒。 - 检查 WordPress 网站的代码是否存在潜在瓶颈:专注于 PHP 核心并尽可能地清理。注意过多的 MySQL 调用和文件系统调用。这是您能够让应用程序飞起来的地方!此外,检查
memory_limit
您的应用程序php.ini
并确保它不超过必要的大小。默认值为 64M,但在许多情况下可以降低到 32M。 - MySQL 调整或将其移动到它自己的服务器上:在写完上面关于 MySQL 的内容后,我意识到你可能在同一个机器上托管了你的 MySQL 实例。通过运行类似这样的脚本来优化 MySQL 性能MySQL 调优入门。如果不进行调整,MySQL 将耗尽所有资源并导致系统崩溃。通过调整,MySQL 将运行得更好/更快,并且可以释放资源用于其他目的。此外,请考虑将 MySQL DB 移动到独立服务器。您可能必须学习如何正确联网和防火墙服务器以允许您的服务器访问但防止黑客入侵,但性能优势将非常显著。
- 考虑将 Java 应用程序移动到另一台服务器:我的经验法则是每台服务器只运行一个主要的 Java 应用程序。一般来说,与 WordPress 等 PHP 设置相比,Java 应用程序可能会占用大量内存。通过为 Java 应用程序提供自己的服务器,WordPress 网站会更满意。
关于 MySQL 调优,一开始可能需要几周时间才能确定。原因是调优脚本基于 MySQL 看到的实际流量。因此,您基本上是让您的网站上线,等待 2 天(至少),运行调优脚本,然后再等几天进行更多调优。大约一周后,您应该能够调优 MySQL,使其与您的设置尽可能好地配合使用。