我的服务器上安装了 ubuntu server 14.04。并且我有 vsftpd 服务器,用于测试目的,提供下载文件测试。我的问题是,为什么如果客户端下载 ftp 文件,我的服务器内存会随着用户下载而快速增加,然后在用户完成下载后,它保持相同的值,有什么方法可以阻止它?
以下是我的内存使用情况。
ipeph@ServiceOperationCenter:~$ free -m
total used free shared buffers cached
Mem: 9748 6018 3720 10 141 5679
-/+ buffers/cache: 392 9354
Swap: 893 0 893
ipeph@ServiceOperationCenter:~$ date
Thu Nov 19 09:44:37 WIB 2015
ipeph@ServiceOperationCenter:~$ free -m
total used free shared buffers cached
Mem: 9748 6113 3619 10 141 5679
-/+ buffers/cache: 395 9350
Swap: 893 0 893
ipeph@ServiceOperationCenter:~$ date
Thu Nov 19 09:44:57 WIB 2015
ipeph@ServiceOperationCenter:~$ free -m
total used free shared buffers cached
Mem: 9748 6213 3534 10 141 5679
-/+ buffers/cache: 402 9355
Swap: 893 0 893
ipeph@ServiceOperationCenter:~$ date
Thu Nov 19 09:45:03 WIB 2015
答案1
Linux 内核会将文件数据缓存在内存中,以防再次访问。随着时间的推移,如果未访问数据或其他进程需要内存,数据将被丢弃。缓存统计数据显示缓存中有多少数据。我不会过分担心这一点。
如果您确实想删除缓存数据(这是不可取的,因为您可能会释放缓存数据,因此内核将不得不再次重新读取它),您可以将 1 写入 /proc/sys/vm/drop_caches 以释放页面缓存。
释放页面缓存:
echo 1 | sudo tee /proc/sys/vm/drop_caches
释放可回收的 slab 对象(包括 dentry 和 inode):
echo 2 | sudo tee /proc/sys/vm/drop_caches
释放 slab 对象和页面缓存:
echo 3 | sudo tee /proc/sys/vm/drop_caches
答案2
在free
输出中,最重要的数字是+ buffers/cache
,free + buffers + cached
它表示您的应用程序在需要时可用的内存。
- buffers/cache
== 已用 - 缓冲区 - 缓存,这是应用程序占用内存的良好指标
Linux(内核)利用未使用的内存作为页面缓存(和缓冲区缓存 - 它仍然存在)来提高性能。
free
-> 不用于任何用途
echo 3 > /proc/sys/vm/drop_caches
释放页面缓存、dentry 和 inode,这将使用于页面缓存/缓冲区缓存的内存返回到“空闲”状态。
buffers
将会cached
下降,free
也会增加,但是,这并不意味着您有更多的内存可供应用程序使用。
如需了解更多信息,请查看Linux 在我的 RAM 中!
顺便说一句:Fedora 和 Arch Linux 的输出使用方式
free
不同procps-ng
。
输出结合了 buff/cache 并删除了有点令人困惑的-/+ buffers/cache
。
我们可以清楚地看到buff/cache
删除了但available
没有改变,这对最终用户来说更有意义。我个人认为这是一个更好的实现/解释。
# free -m
total used free shared buff/cache available
Mem: 1874 117 18 1 1737 1708
Swap: 0 0 0
# echo 3 > /proc/sys/vm/drop_caches
# free -m
total used free shared buff/cache available
Mem: 1874 117 1654 1 102 1708
Swap: 0