Одно приложение, с которым мне приходится иметь дело, регулярно запускает помощников оболочки, используя ProcessBuilder
.По непонятным причинам он все еще работает на 32-битной JVM (Sun, 1.6.0.25), хотя базовая ОС имеет 64-битную версию (RHEL 5.x).
Это приложение удовлетворяет памяти, поэтомуМаксимальный размер кучи - 3 ГБ, а permgen - 128 МБ.
Однако ... В случайные моменты помощники оболочки не запускаются.Не из-за OutOfMemory, а из-за ENOMEM ... Единственная причина, по которой я это вижу, - это отсутствие адресного пространства.
Ну, конечно, но в то же время память на самом деле не находится под давлением и top
сообщает, что фактическое использование памяти JVM и размер его виртуального набора даже не составляют 3 ГБ ...
Глядя на то, что можно посмотреть в коде Process
, я вижу, что ядрометод называется forkAndExec()
, что в значительной степени самоочевидно ... Из того, что я знаю об обоих системных вызовах, он просто не должен потерпеть неудачу.Но это так.И не всегда.
Почему?
edit : следует отметить, что используется neo4j.Кажется, он часто использует FileChannel, может ли это быть причиной отсутствия адресного пространства?