我的 centos 5.7 正在运行 Magento。4GB RAM 和 4 核。Nginx + spwan-fcgi + memcached(如果你问我,这是最佳性能)。
现在我有点担心内存使用情况。
[root@adikastyle shipment]# free -m
total used free shared buffers cached
Mem: 3948 3712 236 0 224 **2377**
-/+ buffers/cache: 1109 2839
Swap: 10975 0 10975
我在一些论坛上看到过这个命令:
# sync; echo 3 > /proc/sys/vm/drop_caches
该网站速度很快,可以处理许多当前连接。
但是缓存确实很奇怪..
这个命令对于生产来说安全吗?
2377MB 的缓存好吗?
我需要改变一些东西吗?
谢谢。
答案1
您所观察到的缓存行是一件非常好的事情。
如果没有缓存,那么上述所有数据都必须从磁盘读取。如果有缓存,则结果将从 RAM 返回。
如今,Linux 在缓存和缓冲方面非常智能;不要试图利用在互联网上看到的一些随机复制粘贴的“提示”来超越它。
不要改变任何东西,很高兴你有近 2.5 GB 的缓存。它极大地提高了你的性能;用你的 echo 线删除缓存实际上会严重损害性能!如果有任何应用程序确实需要缓存的内容,缓存的内容将立即释放,这不会导致性能下降。
答案2
如果它在您的配置中运行良好,性能良好,并且您的统计数据对您的应用程序令人满意,那就不要玩它。
Linux 在自行维护缓存方面做得相当好。
等到有实际问题时才去解决,而不是制造新的问题。
答案3
一个常见的误解是你应该有 RAM自由的。您希望使用尽可能多的 RAM - 它是服务器上最快的内存子系统。
因此,Linux 操作系统非常智能,开始将经常访问的文件/数据/信息存储在 RAM、缓冲区/缓存中。
当应用程序需要 RAM(例如更多 PHP 线程)时,分配给磁盘/缓冲区的内存就会减少,以利于用户空间应用程序。
因此,目前,您的内存使用情况看起来非常健康。但还值得记住您实际使用了多少内存(如果您的流量增加,PHP 线程增加,MySQL 连接增加等)。您可以通过运行来检查这一点
cat /proc/meminfo | grep committed
你应该希望看到这样的事情
commitLimit 3145728
committed_AS 6291456
对于 Magento 服务器来说,拥有大约两倍可用内存的已提交内存通常是“相当安全的”(因为必须增加长时间运行的管理进程的 PHP 内存限制)。
答案4
此处有关由缓存主导的内存使用情况的规范参考:
内存中的缓存数据是自由的(您可以将其视为未使用,并且它不会影响性能——只有好处!),生活中很少有免费的东西。当您的程序需要它时,它们会得到它。当它们不需要时,最近从磁盘读取的数据将保留在内存中并用于响应原本需要来自驱动器的读取。