Вопрос

Я только что установил Java 1.6_07, чтобы попробовать профилировать с помощью VisualVM.Он сообщает мне, что мое приложение проводит 60% своего времени в sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run

Как мне узнать, что он делал в это время?Сколько времени он ждал, пока что-нибудь его вызовет, или делал что-то еще?Что это звало и что оно звало?Кажется, я просто не могу найти способ перейти на более глубокие уровни, как это есть в Quantify или профилировщике Perl.

Это было полезно?

Решение

У меня нет опыта работы с VisualVM, но есть профилировщик JRockit. делает предоставить эту информацию;вы можете рассмотреть возможность использования его вместо этого.

Обновлять: вопрос со списком Java-профайлеров можно найти здесь, для пользователей с достаточной репутацией для просмотра удаленных вопросов.

Другие советы

Использует ли ваше приложение RMI через TCP?Если нет, то возможно ли, что это ошибка Гейзена, вызванная оснащением виртуальной машины?Я предполагаю, что VisualVM должен использовать вызовы RMI, чтобы выяснить, что происходит в JVM....

Я начал использовать новая VisualVM 1.2.Это позволяет профилировать ЦП и детализировать его с помощью графа вызовов.Попробуйте это.

Используя 1.3.2, я также вижу, что это сообщение о зависании, о котором я говорю.В версии 1.3.2, если вы делаете дамп потока и ищете этот вызов, вы можете увидеть, где он находится в цепочке вызовов для этого потока.Не уверен, имел ли в виду Юваль Ф. это или что-то другое.Посмотрите вверх по цепочке вызовов, чтобы увидеть, что он вызывает, и т. д., посмотрите вниз, чтобы узнать, кто его вызывает, и так далее.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top