有些东西会吃掉所有内存(我怀疑某些应用程序存在内存泄漏)。如何检测什么?

jay*_*rjo 17 linux resources top memory-leak memory-usage

我有运行liquidsoap+icecast 包和简单网站(httpd+mysqld)的服务器。没什么特别的。每天约有 2000 多名访客,平均约有 50 人同时在线。

服务器有 8GB 内存。随着时间的流逝,可用内存量不断减少,尽管服务器上没有启动任何新内容并且没有新用户。在某些时候它开始交换,服务器上的负载上升并且变得无响应。通常我所做的只是重新启动服务器......

可以做些什么来检测究竟是什么泄漏了内存?我使用 top 来监控资源的使用情况,但据我所知,它没有任何帮助:

在此处输入图片说明

有没有办法找出使用那么多内存的东西?或者什么开始大量交换到磁盘?有什么方法可以在不重新启动服务器的情况下释放内存?

Bil*_*hor 18

top以批处理模式运行以定期报告内存大小可用于查看当事情变糟时谁在使用内存。乳宁sar在批处理模式下应提供对内存的使用,以及相关的I / O一些很好的诊断。运行munin以监视系统应该会为您提供一个图表,其中包含有关内存使用情况的详细信息。这可能有很大帮助。

您可以使用limits.conf 来限制程序的最大内核大小。正确设置,这应该会杀死任何泄漏内存的程序。这适用于 pam_limits 模块。也可以使用ulimits命令设置限制。

您正在运行一些可能使用大量内存的程序。您可以查看的一些内容包括。

  • 在其下运行的编程不良的应用程序apache2可能会泄漏内存。发生这种情况时,您应该会看到内存大小增加。您可以通过设置MaxRequestsPerChild为 100 左右来调整 apache2 以在使用一定次数后回收儿童。如果这解决了问题,那么您需要解决泄漏问题。我会先看这个。
  • MySQL 可能会尝试将数据加载到内存中。如果内存中有大量数据,这可能会导致一些颠簸,但不会像您看到的那样剧烈。
  • 如果你tmpfs挂载了一个大文件系统,那么如果使用时没有删除文件,你可能会泄漏内存。大的长期存在的文件也可能是一个问题。
  • 如果问题发生在一天中的大致同一时间,则您可能有一个正在泄漏内存的计划程序。
  • 如果你有一个程序分配了共享内存,但在退出之前没有释放它,你就会有一个相对不可见的内存泄漏。如果共享内存被锁定在内存中,那么它可能会强制交换。可用共享内存的数量通常相对有限。
  • Liquidsoap+icecast 包可能会遇到使用内存的缓冲问题。我没有使用过这种组合,所以我不确定这会如何出现。

正常内存使用:空闲内存不是你想要的东西。如果您的系统已经运行了很长时间并且有很多空闲内存,那么就会出现问题。每次读取或写入文件时,块都会进入缓冲区缓存。这会减少你的空闲内存,这是一件好事。系统将保留足够的可用空间来启动一些程序,而无需在别处寻找内存。由于许多程序运行速度很快,当它们停止运行时,它们的内存将返回到空闲池中。

当您读取缓冲区缓存中的文件时,不需要访问磁盘,并且读取是从缓冲区缓存解析的。写入使用类似的机制。如果您的系统需要内存,缓冲区缓存是最先使用的地方之一。大多数缓冲区可以立即释放。

如果您有内存泄漏,您将看到可用内存和缓冲区都开始缩小。这仍然不是一个严重的问题,因为泄漏的内存最终应该移动到交换空间。您的系统仍然可以正常运行,直到您填满交换空间,并将剩余的可用空间减少到程序无法启动的程度。通常可以使用少量交换空间。

  • @jayarjo:Munin 和 sar 应该帮助检测正在发生的事情。如果您有大量空闲内存,则不应进行交换。您可能有不同的 I/O 问题。`sar` 将有助于查明哪个分区具有 I/O,并可能有助于发现问题。 (2认同)

Raf*_*ger 12

您可以使用此命令查看有关 RAM 使用率的前 10 个应用程序:

ps -A --sort -rss -o comm,pmem | head -n 11
Run Code Online (Sandbox Code Playgroud)

有时,如果生成了许多子进程,此命令会帮助您:

ps auxf
Run Code Online (Sandbox Code Playgroud)

这样您就可以看到哪些进程属于一起。

  • 尝试使用“vmstat”(例如 vmstat -s)获取更多信息。或者使用已经提到的工具“sar”。你可能有一个基于 RAM 的文件系统吗?那么也许“iostat”也可以提供更多信息。 (2认同)

Mat*_*Ife 8

就应用程序而言,没有真正使用该内存。

您需要扣除代表页面缓存的“缓存”值,以更好地了解您的实际内存使用量在程序使用方面的情况。

基本上这是很好的内存管理,这就是你想要的。

有关更多信息,请参阅此处的链接:http : //www.linuxatemyram.com/