понедельник, 28 февраля 2011 г.

Reddwarf Periodic Profiler 0.1

Для игровой платформы Reddwarf (бывший Darkstar) существует собственный профайлер.
Он работает таким образом: записывает информацию обо всех выполненных задачах в бинарный лог собственного формата. Этот лог можно открыть с помощью специальной программы, благодаря которой можно будет посмотреть, что за задачи были выполнены, как долго, сколько задач завершились неудачей. Недостаток данного профайлера в том, что необходимо записывать всю информацию о задачах в большой бинарный лог: на боевом сервере это быстро заполнит диск, к тому же файлы лога надо будет передавать на локальную машину для анализа и просмотра.

Для более удобной работы с результатами профилирования прямо на боевом сервере был написан специальный профайлер. Этот профайлер в прямом эфире собирает данные о выполняемых задачах и периодически (каждую минуту) скидывает суммарную информацию в текстовый файл. Открыв на боевом сервере текстовый файл, можно смотреть, какие задачи нагружают сервер в данный момент.

Страничка проекта: 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) - что нетранзакционная.

Профайлер можно настроить, более подробная информация на странице проекта.

Комментариев нет:

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