Управление максимальной автономной работой Java в Linux - PullRequest
0 голосов
/ 26 марта 2010

Мы разработали отдельную программу на Java. Мы настроили в нашем Linux (RedHat ES 4) cron график выполнения этого автономного Java каждые 10 минут . Каждый автономный иногда может занять больше 1 часа, или иногда даже в течение 5 минут.

Моя проблема / решение, которое я ищу, состоит в том, в любое время не должно превышать, например, 5 процессов. Так, например, даже до запуска отдельного Java / процесса, если уже запущено 5 процессов, тогда этот процесс не должен начинаться; в противном случае это косвенно начнется создание OutOfMemoryError проблем. Как мне это контролировать? Я также хотел бы сделать этот предел 5 процессов настраиваемым.

Другая информация:
Я также настроил -Xms и -Xmx настройки размера кучи.

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

Я также слышал о Java Service Wrapper . О чем это все?

Ответы [ 3 ]

8 голосов
/ 26 марта 2010

Вы можете создать 5 пустых файлов (с именами «1.lock», ..., «5.lock») и заставить приложение заблокировать выполнение одного из них (или выйти, если все файлы уже заблокированы).

1 голос
/ 26 марта 2010

Во-первых, я предполагаю, что вы используете слова «нить» и «процесс» взаимозаменяемо. Две идеи:

  1. Пусть cron job будет скриптом, который проверит текущие запущенные процессы и посчитает их. Если пороговое значение меньше порога, порождает новый процесс, иначе завершается, здесь в вашем скрипте может быть задано пороговое значение.
  2. Пусть основной метод в вашем исполняемом java-файле проверит некоторый внешний ресурс (файл, таблица базы данных и т. Д.) На предмет количества запущенных процессов, если он ниже порогового значения, прирост и запуск процесса, в противном случае завершите работу (это предполагает основного метода не будет достаточно, чтобы вызвать вашу проблему OOME). Вам также может понадобиться использовать соответствующий механизм блокировки на внешнем ресурсе (хотя, если ваша работа выполняется каждые 10 минут, это может быть излишним), здесь вы можете определить порог в .properties или в каком-либо другом файле конфигурации для вашей программы.
0 голосов
/ 26 марта 2010

Java Service Wrapper помогает настроить Java-программу в качестве службы Windows или демона * nix. На самом деле это не относится к проблеме параллелизма, которую вы рассматриваете - наиболее близким является параметр конфигурации, который запрещает одновременные экземпляры, если это служба Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...