我在 AWS 免费套餐帐户上使用虚拟主机托管了 4 个域,并使用了 Ubuntu 微型实例。当我仅托管一个域时,内存使用量约为 250MB,而可用内存为 613MB。添加 4 个域后,内存使用量为 535.67 MB,运行了 11 个 apache2 实例。
它应该这样工作吗?前提是这些域根本没有被访问。它们只是被重定向到那里,并添加了虚拟主机记录。就是这样。那么,当我们添加更多虚拟主机记录时,apache 是否会保持自身扩展?如果我想在服务器上托管大约 4 个域,标准情况下的内存量应该是多少?
答案1
不幸的是,Apache 每次请求都会启动一个工作线程 - 这需要启动 Apache 的完整副本(有一些共享内存)。这样,低负载很容易消耗所有可用内存。您需要禁用尽可能多的模块以尽量减少 Apache 的占用空间(请记住,生成的线程往往会停留一段时间)。您需要查看每个 Apache 进程的平均内存使用情况(例如使用 ps/top),然后计算可以运行的最大进程数(在 httpd.conf 的 prefork 或 mpm 块中设置该值)。在 t1.micro 实例上,我还建议添加基于 EBS 的交换卷,这样如果内存不足,服务器也不会崩溃。
域本身不会增加您的内存使用量,但如果您的设置允许,Apache 将产生更多的工作程序 - 搜索引擎等可能会访问域,从而导致额外的进程。
Apache 进程通常从 10MB 左右开始,然后随着使用而增长(每个进程很容易达到 40-60MB)。造成这种情况的主要原因之一是 PHP(如果您正在使用它)。避免在 t1.micro 上使用 mod_php,因为它会给每个 Apache 线程增加相当大的开销。而是使用 php-fcgi 或更好的 php-fpm。在后两种情况下,php 解释器独立于 Apache 运行,提供更好的内存利用率(性能略有损失,但好处远远超过损失)。
如果您不需要使用 Apache(例如不需要特定模块并且不需要 .htaccess 文件),我强烈推荐 nginx(带 php-fpm)。总体内存使用量将大幅下降,您还会注意到性能提升。
答案2
现代操作系统通常被设计为使用所有可用内存。假设您无法将其保存以备后用,因此闲置它没有任何好处。保存在 RAM 中的数据以后可能会需要,从而节省磁盘访问。近期不太可能使用的空闲 RAM 根本没有任何好处,因此创建大量 RAM 毫无意义。
系统假定您为其提供了该内存,因为您希望它使用它来提高性能。