Возможный дубликат:
Сохранение gmon.out перед запуском процесса
Я пытаюсь профилировать сервер (исходный код, доступный для меня. c-code) в среде Linux. Этот сервер работает постоянно, как веб-сервер. Я пытаюсь использовать gprof для профилирования сервера. Если сервер выходит сам по себе, генерируется файл gmon.out. Я могу использовать gprof и gmon.out для понимания профилированных данных. Теперь проблема заключается в том, что этот сервер работает непрерывно, ожидая входящих соединений сокетов, запросов и т.д. Если я убью этот сервер, gmon.out не будет сгенерирован. В этот момент я вижу следующие варианты.
- измените исходный код на сам профиль и запишите эту информацию после получения сигнала SIGKILL. Это, безусловно, самое уродливое решение и может привести к шуму в измерении.
- Возможно, есть способ профилировать этот сервер, используя gprof, пока сервер все еще работает.
- Другие инструменты для проверки?
EDIT: Сервер - многопроцессорный сервер. работает на FreeBSD 7.2
Я уверен, люди решили эти проблемы раньше. Мне не удалось найти полезную информацию о SO или снаружи.
Я ценю любые мысли/решения, которые есть у людей.
Спасибо, куча.
ОБНОВЛЕНИЕ 1:
- gprof, похоже, не работает с многопроцессорным сервером. Когда мне удастся получить gmon.out после выполнения моего сервера, будет выполняться только родительский процесс, который на самом деле не делает реальной работы!
- oProfile не поддерживает FreeBSD, на котором работает мой сервер. По различным причинам я не могу (не разрешено) менять ОС.
- Веб-сайт Valgrind не имеет порта для FreeBSD. Но есть ссылки на порт для FreeBSD. Мне не удалось найти источник порта FreeBSD.
Как-то мне удалось получить порты для valgrind. Когда я запускаю make, я получаю следующие ошибки.
=> valgrind-stable-352.tar.gz doesn't seem to exist in /usr/obj/ports/distfiles/.
=> Attempting to fetch from ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/.
fetch: ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/valgrind-stable-352.tar.gz: File unavailable (e.g., file not found, no access)
=> Attempting to fetch from http://www.rabson.org/.
fetch: http://www.rabson.org/valgrind-stable-352.tar.gz: No address record
=> Couldn't fetch it - please try to retrieve this
=> port manually into /usr/obj/ports/distfiles/ and try again.
*** Error code 1
Я попытался найти valgrind-stable-352.tar.gz в Интернете. Все ссылки, которые я нашел, мертвы.
-
У меня установлен pstack на моем freebsd, и реализованный pstack дает только трассировку стека. ссылка: http://sourceforge.net/projects/bsd-pstack/
-
Я понимаю, что systemtap предназначен только для событий ядра, инструментов и т.д.
Я мог ошибаться или иметь недостаточную информацию. Пожалуйста, поправьте меня и дайте свои мысли. Я очень ценю вашу помощь.
ОБНОВЛЕНИЕ 2: Я думаю, что будет полезно дать некоторые сведения о сервере, который я пытаюсь профилировать.
- это многосерверная программа. I/O bound, для конкретной базы данных mysql.
- Ничего не связано. Каждый процесс child-server обрабатывает только один запрос. настраиваемое количество процессов создается при запуске сервера.
- Я хотел бы найти время, затрачиваемое на каждую функцию и ее частоту. функциональные коды представляют собой комбинацию связанных с CPU и IO привязок (я считаю, больше IO).
- он работает на FreeBSD 7.2
- записанный в c. количество чтений намного больше, чем запись в базу данных с помощью этого сервера.