Мне не известен ни один агент профилирования, который предоставляет готовую функцию для сквозного профилирования приложений. По крайней мере, не во время написания этого.
Однако вы можете рассмотреть возможность использования DTrace для сбора информации о профилировании (не обязательно всей информации, предоставляемой обычным профилировщиком) от клиента и сервера одновременно. Пример того, как использовать это в веб-приложении Java (с Firefox в качестве клиента и Tomcat в качестве сервера), доступен в этой статье . Хитрость заключается в том, чтобы встроить инструментарий DTrace в JVM (на сервере) и в клиенте, а также в написании сценария DTrace, который записывает собранную информацию из трасс в анализируемый вывод. Поскольку вопрос о том, находится ли клиент в Java, неясен, я предполагаю, что клиент также находится в Java; если нет, приложение / исполняемый файл должен поддерживать инструментарий DTrace.
Следует упомянуть несколько предостережений:
- DTrace доступен не во всех операционных системах.
- В настоящее время доступно в Solaris 10 и Mac OS Leopard.
- Мне не известна поддержка Dtrace в дистрибутивах Linux, где SystemTap является рекомендуемой альтернативой. FreeBSD имеет экспериментальную реализацию DTrace. Следует отметить, что SystemTap - это не реализация DTrace для Linux, а совершенно другая сущность сама по себе.
- В Windows MSFT вам остается постоять за себя, по крайней мере, на данный момент.
- Предположения о JVM и клиенте (поскольку я знаю, что сервер работает на JVM)
- Если ваш клиент - JVM, то вы должны использовать JVM, в которой есть встроенная инструментарий DTrace или ее эквивалент (я имею в виду SystemTap), иначе ваши сценарии DTrace / SystemTap не будут работать. Это означает, что если авторы JRE / JDK для вашего дистрибутива не добавили код для поддержки DTrace / SystemTap, вы вынуждены использовать JVM, в который встроена такая поддержка. Если это важно в вашем контексте, OpenJDK 1.6 Похоже, что .0 имеют инструментальную поддержку SystemTap, а дистрибутивы Oracle / Sun Java 6 для Solaris поддерживают DTrace. В Java 1.4 и 5 в Solaris вам необходимо установить агент JVMTI.
- Если ваш клиент является веб-браузером или толстым клиентом, написанным на другом языке, то вы должны убедиться, что процесс, под которым он работает, может поддерживать DTrace. Например, оснащенный DTrace Firefox доступен в Solaris 10 и, вероятно, в Solaris Express 11 (я подтвердил поддержку DTrace только в OpenSolaris 2009.06). Пробники SystemTap не были добавлены в Firefox для многих дистрибутивов Linux, поэтому вам часто нужно собирать Firefox из исходного кода с соответствующими флагами в скрипте сборки Firefox для добавления проб; Мой предыдущий опыт с этим процессом заставляет меня полагать, что это выполнимо, но не легко. Если вы используете другое приложение (ни Firefox, ни JVM) в качестве клиента, вам необходимо проверить его поддержку DTrace / SystemTap.
- Написание хороших сценариев DTrace / SystemTap для сбора информации о профилировании не так просто. Вам нужно будет выучить другой язык, и вы должны будете убедиться, что сценарии не добавляют свои собственные издержки (и проверяют принцип неопределенности Гейзенберга в контексте профилирования).
Вы, конечно, можете писать сценарии DTrace / SystemTap, которые работают на удаленных клиентах и серверах, но не рекомендуется записывать собранные данные инструментария в сокет (чтобы избежать вышеупомянутых издержек).