Как предотвратить последовательный шаблон Java-паузы в Linux Mint

У меня есть приложение Java, работающее на Linux Mint. Каждую минуту программа показывает очень заметное замедление - пауза. Пауза составляет от 3 до 4 секунд. Когда мы запускаем другие экземпляры той же программы, они также делают паузу от 3 до 4 секунд каждую минуту. Каждая программа останавливается на разные секунды минуты.

последнее обновление:

После последнего обновления (ниже) при увеличении количества потоков пула проблема с графическим интерфейсом исчезла. После работы в течение ~ 40 часов мы наблюдали утечку нити в причале.HttpClient блокирование-ПОЛУЧИТЬ (Request.send()) вызов. Чтобы объяснить механику, используя класс Executor: основной поток запускается каждые несколько минут. Он использует Executor для запуска независимого потока для вызова хоста с помощью команды HTTP GET, Jetty'sHttpClient.request.send().

Приблизительно после 40 часов работы количество потоков, запущенных вHttpClient бассейн. Так что в течение 40 часов одни и те же темы работали нормально. Рабочая гипотеза заключается в том, что примерно в это время один или несколькоsend() вызовы не завершены или истекло время ожидания и не вернулись в вызывающий поток. По сути, эти / эти потоки подвешены внутри Jetty Client.

При просмотре каждого регулярного цикла вjVisualMV мы видим нормальное поведение каждого цикла; некоторые потоки HttpClient запускаются для хоста GET, выполняются и уходят за считанные секунды. Также на мониторе находятся около 10 ниток, принадлежащих джеттиHttpClient пул потоков, которые были «представлены» для (сейчас) 10 часов.

Ожидается, что произошла какая-то ошибка в базовой клиентской или сетевой обработке. Я удивлен, что не было никакого исключения тайм-аута или исключения программирования. Есть несколько четких вопросов, которые я могу задать сейчас.

Что может случиться внутриHttpClient это может просто повеситьRequest.send()Какой тайм-аут на обратный звонок? Я думаю, что все еще будут абсолютные тайм-ауты или проверки на блокировку и т. Д. (Нет?)Может ли система ввода-вывода зависнуть и оставить зависание потока вызывающего абонента - пока Java послушно ...Запускает поток менеджера в назначенное время, затемСледующийHttp.Request.send() случается,Новый поток (ы) из запуска пула для следующей отправки (как, кажется, произошло).Хотя раньшеsend() застрял в подвешенном состоянииМогу ли я ограничить или как-то иначе очистить эти застрявшие темы?

Это происходило до того, как мы увеличили размер пула потоков. Случилось так, что «вина» стала более сфокусированной на проблемной области. также мы с подозрением относимся к базовой системе, потому что у нас также были блокировки с ApacheHttpClient снова примерно в то же (не конкретное) время суток.

(предыдущее обновление) ...

Наблюдаемое паузаJavaFX GUI не обновляет / не обновляет; часы дисплея (textView),setText() вызов был зарегистрирован во время остановки с двумя x обновлениями в секунду (это новая информация). Часы не обновляются (в Mint Linux), они продолжают обновляться при работе в Windows. Чтобы предупредить меня, что я повторяю свои вопросы о GC, журналах, исследованиях и т. Д., Ответ будет таким же; Мы провели обширную диагностику в течение нескольких недель. Проблема безошибочно связана с: Linux JVM / Linux Mint / Threads (для JavaFX). Другая часть новых данных заключается в том, что увеличение числа пулов потоков на +2, по-видимому, устраняет «заморозку» - необходимо дополнительное тестирование, чтобы подтвердить это и настроить числа. Вопрос, однако, "Какие параметры определяют разницу между двумя платформами?"

Мы запустили несколько экземпляров программы в Windows в течение нескольких дней без пауз. Когда мы работаем на платформе Mint Linux, мы видим замораживание, оно очень последовательное.

Программа имеет несколько запущенных потоков по расписанию. Одна нить открывает интернет для http-сокета. Когда мы комментируем эту область, пауза исчезает. Однако мы не видим такого поведения при использовании Windows. Эксперименты указывают на что-то специфическое для подсистемы ввода-вывода Mint, планирования linux, Linux Java 8 JVM или некоторого взаимодействия между ними.

Как вы можете догадаться, на этом мы рвем волосы. Например, мы отключили ведение журнала и пауза осталась. Мы возобновили запись в журнал и просто сделали один звонок на http-сервер, делая паузу каждые 60 секунд с тем же счетом секунд. Это происходит даже тогда, когда мы не делаем никакой другой обработки. Мы пробовали разные http-библиотеки и т. Д. Кажется, очень ясно, что это в JVM или Linux.

Кто-нибудь знает способ решить эту проблему?

Ответы на вопрос(0)

Ваш ответ на вопрос