Трассировка медленного Java ввод-вывод в Солярисе 10

Первое, которое я сделал бы, если это возможно, отключают сетевой кабель, сделайте все безопасные шаги, особенно примените все пакеты текущих исправлений/сервера, включите программные брандмауэры и затем включите сетевой кабель назад. незащищенные поля только длятся о получасе в дикой природе, особенно поля окон.

5
задан 22 March 2010 в 15:20
5 ответов

Если Ваше использование Солярис, Вам посчастливилось смочь использовать 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 посещает большую часть времени.

Удачи (снова). Не сдавайтесь теперь, я думаю, что мы очень близко к решению.

4
ответ дан 3 December 2019 в 01:22
  • 1
    Спасибо за Ваш ответ. We' ll пытаются получить полномочия для выполнения dtrace. –  fglez 17 March 2010 в 19:24
  • 2
    Обновленный вопрос с результатами dtrace. –  fglez 18 March 2010 в 10:09
  • 3
    I' ve, обновленный с датчиками, специфичными для Java vm. Это должно дать Вам больше ключа к разгадке. Don' t забывают jprofiler также. Лично I' m ниндзя при разыскивании ошибок и проблем производительности, таких как это. Мне жаль, что я не был там для помощи Вам :-( –  The Unix Janitor 19 March 2010 в 10:27
  • 4
    dtraced приложение является небольшой программой Java, которая загружает (Class.forName) несколько тысяч классов из одного .jar. Это воспроизводит ту же проблему, которую мы имеем в большем приложении. –  fglez 22 March 2010 в 11:49
  • 5
    Право, таким образом, it' s горлышко бутылки производительности в java' s загрузчик класса. Вещи судить Вас могли обеспечить дамп Вашего пути $CLASSPATH? действительно ли это является большим? В инструменте Java - опция пути к классу является кратким способом установить java.class.path свойство. можно ли поместить классы, которые будут загружены в диске поршня? и повторно выполненный тесты. По некоторым причинам загрузчик класса пробует к большому количеству путей твердости. Вы можете непосредственно вынуждать Java использовать более прямой путь. удостоверьтесь, что Вы использующий полные пути как/a/b/c/d, а не../../../a/b/c/d или a/b/c/являетесь Вами классы, смонтированные на nfs? –  The Unix Janitor 22 March 2010 в 14:28

Только отправить конечный результат.

Сервер (Ряд Sun T) просто что медленный для однопоточного JAVA-приложения. Пойди разберись.

Спасибо всем за ответы и поддержку.

1
ответ дан 3 December 2019 в 01:22

Это могло бы стоить смотреть с iostat, чтобы видеть, существует ли проблема, это заставляет Ваши доступы к диску быть медленнее, чем ожидалось. Загрузка нескольких тысяч классов не должна использовать много диска IO, особенно при выполнении его несколько раз так, чтобы блоки были в кэше.

Попробовать

iostat -nxtcmpz 3

пока Ваш тест работает, и посмотрите, имеют ли какие-либо устройства особенно высокий занятый процент / процент ожидания, или если средние сервисные времена особенно высоки. Просто возможно, что у Вас есть умирающий диск, или безразличный NFS монтирует выполнение уничтожения.

0
ответ дан 3 December 2019 в 01:22

Ваш вывод dtrace показывает, что ваши приложения большую часть времени тратят на записи . Вы должны проверить (конечно, используя dtrace :-)) , куда попадают эти записи. Если они обращаются к файловой системе Solaris, вам следует проверить, не является ли файловая система узким местом.

1
ответ дан 3 December 2019 в 01:22

В вашей системе Solaris просто запустите sys_diag -G -I1 -l -v , и он объединит всю информацию о производительности (CPU / Memory / Network / Disk IO / Dtrace / ядро ...) и проанализируйте вывод с помощью одного цветного отчета в формате .html о находках / узких местах, характеризующих рабочую нагрузку по подсистемам. Это покажет любые / все узкие места, а также блокировки, которые могут иметь место (lockstat ,. .). Последняя версия - v8.1 HTH.

2
ответ дан 3 December 2019 в 01:22

Теги

Похожие вопросы