Linux 何时会耗尽内存?

Linux 何时会耗尽内存?

我试图确定为什么某个进程不断意外停止,一种可能性是服务器内存不足,但我不确定我是否正确理解内存和 Linux。

从命令中获取以下输出free(从我正在尝试修复的问题所在的同一台机器上获取):

             total       used       free     shared    buffers     cached
Mem:           991        827        163          0        107        361
-/+ buffers/cache:        358        633
Swap:            0          0          0

最上面一行表明这台机器确实使用了大量内存(只有 163 Mb 可用),因此,如果启动更多进程(确实会启动),那么我们可能会出现内存不足的情况,并且各种进程都会被终止。

然而,我一直认为,由于 Linux 充分利用了内存中的缓冲区和缓存,可以在需要时使用,所以我应该更加关注的数字是第二行,它表明~633 Mb 是可用的,在这种情况下,我认为这台机器不太可能出现内存不足的情况。

那么你能澄清我对 Linux 和内存的理解并帮助我理解 Linux 何时真正耗尽内存吗?

PS - 这台机器是一台单一用途的机器 - 它为大型 Web 应用程序运行后台进程,这就是它所做的一切。没有 Web 服务器,没有数据库,只有一个作为后台进程运行的大型 Rub​​y on Rails 应用程序。偶尔会为特定应用程序任务启动 cron 作业,这些任务会在内存中临时创建 Rails 应用程序的另一个实例。

答案1

内核使用未被利用的 RAM 来缓存从存储中读取的数据 - 这被称为缓冲区缓存。由于缓冲区缓存只是硬盘上内容的副本,因此如果内核需要内存来处理更重要的事情,它可以“忘记”内存中该数据的副本并将其用于其他用途。如果它需要该数据,它只需从驱动器重新读取它即可。

请记住,有缓冲区缓存,然后有常规内核缓冲区(用于 tcp 套接字、路由表等)

因此,第一行的 free 命令显示:

  • 总计:您有多少内存,就这样。
  • 已使用:其中实际上有多少有价值的东西。
  • 空闲:绝对没用过——可能不是空的,但不管怎样都是垃圾。
  • 共享:进程之间共享的东西 - 主要是共享库。
  • 缓冲区:常规内核缓冲区。
  • Cached:表面上看,就是缓冲区缓存。

现在,第二行显示“实际使用”的内容。也就是说,内存中的内容不能被遗忘,否则会产生后果。第二行上的“空闲”字段是未使用内存和缓冲区缓存的总和。

最后一行将包含交换空间 - 内核可以将重要信息写入内存的存储空间,以便内核可以将该内存位置用于其他用途。但是,从您的屏幕截图来看,您没有任何配置。

目前,您似乎使用了 1GB 内存中的约 360MB。如果您担心或怀疑内存不足,请检查内核日志消息。当内核达到绝对内存不足且必须采取措施的情况时,它会记录日志。它将调用内存不足终止程序,希望通过终止一个进程来挽救这种情况。

我最初以为这是 VPS。如果这是物理服务器,并且您没有可以添加的额外 RAM,那么请考虑添加交换空间!

否则,请检查 /var/log 中的日志消息,或者在命令行上使用 dmesg 检查最新的内核消息。

相关内容