我正在运行一个 Linux 服务器,它显示出奇怪的内存使用模式,我正在尝试调查。
根据 munin 的说法,在正常运行期间,大约有 200MB 的内存用于应用程序,但时不时地(可能每隔几天),内存会突然增加约 1GB,如下图所示:
我一直在尝试寻找导致这种情况的原因,但我不知道原因是什么。munin 将此内存归因于“应用程序”这一事实表明,其中一个正在运行的进程正在使用大量内存,但当这种情况发生时查看 top 会发现,没有任何进程使用如此多的内存;事实上,当这种情况发生时,内存消耗最多的前 15 个进程根本没有变化,而最上面的进程仅使用了 2.2% 的内存。此外,ps 的内存信息加起来并没有这么多内存,而是大约 200MB。
增加的高度通常是相同的,并且如本例所示,它会在几个小时后消失。
我发现触发此行为的可靠方法是使用 wget 通过网络的 ssh 隧道将大文件(1.4G)下载到本地磁盘(单独的网络活动不会触发它)。
为了更详细地了解内存使用情况,我开始/proc/meminfo
每 10 秒记录一次,并进行了包含这些数据图表的 tarball。导致出现此问题的行为的下载开始于 10:35:32,并于 10:38:53 完成。原始日志数据也包含在 tarball 中。
在 中/proc/meminfo
,没有任何值上升到足以解释可用内存的大幅减少(这实际上是 munin 归因于“应用程序”的原因),这让我一头雾水。munin 报告的已用内存量也由 free 和 top 报告,但进程列表中没有任何进程可以解释如此高的内存使用率,或下载文件时内存使用量的突然增加。
我想了解的是:
- 如果没有任何特定进程使用增加的内存,那么内存使用率以这种方式表现是正常的吗?
- 还有哪些其他未考虑到的记忆来源
/proc/meminfo
?
或者这可能是系统被入侵的迹象?
答案1
munin 非常适合制作图表,但它无法告诉您哪个应用程序导致了负载。
可以使用 atop - 高级顶部。
atop 记录原始日志文件,然后人们可以打开这样的文件并以交互方式来回查看时间并查看在特定时刻发生的情况。
ator -r /var/log/atop_oame_date
比使用t
和T
密钥你可以回到可疑活动的时间,看看那里发生了什么。
答案2
您的系统没有物理内存压力。因此,当您尝试传输 1.4GB 的文件时,它会使用 1.4GB 的内存。您的系统有两种选择 - 要么完全浪费内存,要么低效地使用内存。它选择后者。这是正常行为。