Извинения за то, что вы не используете ваш точный SQL
Я использовал этот запрос для преодоления предупреждения Mysql.
SELECT count(*) AS cnt, `regions_id`
FROM regionables
WHERE `regionable_id` = '115' OR `regionable_id` = '714'
GROUP BY `regions_id`
HAVING cnt > 1
обратите внимание на ключ для меня:
count(*) AS cnt
Любой совет будет зависеть от ваших конкретных обстоятельств. 10 JVM на 32 ядрах будут предлагать по 3 потока каждый (игнорируя потоки сбора мусора, задачи таймера и т. Д.)
У вас также есть другие задачи. Планировщик гарантирует, что они работают, но нужно ли им реагировать? Более отзывчивый, чем JVM? Если вы используете Linux / Unix, вы также можете использовать приоритизацию (через nice
), чтобы гарантировать, что определенные процессы не запугают CPU.
Наконец, вы используете 10 JVM. Будет ли это причиной пейджинга? Если это так, это будет медленным, и вам может быть лучше работать с меньшим количеством JVM, чтобы не потреблять столько памяти.
Просто убедитесь, что ваши ключевые переменные открыты и настроены, и измерьте различные сценарии в порядке найти оптимальный.
К сожалению, это трудно понять, поскольку программы обычно не знают, что еще есть или может происходить в одном окне.
«простой» выход состоит в том, чтобы настроить размер пула. это позволяет пользователю, который управляет программой / box, определять, сколько потоков будет выделено вашей программе (предположительно, используя свои знания об общей рабочей нагрузке коробки).
более сложным решением было бы попытаться программно определить текущую рабочую нагрузку поля и соответственно выбрать размер пула. эффективность этого решения зависит от того, насколько точно вы можете определить рабочую нагрузку и потенциально адаптироваться по мере ее изменения с течением времени.
Как я могу определить размер пула для каждой программы / JVM?
blockquote>Вы хотите, чтобы количество потоков приблизилось к 99% использованию и не более .
Самый простой способ сбалансировать работу - это запустить процесс один раз, одновременно обработать несколько файлов и использовать только один пул потоков. Вы можете настроить процесс как службу, если вам нужно запускать файлы через командную строку.
Если это невозможно по какой-то причине, вам нужно будет оценить, насколько пулы потоков должны быть сокращены. Попробуйте запустить один процесс и посмотрите на использование. Если говорят 40%, то я подозреваю, что десять процессов превысили 400%. то вы можете уменьшить размер пула в 4 раза.
Попробуйте выполнить grepping процессов, проверить диспетчер вершин / задач и мониторы производительности, чтобы проверить, действительно ли эта реализация влияет на вашу машину.
В этой статье содержится интересная информация о том, что вы пытаетесь реализовать: http://www.ibm.com/developerworks/library/j-jtp0730/index.html