Запуск кода Java в кластере Sun Grid Engine

Я выполняю 500 заданий в кластере Sun Engine, и у меня возникли некоторые проблемы (администратор кластера приостановил мои задания, потому что я перегрузил ЦП). Код написан на Java.

Когда я запускаю одно из заданий на своем ПК (Ubuntu 14.04) и использую команду htop, чтобы посмотреть, что происходит, я получаю следующее:

Я видел, что это не отдельные процессы, а потоки. Код не генерирует потоки, но они, вероятно, являются потоками Java (например, сборщик мусора). Первая проблема: когда я запускаю тот же тест в кластере и использую htop, у меня гораздо больше потоков/процессов, около 50 (только для одного задания). Кто-нибудь знает, почему это может происходить?

Я использую следующие параметры с qsub:

qsub -t 1-500 -l h_rt=05:00:00 -l h_cpu=05:00:00 -l h_vmem=6G -e /some_path/ -o /some_path/ -N all_runs -cwd -m as -M mail@mail ./run.sh

run.sh у меня указаны все задания).

С помощью этой команды qsub каждое задание получает 1 слот, а загрузка процессора иногда составляет 150-200% (-> 1 слота недостаточно). Я видел, что кластер имеет параллельную среду, поэтому каждому заданию можно назначить больше слотов. Это можно сделать, добавив -pe smp 4 (или другое число) к команде qsub.

Как узнать, сколько слотов вам нужно? И -pe smp 4 будет строго ограничивать максимум 4 слота? Я имею в виду, когда у задания есть 1 слот, а использование ЦП составляет 200%, это может повлиять на задания других пользователей. Я хочу быть уверен, что этого не может быть.

Если какой-то важной информации не хватает, пожалуйста, сообщите мне, и я добавлю ее.


person Tomas    schedule 24.04.2015    source источник
comment
Возможно, сначала попробуйте это, чтобы узнать, можете ли вы ограничить количество потоков, доступных для java: stackoverflow.com/questions/17341883/. В идеале, однако, вы хотели бы узнать больше о том, как java-программа использует потоки, чтобы вы могли указать правильный номер в параллельной среде SGE.   -  person Vince    schedule 24.04.2015
comment
Хотя это правда, что java автоматически создает несколько потоков jvm, их не должно быть более 5 или 6. Используете ли вы какие-либо внешние библиотеки или средства связи? (например, сокеты, jdbc, jms,...)   -  person bvdb    schedule 25.04.2015
comment
Нет, я не использую никаких внешних библиотек. Я запустил простую программу (цикл, добавляющий 1 к переменной на каждой итерации), и появилось такое же количество потоков...   -  person Tomas    schedule 26.04.2015
comment
Чтобы продолжить, qsub в отсутствие параллельного env. предположим, 1 ядро ​​на задание. Таким образом, если JVM создает несколько потоков, которые, в свою очередь, будут использовать несколько ядер, это может привести к превышению лимита подписки на узле, выполняющем задание, поэтому администратор будет обеспокоен. См. здесь для ограничения потоков JVM в GC: oracle .com/technetwork/java/javase/. Это предполагает, что GC с использованием нескольких потоков является проблемой.   -  person Vince    schedule 27.04.2015