Предотвращение использования разделяемой памяти

1

Явное приложение, которое я создал, по-видимому, использует разделяемую память, что мешает развертыванию других программ в среде клиента unix.

Никогда не было необходимости использовать какую-либо общую память, и мне нужно определить, где она потребляется.


Обзор программы:

-Generic исполняемый jar, который будет читать конфигурационный файл, выполняет сценарий командной строки unix и помещает конечность вывода в службу REST, размещенную в другом месте. Это повторяется каждый час (он контролирует здоровье окружающей среды)

-There - это 3 отдельных экземпляра jar, работающих в одно и то же время, но чтение различных файлов конфигурации. Ни при каких обстоятельствах они не делятся ни с файлами, а файлы журнала, которые они создают, являются отдельными.

-All BufferedReaders, InputStreams и т.д. Открыты и закрыты соответствующим образом.


После запуска программы проверьте его присутствие в общей памяти, сгладив идентификаторы процессов в ipcs -a, где все они перечислены.

Есть ли какие-либо предупреждающие знаки, вспыхивающие для людей, знакомых с IPC и java? Есть ли какой-либо вариант выполнения, который я могу использовать для предотвращения использования общей памяти?

ура

Редактировать:

@Aaron - Нет ошибок, но когда другие программы развертываются в среде, они проверяют процессы с использованием общей памяти. Если есть процесс, он остановит развертывание. Должна быть причина для этой проверки, но я этого не знаю...

  • 1
    Почему это мешает другим программам? Вы получаете ошибки? Или это больше "О, что-то кажется странным ... что-то с этим делать!"?
  • 0
    Разделяемая память бывает разных видов и широко используется программами Unix всех видов. Пожалуйста, укажите, что вы считаете аномальным поведением. Я подозреваю, что вы просто видите общий пейджинг общего исполняемого кода (автоматически) или страницы, общие для потоков в той же JVM.
Показать ещё 1 комментарий
Теги:
memory
ipc
shared

1 ответ

1
Лучший ответ

Я могу представить пару возможных объяснений:

  • По-видимому, если вы запускаете JVM с -XX: UseLargePages включена, JVM использует общую память: см. Невозможно создать JVM с помощью -XX: + UseLargePages enabled

  • Если два JVM открывают MemoryMappedByteBuffer в одном файле, они эффективно используют общую память: см. Java NIO - Файлы с отображением памяти

  • Также можно создавать собственные библиотеки JNI, которые используют shmat и т.д. Для создания разделяемых сегментов памяти. Одно из ваших приложений сторонних разработчиков Java-приложений могло бы сделать это за кулисами.


Что касается того, как найти виновника, возможно, вам стоит попробовать запустить java под strace. В этом блоге вы узнаете, как:

Однако переход от необработанных следов к определенному диагнозу может быть непростым.


Когда другие программы развертываются в среде, они проверяют процессы с использованием общей памяти. Если есть процесс, он остановит развертывание. Должна быть причина для этой проверки, но я этого не знаю...

Это может быть защита от подрывной проверки некоторых лицензий на использование приложений... или что-то в этом роде. Я был бы склонен говорить с поставщиками/поставщиками этих программ, чтобы выяснить, почему их программное обеспечение терпит неудачу. Спросите >> их << для приемлемого обходного пути, чтобы их код мог сосуществовать с Java и/или вашим Java-приложением.

  • 0
    Много пищи для размышлений, Стивен, спасибо. Я уже веду переговоры с поставщиками, чтобы разобраться в работе. Я просто хотел заранее найти решение в моем конце проблемы :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню