为什么ubuntu似乎没有释放内存?


11

我正在使用apache2 + php和其他Web服务器应用程序。

我有监视器作为连接到Web服务器的会话。RAM内存已满。

但是,当断开会话时,它不会释放RAM内存。

我通过监视free -m,即使没有会话连接,它也显示未释放的内存。

有解决方案吗?


注意free -m。第一行显示了内存使用情况,包括缓冲区和缓存。第二行显示已用内存减去缓冲区和高速缓存,即实际可用内存。您还应该尝试类似的方法htop进行监视。它更加直观,可以在官方仓库中使用。如果您确实内存不足,请向我们提供更多信息,例如您正在运行的Web应用程序的类型,您拥有的RAM的数量,已使用的内存等。粘贴free -m的输出和类似的东西。
约翰里德

3
没有解决方案,因为没有问题。Linux使用可用的RAM作为文件的缓冲区。
运行CMD

但是在执行fire命令之后:sudo sync && sudo sysctl -w vm.drop_caches = 3它向我显示了可用的可用内存,而且应用程序也运行得更好。
Tejaskumar Tank


我对VPS服务器最为了解,最近刚建立了debian 9.0,可与内存管理完美配合。
Tejaskumar坦克

Answers:


12

您可以使用以下命令释放未使用的内存:

sudo sync && sudo sysctl -w vm.drop_caches=3

此命令将同步缓存的数据,然后在运行时写入/ proc / sys / vm / drop_caches的OS参数。内核一次读取此参数,然后释放未使用的内存。

基本上,内核在缓存中保留三个部分,这可能会增加内存使用量:

  • 页面缓存
  • 索引节点

写入此参数将导致内核从RAM删除干净的页面缓存,牙科和索引节点,从而使该内存变为可用。可以分配三个值:

  1. vm.drop_caches = 1 免费的页面缓存。
  2. vm.drop_caches = 2个 免费的牙科和inode。
  3. vm.drop_caches = 3个 免费的页面缓存,牙科和inode。

重要说明: 执行后,它将返回正常状态,这意味着再次开始缓存页面缓存,牙科和索引节点。使用它取决于您的服务器配置和应用程序。


1
能否请您详细解释一下?
AB

该命令仅在每周或每天结束时要释放所有未使用的内存(分别具有不同目的的3或2或1)时有用。不要在会话加载的服务器上尝试此操作。
2015年

1
编辑您的答案,而不是评论。
AB:

sudo sync & sudo sysctl -w vm.drop_caches=3
Nyxynyx

1
@GuillermoGarcia 在Ubuntu 18.04.3。中使用bash 我需要sudo第二次。否则,我会得到错误sysctl: permission denied on key 'vm.drop_caches'
Nyxynyx
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.