Профилирование 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 и почему.
Я не знаком с Фосвики. Возможно, кто-то в этом сообществе мог бы быть более полезным.