2010-06-23 1 views
0

Мне нужно измерить количество байтов, используемых java-приложением из java (т. Е. У меня нет специального доступа к JVM-другому, кроме того, у меня нет менеджера безопасности), но мне нужны все отправленные байты/полученные, включая заголовки протоколов и т. п. У кого-нибудь есть хорошие идеи о том, как это сделать?Любые идеи, как я мог бы создать «метр» для использования в сети для Java SE?

Очевидным шагом является создание нового URLConnectionHandler и вставка измерений в потоки ввода-вывода. Это, однако, не дает мне размеры заголовков сообщений HTTP/HTTPS, отправленных в/из приложения Java.

ответ

2

Если вам нужно точное количество байтов на проводе, вам нужна помощь ОС и очень конкретным способом.

Сетевое движение - это набор кукол Бабушки.

URLConnection добавляет заголовок, стек TCP добавляет заголовок для каждого пакета, сетевой стек добавляет другой заголовок. Затем есть подтверждение, повторные передачи и т. Д., Которые происходят за задней частью вашей программы. Затем есть запросы DNS и пакеты маршрутизации, ...

Вам понадобятся специальные правила для разделения трафика вашего приложения с остальной части трафика.

Все в целом довольно безнадежно.

Для практических целей я бы рекомендовал вам настроить ваше приложение на машине и использовать wirehark или подобное для захвата трафика. Внутри вы измеряете полезную нагрузку, как вы описываете, затем используйте внешние измерения для измерения накладных расходов.

Затем оценивайте% накладных расходов при типичном использовании и добавьте это к измерению полезной нагрузки в вашем приложении.

Это будет достаточно близко, что никто не заметит разницы.