我有一个 Debian 5 服务器,它有很多流量。现在服务器有 4 GB 的 RAM 并且没有交换内存。我在顶部看到 Apache 进程每个消耗大约 180 MB 虚拟内存 (VIRT) 和 16 MB 实际 RAM (RES)。那么我可以同时运行多少个 Apache 线程呢?大约 4 GB / 180 MB = 22 还是 4 GB / 16 MB = 256?
我有一个 Debian 5 服务器,它有很多流量。现在服务器有 4 GB 的 RAM 并且没有交换内存。我在顶部看到 Apache 进程每个消耗大约 180 MB 虚拟内存 (VIRT) 和 16 MB 实际 RAM (RES)。那么我可以同时运行多少个 Apache 线程呢?大约 4 GB / 180 MB = 22 还是 4 GB / 16 MB = 256?
虚拟内存大小不如您的常驻集重要。虚拟内存将包括映射的东西,例如共享库和诸如此类的东西(它们只会驻留在物理 RAM 中一次)。RSS 告诉您内存中的实际内容,即 Virt。告诉您有多少可用的虚拟地址空间已被吞噬。
您的第二次计算会更接近,尽管它非常低。具有 4GB RAM 的服务器可以运行超过 256 个 Apache 进程。根据您的流量模式和 IO 等待限制,运行超过 256 个可能是一个好主意,因为这些进程中有很多可能只是坐在那里等待内核将数据从设备铲到设备。还要考虑诸如 COW 之类的事情以及所有内容都指向相同的“httpd”二进制文件这一事实,您会获得更高的效率。
现在,用 2GB 的交换空间重建您的系统。交换不再只是充当“慢内存”。
作为免责声明,我已经很长时间没有关心 Linux 内存管理的细节了,并且可能与我的事实有些偏差,但要点是可靠的!
该值主要取决于您当前服务器负载的试验。
尝试使用“apache top”收集一些数据。进行一些配置更改并重试。由于我不知道您的特定用例,因此很难提出一些具体数字。
如果您想为您的 Web 服务器提供可预测的内存消耗,请查看 http://wiki.nginx.org/Main
它以一种非常酷的方式解决了一些可扩展性问题。
它并不适合每个用例,但一定要考虑一下。
您可以部署它以减少 apache 实例的负载。它适用于在反向代理配置中提供静态和缓存内容,以及其他高负载场景。
试一试,它是免费的 :-)