Первое, которое я сделал бы, если это возможно, отключают сетевой кабель, сделайте все безопасные шаги, особенно примените все пакеты текущих исправлений/сервера, включите программные брандмауэры и затем включите сетевой кабель назад. незащищенные поля только длятся о получасе в дикой природе, особенно поля окон.
Если Ваше использование Солярис, Вам посчастливилось смочь использовать dtrace. Это позволит Вам представлять к уровню ядра и получать больше подсказок о том, как jvm взаимодействует с ядром.
Больше информации здесь
http://www.devx.com/Java/Article/33943
Если Вы хотите, узнают то, что Вы jvm делает затем выполненный dtrace с датчиками jvm.
http://java.sun.com/javase/6/docs/technotes/guides/vm/dtrace.html
http://www.solarisinternals.com/wiki/index.php/DTrace_Topics_Java#DTrace_Topics:_Java
это даст Вам намного больше значимого вывода относительно Вашей программы. Взгляните на раздел 'Method Times'.
http://www.princeton.edu/~unix/Solaris/troubleshoot/diskio.html
замечательный гид для нахождения i/o горлышки бутылки.
это может также помочь http://prefetch.net/blog/index.php/2007/03/03/viewing-busy-code-paths-with-dtrace/
Нет никаких жестких правил при отслеживании проблем как это, но информацией является ключ!!. Если Вы следуете этим руководствам, Вы уверенно двигаетесь к становлению системным инженером ниндзя.
Вы можете использовать jprofiler http://www.ej-technologies.com/products/jprofiler/overview.html
это не открытый исходный код, однако я имел большой успех в разыскивании проблем производительности Java с ним.
Необходимо также выполнить Java vm и приложение с полным входом отладки. Если у Вас есть доступ к журналам ядра, затем проверяют их на необычные события.
Удачи.
Делает у кого-либо еще на отказе сервера есть некоторые подсказки ниндзя для проблем поиска неисправностей, таких как это. У меня есть свой собственный способ отладить, но было бы интересно знать что другой думать?
-----------------ОБНОВЛЕНИЕ--------------
Я посмотрел на трассировку снова, кажется, что Вы, кажется, делаете много resolvepaths.
Это должно быть зафиксировано. Вы используете очень длинный путь или работаете из каталога, который является symlinked. Попытайтесь удалить символьные ссылки или использовать hardlinks и посмотрите, получаете ли Вы лучшие результаты.
Делает приложение, делают партию обхода каталога, затем пытаются использовать полный путь, а не относительные пути.
Снова, просто идея' я имел по употреблению в пищу чизкейка. Выполненный dtrace с датчиками Java, которые должны выполнить развертку достаточно для наблюдения, какой урок Java посещает большую часть времени.
Удачи (снова). Не сдавайтесь теперь, я думаю, что мы очень близко к решению.
Это могло бы стоить смотреть с iostat, чтобы видеть, существует ли проблема, это заставляет Ваши доступы к диску быть медленнее, чем ожидалось. Загрузка нескольких тысяч классов не должна использовать много диска IO, особенно при выполнении его несколько раз так, чтобы блоки были в кэше.
Попробовать
iostat -nxtcmpz 3
пока Ваш тест работает, и посмотрите, имеют ли какие-либо устройства особенно высокий занятый процент / процент ожидания, или если средние сервисные времена особенно высоки. Просто возможно, что у Вас есть умирающий диск, или безразличный NFS монтирует выполнение уничтожения.
Ваш вывод dtrace показывает, что ваши приложения большую часть времени тратят на записи . Вы должны проверить (конечно, используя dtrace :-)) , куда попадают эти записи. Если они обращаются к файловой системе Solaris, вам следует проверить, не является ли файловая система узким местом.
В вашей системе Solaris просто запустите sys_diag -G -I1 -l -v
, и он объединит всю информацию о производительности (CPU / Memory / Network / Disk IO / Dtrace / ядро ...) и проанализируйте вывод с помощью одного цветного отчета в формате .html о находках / узких местах, характеризующих рабочую нагрузку по подсистемам. Это покажет любые / все узкие места, а также блокировки, которые могут иметь место (lockstat ,. .). Последняя версия - v8.1 HTH.