我正在维护一个管理 100 TPS API 流量的 linux 服务器。最初,它只有 8GB 内存。我们最近将内存翻了一番,JVM 内存消耗上限也翻了一番。可用内存仍然很低。
free -m
total used free shared buff/cache available
Mem: 15885 9909 156 15 5819 5584
Swap: 18431 127 18304
Run Code Online (Sandbox Code Playgroud)
如您所见,可用内存为 156MB。当缓存被清除时,free
内存会增加。但它仍然在几个小时内下降到相同的水平。这是正常行为还是我需要再次增加内存?
A.B*_*A.B 10
这是正常的行为。任何未使用的内存将用于缓存,以提高整体性能。如果其他事情需要该内存,则会自动释放该内存。除了检查此特定行为并将其显示给某人之外,您不必删除缓存。如果内存保持空闲状态,那么您的磁盘 I/O 活动可能会增加,您的应用程序可能会变慢。
另外我相信java在看到更多可用内存时自然会使用更多内存,并且需要大量参数来防止它这样做。
如果某些监控工具因此而对内存使用情况发出警报,您应该更正监控工具以提供实际可用内存的正确报告(例如:此处免费告诉您 5584 mb 可用,而 156 mb 空闲除外)。
附带说明一下,157mb 的交换正在使用中这一事实不是问题,只要它没有换入和换出(可以使用 进行检查vmstat
)。这意味着为实际活动提供了 157mb 的更多内存。这仍然是值得关注的事情。