Сколько ядер процессора может использовать один процесс Java? - PullRequest
5 голосов
/ 09 июня 2011

Я провожу некоторые тесты производительности, чтобы определить время отклика и способность обрабатывать параллелизм с различными конфигурациями cpu / ram / os. Одна интересная находка, с которой я столкнулся, заключается в том, что похоже, что один jvm работает лучше с 4 ядрами, чем с 2 ядрами (что неудивительно), но добавление большего количества ядер помимо 4-го ядра не приводит к каким-либо существенным улучшениям. , Но затем добавление другого экземпляра jvm с балансировщиком нагрузки (то же оборудование) привело к значительному улучшению.

Похоже, что отдельный процесс ограничен в количестве ядер, которые он может использовать, возможно, из-за ограничения количества потоков os, которые процесс может порождать одновременно. Это 64-битная среда.

Я использую tomcat и попытался изменить атрибут "maxThreads", но это не имело значения для количества параллелизма, который я собираюсь обработать.

Любая другая причина, по которой это можно объяснить?

1 Ответ

2 голосов
/ 09 июня 2011

Как правило, Java-приложение пытается планировать каждый активный поток на отдельном ядре.Это включает в себя потоки GC.Если приложение изначально не было связано с ЦП, то добавление большего количества ядер не имело бы никакого значения, так как потоки чем-то заблокированы.

Для веб-приложения все становится немного сложнее.Увеличение размера пула потоков не будет иметь никакого значения, если потоки ожидают чего-то другого, например, базы данных из пула соединений с базой данных.Вам необходимо внимательно изучить балансировщик нагрузки и конфигурации Tomcat.Если они не настроены должным образом, очень легко описать поведение, которое вы описываете.

Я бы не слишком беспокоился о том, что JVM ограничена количеством потоков, которые она может иметь.Я регулярно вижу более 600 потоков в каждой JVM в нашей производственной системе.Мы используем 8 основных машин, и запросы имеют короткую продолжительность, поэтому большинство этих потоков находятся в состоянии ожидания ввода / вывода.

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