Настоящий контекст здесь - elasticsearch, но мне любопытно, что произойдет в более общем плане (minecraft / jetty / и т. Д.). Когда процессу ОС не хватает системной памяти, вы можете увидеть это поведение, проверив свопинг. Если коробка не меняет местами, ей не нужно больше памяти (я считаю, что это всегда так).
Что бы ОС увидела, если бы JVM не хватило слишком низкого -Xmx
стоимость? Будет ли JVM тратить время на управление внутренними страницами? Будет ли это восприниматься как ожидание / загрузка процессора? Или единственный способ быть уверенным - это использовать инструменты, поддерживающие Java, для доступа к JVM и более точного наблюдения?
Поскольку Java - это JVM, она выполняет внутренние операции с памятью. ОС предоставляет java -Xmx блок памяти, и все. Такой инструмент, как jstat, может заглянуть внутрь JVM и сказать, сколько времени тратится на накладные расходы сборщика мусора, как и Java-агенты, такие как NewRelic.
Вы также можете установить -verbose: gc, чтобы JVM регистрировала поведение GC.
Если у вас нет какого-либо из этих инструментов, нехватка памяти в java-процессе часто будет проявляться как процесс, который использует много ЦП - JVM постоянно выполняет сбор мусора, что нагружает ЦП.