我们有一个在两个RHEL5.5系统上运行的Java应用程序。 我们最近陷入了需要为这两个系统增加更多内存的情况。
每个系统在5分钟内重新启动。 我们确认系统甚至通过我们的负载均衡设备进行连接。 免费的输出如下所示:
hostA的:
total used free shared buffers cached Mem: 3977340 3570688 406652 0 26472 3194816 -/+ buffers/cache: 349400 3627940 Swap: 2097144 0 2097144
hostB上:
total used free shared buffers cached Mem: 3977340 1369456 2607884 0 44200 860736 -/+ buffers/cache: 464520 3512820 Swap: 1048568 0 1048568
虽然我期望目前正在使用caching的内存有所不同,但极端的差异似乎相当令人不安。 有什么方法可以查看哪些文件当前有caching中的块或其他方式来确定为什么在两个彼此镜像克隆的系统中,在重启时间相对较短的负载平衡设置中,这样大的差异会是显而易见的?
我意识到它们并不是一个糟糕的状态,然而,我被要求提供一个理由或解释,为什么一个系统带来这么多的caching而另一个却没有。
其他虚拟机设置,如swappiness,min_free_kbytes等都是相同的。
我会采取什么步骤来解决这个问题的任何想法?
您可以使用lsof查找两个机器上的Java进程正在使用的文件,这可能有助于指出问题。
另外这将是一个不错的主意,在系统validation使用的内存和相应的caching内存更多的内存正在使用/caching实际上是由您的Java程序,而不是其他程序。
将进程列表与ps aux , top或任何您喜欢的方法进行比较。 除此之外,用slabtop查看内核内存使用情况,并比较这些内存使用情况。
好的,对于RHEL 5.5,你最可能使用ext3作为你的文件系统,但是例如XFS正在大量使用可用内存,而这一点在slabtop中变得非常明显,但是如果你只是盯着free内存和其他内存报告,就会感到困惑。