У нас есть служба поддержки, открытая у поставщика программного обеспечения (Atlassian ...)
В настоящее время мы обсуждаем, почему мы должны увеличить физическую память и размер кучи JVM, когда текущая ситуация следующая:
- Сервер / ВМ имеет 6 ГБ физической ОЗУ
- Он использует не более 3 ГБ из этого, так как остальное используется для буферов ОС и кеша (я должен был объяснить им это: https://www.linuxatemyram.com/)
- В JVM настроен максимальный размер кучи 2G, после сборки мусора мы используем около 600 МБ памяти кучи
Проблема, с которой мы сталкиваемся, это редкие и случайные ситуации нехватки памяти следующего вида:
mmap failed for CEN and END part of zip file
...
2019-04-04 14:41:31,937 http-nio-8080-exec-11 ERROR [o.a.c.c.C.[.[localhost].[/].[action]] Servlet.service() for servlet [action] in context with path [] threw exception [java.lang.OutOfMemoryError] with root cause
java.lang.OutOfMemoryError
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:219)
at java.util.zip.ZipFile.<init>(ZipFile.java:149)
at java.util.jar.JarFile.<init>(JarFile.java:166)
at java.util.jar.JarFile.<init>(JarFile.java:103)
... 11 filtered
и т.д.
Конечно, они придерживаются своего документа , в котором говорится, что JVM предоставляет нечестивые объемы памяти в определенных сценариях, но неясно, должны ли, например, все условия быть выполнены. Допустим, у вас есть система с 2000 пользователями, но, может быть, только 50 активных одновременно. Это большой масштаб?
Также в этом документе я не понимаю, почему в системе должно быть в четыре раза больше физической памяти по сравнению с максимальной кучей.