Явное приложение, которое я создал, по-видимому, использует разделяемую память, что мешает развертыванию других программ в среде клиента unix.
Никогда не было необходимости использовать какую-либо общую память, и мне нужно определить, где она потребляется.
Обзор программы:
-Generic исполняемый jar, который будет читать конфигурационный файл, выполняет сценарий командной строки unix и помещает конечность вывода в службу REST, размещенную в другом месте. Это повторяется каждый час (он контролирует здоровье окружающей среды)
-There - это 3 отдельных экземпляра jar, работающих в одно и то же время, но чтение различных файлов конфигурации. Ни при каких обстоятельствах они не делятся ни с файлами, а файлы журнала, которые они создают, являются отдельными.
-All BufferedReaders, InputStreams и т.д. Открыты и закрыты соответствующим образом.
После запуска программы проверьте его присутствие в общей памяти, сгладив идентификаторы процессов в ipcs -a, где все они перечислены.
Есть ли какие-либо предупреждающие знаки, вспыхивающие для людей, знакомых с IPC и java? Есть ли какой-либо вариант выполнения, который я могу использовать для предотвращения использования общей памяти?
ура
Редактировать:
@Aaron - Нет ошибок, но когда другие программы развертываются в среде, они проверяют процессы с использованием общей памяти. Если есть процесс, он остановит развертывание. Должна быть причина для этой проверки, но я этого не знаю...
Я могу представить пару возможных объяснений:
По-видимому, если вы запускаете JVM с -XX: UseLargePages включена, JVM использует общую память: см. Невозможно создать JVM с помощью -XX: + UseLargePages enabled
Если два JVM открывают MemoryMappedByteBuffer
в одном файле, они эффективно используют общую память: см. Java NIO - Файлы с отображением памяти
Также можно создавать собственные библиотеки JNI, которые используют shmat
и т.д. Для создания разделяемых сегментов памяти. Одно из ваших приложений сторонних разработчиков Java-приложений могло бы сделать это за кулисами.
Что касается того, как найти виновника, возможно, вам стоит попробовать запустить java
под strace
. В этом блоге вы узнаете, как:
Однако переход от необработанных следов к определенному диагнозу может быть непростым.
Когда другие программы развертываются в среде, они проверяют процессы с использованием общей памяти. Если есть процесс, он остановит развертывание. Должна быть причина для этой проверки, но я этого не знаю...
Это может быть защита от подрывной проверки некоторых лицензий на использование приложений... или что-то в этом роде. Я был бы склонен говорить с поставщиками/поставщиками этих программ, чтобы выяснить, почему их программное обеспечение терпит неудачу. Спросите >> их << для приемлемого обходного пути, чтобы их код мог сосуществовать с Java и/или вашим Java-приложением.