这里的真实环境是elasticsearch,但我很好奇会发生什么更普遍(minecraft /docker/等)。 当OS进程超出系统内存时,您可以通过检查swap来看到这种行为。 如果一个盒子不交换,那么它不需要更多的内存(我相信这总是真实的)。
操作系统将会看到JVM是否-Xmx值? JVM会花时间pipe理内部页面吗? 这会遇到CPU等待/负载? 或者是唯一可以确定的方法是使用支持java的工具来访问JVM并更精确地观察?
由于Java是一个JVM,它在内部处理内存操作。 操作系统给java一个-Xmx的内存块,就是这样。 像jstat这样的工具可以查看JVM的内部,并告诉你在GC开销上花了多less时间,像NewRelic这样的Java代理也是如此。
您还可以设置-verbose:gc来让JVMloggingGC行为。
如果缺less这些工具,Java进程中的低内存通常会显示为一个正在使用大量CPU的进程–JVM不断地进行垃圾收集,这是CPU很重的问题。