Linux吃掉了我的内存
原文地址
https://www.linuxatemyram.com/index.html
这是怎么了
Linux借用了未使用的内存用来做磁盘缓存。这让你看起来很缺少内存,但其实没有,一切都在正常工作
为什么要做这些事
磁盘缓存使得系统反应更灵敏,响应更快。这没有任何坏处,除了对那些感到疑惑的新手而言。它永远不会以任何方式占用应用程序的内存!
译者注:有些中间件、数据库,会避免使用Linux的磁盘缓存,直接操作磁盘,管理自己的缓存。但这不包括大多数应用程序
如果我想运行更多的应用程序怎么办?
如果您的应用程序需要更多的内存,它们可以取回磁盘缓存使用的一部分。磁盘缓存始终可以立即归还给应用程序!您并不缺少RAM
我需要更多SWAP内存吗
不,磁盘缓存仅借用应用程序当前不需要的内存。它不会使用SWAP MEMORY。如果应用程序需要更多的内存,则只需将其从磁盘缓存中取回即可。他们不会从磁盘开始交换内存
译者注:现在使用磁盘交换内存的已经越来越少了
如何阻止Linux执行此操作?
您不能禁用磁盘缓存。任何人都想禁用磁盘缓存的唯一原因是,他们认为它会占用应用程序的内存,而事实并非如此!磁盘缓存使应用程序加载速度更快,运行更流畅,但是它永远不会占用它们的内存!因此,绝对没有理由禁用它!
译者注:同上,这句话有些绝对
但是,如果发现自己需要快速清除一些RAM来解决另一个问题(例如VM行为异常),则可以使用如下命令强制linux以非破坏性的方式删除高速缓存。
echo 3 | sudo tee /proc/sys/vm/drop_caches
为什么top和free说我的所有ram都被使用了?
这只是术语上的差异。您和Linux都同意,应用程序占用的内存是USED的,而未用于任何事物的内存是FREED。
但是,您如何计算当前用于某事(如磁盘缓存)但仍可用于应用程序的内存呢?
您可能认为该内存为 free或available。 Linux而是将其视为used,但也将其视为available:
Memory that is | You’d call it | Linux calls it |
---|---|---|
used by applications | Used | Used |
used, but can be made available | Free (or Available) | Used (and Available) |
not used for anything | Free | Free |
这个“东西”(大致)是top和free所说的“buffers”和“cached”。由于您和Linux的术语不同,因此您可能会认为自己的内存已经很低了。
我如何查看我实际上有多少FREE的RAM?
我如何查看我实际上有多少免费的RAM?要查看您的应用程序不进行swap操作可以使用多少内存,请运行free -m并查看free列:
$ free -m
total used free shared buff/cache available
Mem: 1504 1491 13 0 855 792
Swap: 2047 6 2041
这个结果的单位是MB。如果您只是天真地看used和free,您会认为您的ram已满99%,而实际上只有47%!
我什么时候应该开始担心?
运行一段时间后,运行状况良好且内存充足的Linux系统将显示以下预期的无害行为:
-
**可用(free)**内存接近0
-
**已用(used)**内存接近总容量
-
**可用(available)**内存有足够的空间(例如,占总内存的20%以上)
-
使用的交换内存不会改变
您可能需要研究的真正内存不足情况的警告信号:
- **可用(available)**内存接近于0
- 交换内存使用突增或者波动
dmesg|grep oom-killer
开始工作
我该如何验证这些东西?
有关更多详细信息以及如何尝试磁盘缓存以显示此处描述的效果,请参见此页面。 几乎没有什么比在您自己的硬件上测量数量级加速更能使您欣赏磁盘缓存了!
- 点赞
- 收藏
- 关注作者
评论(0)