![如何防止 Apache 上的测试虚拟主机相对于主主机消耗过多的资源?](https://linux22.com/image/576141/%E5%A6%82%E4%BD%95%E9%98%B2%E6%AD%A2%20Apache%20%E4%B8%8A%E7%9A%84%E6%B5%8B%E8%AF%95%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA%E7%9B%B8%E5%AF%B9%E4%BA%8E%E4%B8%BB%E4%B8%BB%E6%9C%BA%E6%B6%88%E8%80%97%E8%BF%87%E5%A4%9A%E7%9A%84%E8%B5%84%E6%BA%90%EF%BC%9F.png)
我有一个运行 Plesk 的 Web 服务器。我在 Apache 中创建了一个测试子域,并将站点的副本放在那里用于测试。自从这样做以来,服务器上的内存使用量已经上升了不少。文件相同,任务相同……但如果我重新启动 Apache,并在实时站点上操作一段时间,总使用量约为 0.5gb / 2.0gb。访问测试站点上的一个页面会使使用量立即上升到 1.0gb,然后使用量徘徊在 1gb 左右。
我的第一个问题是,第二个虚拟主机会消耗那么多额外的内存,这听起来合理吗?我对这些事情不太了解,但我可以想象,一旦第二个虚拟主机开始使用,就会缓存和/或保留大量资源,并且该应用程序的两个副本所需的资源量将是一个副本所需的两倍。
我的第二个问题是,如果是这样的话,有什么方法可以告诉系统这个测试服务器的优先级真的很低,并且我很乐意等待更长时间让对它的请求通过,让它在完成后释放内存,等等?
答案1
(我不了解 plesk,所以如果这些假设是错误的,这个答案可能会偏离主题。)
至于内存使用情况,这取决于您的应用程序后端正在使用什么,因为 mod_XXX php 或您使用的任何脚本语言都可能产生一个新的脚本处理实例来处理第二个虚拟主机。因此,它可能会为自己创建第二个重复的缓存和缓冲区。您必须提供应用服务器详细信息等。
关于为一个站点创建比另一个站点更高的优先级,适用以下情况;假设您的测试子域作为 NameVirtualHost 运行,那么您的主站点和测试子域站点都在同一个 apache httpd 实例上的同一个 IP 地址上运行。
那么问题是 apache 必须从请求中读取 HTTP“Host:”标头来确定哪个虚拟主机应该处理该请求,因此在它决定应用限制之前,它已经完成了大部分工作。(大多数 httpd 限制适用于每个服务器,而不是每个虚拟主机,请参阅http://httpd.apache.org/docs/2.2/mod/core.html#rlimitmem了解详情)
因此,很难通过这种方式应用 CPU 或内存限制。但是,您的选择可能是启动另一个 httpd 实例,该实例在该服务器上设置的 RLimitMEM、RLimitNPROC 较小,为此您将需要另一个 IP 地址。(但是,这很麻烦,除非使用 plesk 很容易做到,或者您乐于摆弄 init.d 文件,并且您最终可能会为第二个 httpd/children 使用比以前更多的 RAM)