Java-потоки спят в Linux - PullRequest
       13

Java-потоки спят в Linux

2 голосов
/ 06 января 2012

Я кодирую программное обеспечение, похожее на «демон», которое выполняет некоторые операции в цикле (вход в систему где-то, выполнение некоторых операций и выход из системы) с использованием многопоточности.Мое приложение запускает около 1000-2000 потоков, и эти потоки работают.Итак, вот мой журнал htop вначале ~ 10 минут: Before

Итак, на скриншоте выше видно, что работает некоторое количество потоков (упорядоченных по зеленому статусу R)

Ночерез некоторое время это происходит: After

Как вы можете видеть, периодически запускается только один-три потока (кажется, что система замедляет потоки или делает их спящими).Приложение запускает потоки для небольшой работы (это занимает от 10 секунд до 1 минуты) и после того, как поток умирает. Исправлено, что Исполнитель пула потоков создает новые потоки для выполнения той же работы.Поэтому, насколько я понимаю, скорость выполнения потоков должна быть одинаковой.Но это замедляется через ~ 10-20 минут.Обычно работает потоки в htop до ~ 500-200-300-100 потоков и до ~ 3-30-60 потоков каждый раз.Но после этих 10-20 минут только один поток выполняется.Так можете ли вы сказать мне, что происходит и как это исправить?

1 Ответ

1 голос
/ 07 января 2012

Потоки обращаются к mysql? Я вижу, что он работает на 100% ... если поток ожидает ввода-вывода, ядро ​​позволит ему спать, пока данные не будут готовы. Если он ожидал на диске, вы, вероятно, увидите, что это отражается на среднем значении нагрузки, поэтому он может ожидать сетевых данных (правильно ли закрываются ваши сокеты и т. Д.? Заблокированы ли вы с какого-либо сервера, к которому вы подключаетесь удаленно? зависание удаленного сервиса?) или данные mysql (ваш пул соединений слишком мал? mysql не способен обработать нагрузку?).

...