Он работает таким образом: записывает информацию обо всех выполненных задачах в бинарный лог собственного формата. Этот лог можно открыть с помощью специальной программы, благодаря которой можно будет посмотреть, что за задачи были выполнены, как долго, сколько задач завершились неудачей. Недостаток данного профайлера в том, что необходимо записывать всю информацию о задачах в большой бинарный лог: на боевом сервере это быстро заполнит диск, к тому же файлы лога надо будет передавать на локальную машину для анализа и просмотра.
Для более удобной работы с результатами профилирования прямо на боевом сервере был написан специальный профайлер. Этот профайлер в прямом эфире собирает данные о выполняемых задачах и периодически (каждую минуту) скидывает суммарную информацию в текстовый файл. Открыв на боевом сервере текстовый файл, можно смотреть, какие задачи нагружают сервер в данный момент.
Страничка проекта: http://code.google.com/p/reddwarf-periodic-profiler/
После подключения профайлера к игровому приложению он будет периодически писать в файл top.log приблизительно следующую информацию:
*** Wed Feb 23 13:01:08 GMT 2011 c:140 f:00.00% t:27 ms s:3780 ms com.sun.sgs.impl.service.channel.ChannelImpl$SavedMessageReaper (T) c:31 f:00.00% t:33 ms s:1036 ms my.game.logic.tasks.DefaultOperationTask (T) c:29 f:00.23% t:29 ms s:881 ms my.game.logic.tasks.ReportInactiveUserTask (T) c:9 f:00.00% t:79 ms s:711 ms com.sun.sgs.services.impl.service.AsyncTaskService$CallableKernelRunner (N) c:10 f:00.00% t:67 ms s:670 ms com.sun.sgs.services.impl.service.AsyncTaskService$CallbackKernelRunner (T) c:465 f:00.00% t:1 ms s:470 ms com.sun.sgs.impl.service.channel.ChannelServiceImpl$Coordinator$1[ServiceEventQueue] (T) c:26 f:00.00% t:19 ms s:494 ms com.sun.sgs.impl.service.nodemap.NodeMappingServiceImpl$MapRemoveTask (N) c:13 f:00.00% t:38 ms s:494 ms com.sun.sgs.impl.service.task.TaskServiceImpl.PendingTaskCleanupRunner (T) c:257 f:00.00% t:0 ms s:257 ms com.sun.sgs.impl.service.channel.ChannelImpl$SendNotifyTask (N) c:257 f:00.00% t:0 ms s:257 ms com.sun.sgs.impl.service.channel.ChannelImpl$NotifyTask$1[MarkChannelEventCompleted] (T) c:1 f:00.00% t:98 ms s:98 ms my.game.logic.tasks.StartNextPhaseTask (T) c:13 f:00.00% t:5 ms s:65 ms com.sun.sgs.impl.service.nodemap.NodeMappingServerImpl$RemoveTask (T) c:30 f:00.00% t:2 ms s:60 ms my.game.logic.tasks.SynchronizePlayerBuyIn (T) c:12 f:02.30% t:4 ms s:52 ms my.game.logic.tasks.StartGameTask (T)
В таблице содержатся данные на 20 задач, выполнявшиеся максимальное суммарное время.
- c: 123 - общее количество выполненных задач данного типа
- f:02.30% - процент неудачно выполненных задач
- t:38 ms - среднее время выполнения успешных задач
- s:4720 ms - суммарное время выолнения задач данного типа
- имя типа задач
- (T) означает, что задача транзакционная, (N) - что нетранзакционная.
Профайлер можно настроить, более подробная информация на странице проекта.

Комментариев нет:
Отправить комментарий