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