Нужна помощь с производительностью Java ProcessBuilder под Solaris - PullRequest
4 голосов
/ 27 января 2011

Мой вопрос: разделяет ли JVM какой-либо ресурс, связанный с многопоточностью или процессами, который может привести к резкому повышению производительности ProcessBuilder через месяц или более при нормальном использовании?Использование java 6 update 21 для всех приложений.

За последние несколько месяцев мы заметили, что один сервер в нашем центре обработки данных (Sparc M4000 под управлением Solaris 10) может работать без проблем в течение 6-8 недель.,Быстро, однако, производительность приложения, использующего класс ProcessBuilder для запуска сценариев, сильно сказывается на производительности - процесс иногда возвращает ProcessBuilder.start более минуты.После перезагрузки и в течение нескольких недель после этого нормальное время возврата находится в диапазоне 10 с или, возможно, 100 миллисекунд.

Я написал отдельное небольшое приложение, которое создает 5 потоков, и каждый поток запускает команду 'ls', используяProcessBuilder 10 раз поочередно, затем я собираю статистику из этого, чтобы отслеживать исходную проблему.Это приложение закрывается после каждого запуска и запускается из cron только один раз в час.Обычно это занимает всего секунду или две.

Прошлой ночью время ProcessBuilder снова увеличивалось до минуты для каждого вызова ProcessBuilder.start после 45 дней безотказной работы и нормального поведения.

top показываетнет памяти или процессорного времени.Я попытался сделать jstack в тестовом приложении, но получил сообщение об ошибке «Не могу создать агент thread_db».

Есть идеи?

1 Ответ

4 голосов
/ 04 февраля 2011

У нас была похожая проблема в нашем приложении, которое работает в Linux. Код JVM в Linux использует форк, что означает, что адресное пространство отображается и копируется при каждом выполнении. Мы выполняли много небольших недолговечных процессов. Похоже, главное отличие от вашего приложения в том, что у нас была относительно большая куча (около 240 ГБ), поэтому я уверен, что это дало результат. Мы закончили реализацию нашего собственного кода порождения, используя JNI и posix spawn. Вот ссылка на вопрос / ответ: Замедление создания процесса под java

...