我管理的一台 Linux 服务器最近出现了严重的性能下降,每次重启几周后尤其明显。特别是分配给该机器的 Jenkins 作业在重启几周后开始超时,此时所有执行都很缓慢,例如 ssh 需要 10-15 秒才能连接到机器。
该命令的输出uname
是
root@_____:~# uname -a
Linux _____ 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
查看vmstat
并free
发现机器的几乎所有物理内存都处于使用状态,只有很少一部分用于缓存,并且只有很少一部分用于交换。
root@_____:~# free -m
total used free shared buffers cached
Mem: 3865 3686 179 0 12 282
-/+ buffers/cache: 3391 473
Swap: 4102 504 3597
root@_____:~# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 2 953288 217960 6344 232268 41 35 111 106 0 0 42 3 52 3 0
top
然而,报告称,即使是系统中最大的内存消耗者也只使用了可用内存的个位数百分比
root@moose:~# ps aux --sort -rss
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
regress+ 6766 13.1 6.1 1894448 245188 ? Sl 10:10 5:25 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java _____
regress+ 22796 1.1 3.1 2552832 126600 ? Sl Apr07 11:17 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java _____
regress+ 17199 0.6 0.5 188952 23560 ? Dl 10:51 0:00 _____
regress+ 23497 0.5 0.5 3057724 21764 ? Sl 06:26 1:29 java _____
我目前的理论是某种资源泄漏锁定了大量物理内存,导致系统不稳定并变慢。这可能是导致性能下降的原因吗?如果是,我该如何最好地解决这个问题?如果不是,那么导致问题的另一个可能原因是什么?
答案1
是否加载了非标准内核模块?内核分配可能占用了内存。