可以top
以批处理模式运行以定期报告内存大小,以查看发生异常情况时谁在使用内存。乳宁sar
在批处理模式下应提供对内存的使用,以及相关的I / O一些很好的诊断。运行munin
以监视系统应该为您提供一个图形,其中详细说明了正在使用的内存。这可能会有所帮助。
您可以使用limits.conf来限制程序的最大核心大小。正确设置,这将杀死所有正在泄漏内存的程序。这适用于pam_limits模块。限制也可以通过ulimits
命令设置。
您正在运行一些程序,这些程序可能会占用大量内存。您可能会看到的一些东西包括。
- 在下面运行的编程不良的应用程序
apache2
可能会泄漏内存。发生这种情况时,您应该看到内存大小增加。您可以通过将apache2设置MaxRequestsPerChild
为100左右来调整apache2在一定次数的使用后回收儿童。如果这样可以解决问题,则需要解决泄漏。我先看。
- MySQL可能会尝试将数据加载到内存中。如果您的内存中有大量数据,则可能会导致一些异常,但不应像您看到的那样剧烈。
- 如果安装了大型
tmpfs
文件系统,则在使用时未删除文件的情况下可能会泄漏内存。大而寿命长的文件也可能是一个问题。
- 如果问题是在一天的大约同一时间发生的,则您可能有一个计划的程序正在泄漏内存。
- 如果您有一个分配共享内存的程序,但是在退出之前没有释放它,则将有相对不可见的内存泄漏。如果共享内存被锁定在内存中,则可能会强制交换。可用共享内存的数量通常相对有限。
- Liquidsoap + icecast捆绑包可能会遇到使用内存的缓冲问题。我没有使用过这种组合,所以我不确定这种外观如何。
正常的内存使用情况:空闲内存并不是您想要的很多东西。如果您的系统已启动很长时间并且有很多可用内存,则可能是错误的。每次读取或写入文件时,这些块都会进入缓冲区缓存。这将减少您的可用内存,这是一件好事。系统将保留足够的可用空间来启动一些程序,而无需在其他地方寻找内存。由于许多程序快速运行,因此它们的内存将在停止运行时返回到空闲池。
当您读取缓冲区高速缓存中的文件时,不需要磁盘访问,并且可以从缓冲区高速缓存中解析读取。写入使用类似的机制。如果您的系统需要内存,则缓冲区高速缓存是使用的最早位置之一。大多数缓冲区可以立即释放。
如果发生内存泄漏,您将看到可用内存和缓冲区都开始减少。这仍然不是一个严重的问题,因为泄漏的内存最终应移至交换空间。在您填充交换空间并将剩余的可用空间减少到无法启动程序之前,您的系统仍然可以正常运行。通常可以使用少量的交换空间。