У меня возникла проблема с недавним переходом клиента на Linux (64-разрядную версию) при запуске процесса Java.
Процесс порождает тысячи потоков, большинство из которых имеют идентификатор futex. Я искал фьютекс (быстрый мьютекс пользовательского пространства), и это конструкция Linux для реализации базовой блокировки.
Код недавно изменился, чтобы реализовать BlockingQueue и ExecutorService для порождения дочерних потоков, но количество дочерних потоков контролируется настройкой конфигурации, и я могу доказать, что этот конкретный механизм не выходит из-под контроля. Я могу только предположить, что что-то внутреннее в JVM порождает все эти потоки из-за BlockingQueue и какой-то блокировки?
Так может ли кто-нибудь сказать мне, как узнать, что на самом деле представляют собой эти потоки, и что я могу сделать, чтобы контролировать/останавливать их?
Ниже приведены несколько строк списка процессов; фактический список до того, как процесс должен был быть убит, составлял более 13000 строк.
0 - 54321 447 446 1 - - - 5953085 - ? 00:15:50 java
0 S 54321 - - 0 82 2 - - futex_ - 00:00:00 -
1 S 54321 - - 0 82 2 - - futex_ - 00:00:00 -
1 С 54321 - - 0 82 2 - - futex_ - 00:00:00 -
1 С 54321 - - 0 82 2 - - futex_ - 00:00:00 -
1 С 54321 - - 0 82 2 - - futex_ - 00:00:00 -
1 С 54321 - - 0 82 2 - - futex_ - 00:00:00 -
1 С 54321 - - 0 82 2 - - futex_ - 00:00 :00 -
1 S 54321 - - 0 82 2 - - futex_ - 00:00:00 -
Любые предложения с благодарностью принимаются.