我有一个具有 8GB 内存的网络服务器,并且正在运行一个非常密集的 php 站点(1 个站点),该站点可以进行文件操作、绘图、电子邮件、论坛,等等。环境远非静态,这让我相信在 ram 中缓存任何东西几乎没有什么好处,因为几乎每个对服务器的请求都会创建新的或更新的页面。很多缓存是在客户端完成的,所以当涉及到图像、javascript、css 时,我们有大量的 304 请求。
此外,我确实有语言文件被写入服务器上的平面文件,其中缓存的 ram 绝对是好的,而不是从磁盘读取。但是这样的文件屈指可数。
在大约两周内,我从拥有 98% 的空闲内存变成了 4% 的空闲内存。这发生在我们还将几个大型 svn 更新推送到服务器的时候。
我的问题是,如果我使用以下命令定期清除缓存(我知道 Linus Torvalds 对缓存的感觉),我的服务器是否会得到更好的调整:
sync; echo 3 > /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)
或者我最好编辑以下文件:
/proc/sys/vm/swappiness
Run Code Online (Sandbox Code Playgroud)
如果我用 30 替换默认值 60,我应该有更少的交换和更多的陈旧缓存重用。
看到使用第一个命令释放所有缓存确实感觉很好,但如果我告诉你这对桌面环境有好处,那我就是在骗你。但是像我上面描述的那样的网络服务器呢?想法?
编辑:我知道系统将根据需要从缓存中获取内存,但感谢您指出我们的清晰。当大部分服务器内存存储在缓存中时 Apache 会变慢,我是否在想象事情?那是完全不同的问题吗?
我有一个带有 6GB RAM 的小型 VPS,用于托管几个网站。
最近我注意到我的缓存内存大小相当高 - 见下文:
Cpu(s): 0.1%us, 0.1%sy, 0.0%ni, 99.1%id, 0.0%wa, 0.2%hi, 0.4%si, 0.0%st
Mem: 6113256k total, 5949620k used, 163636k free, 398584k buffers
Swap: 1048564k total, 104k used, 1048460k free, 3586468k cached
Run Code Online (Sandbox Code Playgroud)
在调查是否有某种方法可以将其刷新或清除后,我偶然发现了一个命令:
sync; echo 3 > /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)
我读到将它添加到 chron-task/job 可能很有用。这种方法是推荐的还是会导致潜在的问题?
我唯一担心的是我在 Memcached 上使用了一个 Magento 安装 - 这会对它产生任何负面影响吗?
我当然不是专业人士,因此我非常感谢一些专家的建议。
PS:我的 VPS 在 CentOS 5 x64 上运行,并且我安装了 WHM + NGINX。
我正在运行一个 Centos 7 ESXi VM,它有将近 300GB 的 RAM 和 24 个 vCPU。
平均负载为 3,应用程序几乎从不使用超过 150GB 的 RAM。剩余的可用内存由 Linux 用于缓存。
问题是,当缓存填满可用 RAM 时,两个 kswapd 进程将开始使用 100% 的 CPU,突然我看到所有 CPU 也显示 99% 的 sys 使用率(不是等待或用户,主要是 sys )。
这将导致几分钟的高负载 (100+),直到系统恢复并且负载再次下降到 3。
目前我没有交换分区,但即使我有交换分区,这个问题也发生了。
我发现的一个“解决方案”是每天执行以下命令:
echo 3 > /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)
这会丢弃缓冲区/缓存。这将“修复”该问题,因为缓存使用率从未达到 100%。
我的问题是:
这个问题有真正的解决方案吗?
linux 内核不应该足够聪明以简单地从内存中清除旧的缓存页面而不是启动 kswap 吗?
毕竟,据我了解 RAM 内存的主要功能是供应用程序使用。缓存只是次要功能,如果您没有足够的内存,可以丢弃/忽略它。
我的内核版本是 3.10.0-229.14.1.el7.x86_64。
我知道过去有人以类似的方式问过这个问题,但我只是好奇。
如果我制作了一个脚本并让它在每半夜运行以检查我的内存使用率是否高于假设 80 ......让脚本自动运行是一个坏主意sync; echo 1 > /proc/sys/vm/drop_caches吗?我经常遇到一个问题,我的 RAM 使用率因此达到 99%,我只是有点担心。
提前致谢。
我有一个包含以下 os 版本的 Linux 服务器:
Linux 2.6.32-220.7.1.el6.x86_64
我想每2天重启一次,请帮帮我,我想通过crontab来做。
另一个帮助,
我使用下面的代码每小时删除我的内存缓存。
0 * * * * /root/clearcache.sh
#!/bin/sh
sync; echo 3 > /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)
但是每小时第 15 个,我的服务器在清理缓存后仍然很慢。我的网站不会在第 15 分钟内每小时加载一次。
换句话说,如果我重新启动我的服务器,那么缓存也会被删除。所以我决定每两天重新启动我的服务器以删除我的缓存。
重启有用吗?或者有没有其他方法可以删除我的内存缓存而不会关闭我的服务器?
linux ×4
memory ×4
cache ×3
centos ×3
centos5 ×1
linux-kernel ×1
swapping ×1
vps ×1
web-server ×1