我是服务器方面的菜鸟。我有一个 centos5.5 vps,内存为 512mb。我的目标是让它只托管一个 magento 商店。我在服务器上安装了 Magento,没有任何控制面板,只是自己安装了 lamp 以及安装 Magento 所需的任何 php 扩展。
当我访问我的 magento 商店时,突然发现 vps 上的内存几乎用完了,只剩下大约 100mb。请看我刚访问网站后拍摄的 htop 屏幕截图。
http://img714.imageshack.us/img714/1944/screenouv.png
如您所见,只剩下大约 100mb。这是正常的吗?我想知道我是否对服务器做了一些愚蠢的事情,导致它非常耗资源。我从 centos 基础存储库安装了 apache,从 ius 存储库安装了 php 版本 5.3,也从 ius 存储库安装了 mysql 5.1。除了在 php.ini 中将 memory_minimum 设置为 256 之外,我没有更改任何默认配置文件。我可以做些什么来释放更多的内存?
我不太清楚,但我发现每个 Apache 守护进程都使用了 8% 的可用内存,而据我所知,每个访问者都需要一个 Apache 守护进程。因此,只要有少数访问者,我的内存就会用完。谢谢你的建议。
答案1
我猜你没事:这些内存被 Linux 内核的磁盘缓存所使用(参见http://www.linuxatemyram.com/更多细节)。
关于 Apache:如果您使用非线程版本的 Apache(默认设置),则每个用户都需要一个 Apache 实例,但他只会在很短的时间内使用该实例,而向用户传输单个页面。此后,Apache 进程将处理下一个请求,可能是由另一个用户发出的。这样,您就可以使用相对较少的 Apache 进程来处理许多连接。
编辑:免费输出的一个例子:
total used free shared buffers cached
Mem: 498 434 64 0 194 77
-/+ buffers/cache: 162 336
Swap: 4102 0 4102
列出的 64MB 空闲内存是未以任何方式使用的内存量。但是(几乎)所有缓冲区/缓存内存都可以在需要时立即被操作系统使用,因此潜在的可用内存实际上接近 350MB,而不是 64MB。
答案2
Centos 将使用任何备用 RAM 作为磁盘缓存和缓冲区来加快速度。当您访问文件时,它们将被缓存在内存中。缓存仍然是可用内存的一部分,如果系统在其他地方需要,它将被放弃。看一看这里了解更多信息。
答案3
通过访问 Magneto 商店,mysql 会从磁盘检索数据,然后将其保存在缓存 (RAM) 中以便更快地检索。这是正常的。
答案4
512MB 不是很多。PHP 与 Apache prefork MPM 结合使用意味着您将很快消耗掉。
实际上,你需要用你的总 RAM(512MB)除以memory_limit
in/etc/php.ini
才能得到 Apache 的合理数字MaxClients
万磁王维基说建议 64MB 但可能不够。假设您使用 64MB,则可为您提供 8 个客户端。实际上,数量会少一些,因为您还在mysql
同一系统上运行一些其他东西。您可以使用比这更大的数量,但在某些时候,您的系统将要死。
请记住,每个要求需要由一个预分叉服务器来响应,而不是每个访问者。如果每个请求都得到足够快的处理,那么你可能不需要像你想象的那么多服务器。
稍等片刻。当前版本的系统要求文档说memory_limit应该是至少256MB,而它们实际上要求 512MB。这只能给你 2 个或 1 个 Apache 工作进程,这实际上站不住脚。
所以。你需要重新考虑。你可以投入更多内存来解决这个问题(强烈推荐),或者使用不同的 Apache MPM(可能对你的 PHP 应用程序有问题;我不知道),或者使用lighttpd + fastcgi。
事实上,无论如何你都可能需要获得更多的 RAM — — 否则就使用完全不同的应用程序。
(顺便说一句:关闭yum-updatesd
,并将其替换为yum-cron
。你应该有自动更新,但你不需要守护进程整天呆在 RAM 中。)