Профилирование foswiki с помощью NYTProf приводит к неполным данным профиля


У меня очень медленная установка foswiki (~ 60 секунд для некэшированной страницы). Я попытался профилировать установку с помощью NYTProf, в соответствии с http://foswiki.org/Support/NYTProfDebugging следующей командой:

> sudo -u www-data NYTPROF="file=/tmp/nytprof.out:addpid=1:endatexit=1" perl -wTd:NYTProf view -topic Some.Topic -username MyUsername

Сценарий завершается неудачно с кодом выхода 141 когда я запускаю его с профилировщиком. Если я запускаю его без профилировщика (удаленный d:NYTProf) он успешно завершает работу и производит результат.

После профилирования я получил кучу файлов профиля в моей директории /tmp:

nytprof.out.[841-1860]

Но когда я пытаюсь объединить эти файлы, у меня появляется ошибка для первого файла:

> nytprofmerge nytprof.out.*
Profile data incomplete, inflate error -5 ((null)) at end of input file, perhaps the process didn't exit cleanly or the file has been truncated  (refer to TROUBLESHOOTING in the documentation)

Я могу объединить файлы без первого файла, но результаты бесполезны и показывают только 87 вызовов Foswiki::Sandbox::CORE:open и это все.

Есть ли у меня шанс получить действительный результат профилирования? Или есть другой инструмент, который я могу использовать в этом случае?

2 ответа

Я не уверен, почему вы не можете заставить NYTProfiler работать, мы использовали его, чтобы выяснить некоторые проблемы с производительностью в Foswiki 2.0.2, которые были частично устранены в Foswiki 2.0.3. Происходит пара проблем, но одной из основных причин является наше внутреннее преобразование в UNICODE, а также некоторые проблемы с регулярным выражением Perl в версиях Perl до 5.20. https://rt.perl.org/Public/Bug/Display.html?id=66852

Foswiki 2.0.3 сделал следующие обновления производительности:

  • Изменены некоторые сильно называемые внутренние функции из регулярных выражений на index()
  • Изменен EditRowPlugin, чтобы генерировать меньше html, который требует обработки регулярными выражениями в модуле рендеринга.
  • Сделаны некоторые другие улучшения, чтобы уменьшить чрезмерное перечитывание тем.

Если 2.0.3 не помогает, проверьте, есть ли на проблемных страницах большие таблицы. Если это так, вы можете попробовать отключить EditRowPlugin и использовать EditTablePlugin.

Кроме того, вы можете попробовать наш официальный канал поддержки #foswiki на IRC, http://irclogs.foswiki.org/

Сценарий завершается ошибкой с кодом завершения 141, когда я запускаю его с профилировщиком.

Это говорит о том, что процесс получил сигнал SIGPIPE. Опция sigexit может помочь.

Если я запускаю его без профилировщика... он завершается успешно и выдает результат.

Вы используете sudo так что разрешения могут быть проблемой, но это только предположение. Вам нужно будет копать глубже, чтобы подтвердить, принимается ли SIGPIPE и почему.

Я не знаком с Фосвики. Возможно, кто-то в этом сообществе мог бы быть более полезным.

Другие вопросы по тегам