Как я могу профилировать время, которое программа проводит в режиме сна или операций ввода-вывода


Я знаю, как профилировать процессор / память. Но теперь мне нужно профилировать некоторый код, который использует операции ввода-вывода (PlainSocketImpl.doConnect и другие), чтобы понять, какой фрагмент кода занимает большую часть времени.

2 3

2 ответа:

JProfiler имеет зонды файлов и сокетов, которые показывают вам данные ввода-вывода вокруг реальных объектов.

Введите описание изображения здесь

В представлениях CPU есть селектор потоков, который имеет состояние" Net I/O". Если вы выберете это состояние, вы увидите только время, проведенное в I / O.

Введите описание изображения здесь

Отказ от ответственности: моя компания разрабатывает JProfiler.

В системах на базе linux вы можете попробовать iotop. Переключите представление на отображение потоков, затем объедините его с выводами jstack, чтобы они соответствовали фактическим строкам кода.

Хотя и не очень автоматически.