Фон
Я хочу отслеживать для своего приложения ASP.NET Core 2.1, какие методы выделяют больше всего ресурсов, и для этого я хотел использовать события LTTng вместе с некоторыми другими инструментами, чтобы помочь.По сути, я пытался следовать этому руководству: http://blogs.microsoft.co.il/sasha/2018/02/06/getting-stacks-for-lttng-events-with-net-core-on-linux/
(Я видел в основном одно и то же содержимое в нескольких местах в Интернете, с очень небольшим количеством небольших изменений. Эта статья является одной из лучше отформатированных,но поскольку его содержимое было повторено другими, у меня нет оснований полагать, что оно каким-то образом будет неправильным.)
Настройка
Я запускаю серверное приложение с помощью команды
COMPlus_EnableEventLog=1 /home/kqr/testserver/TestServer & >/dev/null
чтобы запустить его в фоновом режиме.Затем я проверяю, работает ли он, делая HTTP-запрос и получая ожидаемый ответ.
Процедура
Затем я хотел бы выяснить, какие методы занимают много места в куче,поэтому я запускаю инструмент stackcount
из коллекции компиляторов BPF (BCC) следующим образом:
sudo stackcount-bpfcc -p 19010 -f \
/home/kqr/testserver/libcoreclr.so:EventXplatEnabledGCAllocationTick* \
> allocticks.stacks
Я делаю несколько запросов, которые должны быть дорогими с точки зрения использования памяти, и затем я отменяюКоманда stackcount с Ctrl-C.
Проблема
На данный момент файл allocticks.stacks
пуст, как будто во время записи не было выделений.
Я бы ожидал, что allocticks.stacks
будет содержать, по крайней мере, что-то .
Что я делаю не так?
Дальнейшая диагностика
Я также попытался сделатьТо же самое и с perf, сначала определив зонд для событий GCAllocationTick:
sudo perf probe -x /home/kqr/testserver/libcoreclr.so \
-a EventXplatEnabledGCAllocationTick*
, а затем снова начав записывать эти события для процесса:
sudo perf record -p 19010 -e probe_libcoreclr:* -g
, выполнив некоторые запросы, которые язнаю, дорогие с точки зрения оf Использование памяти, а затем отмена команды записи с помощью Ctrl-C.
Когда я пытаюсь просмотреть записанные данные, запустив
sudo perf report -f
, я получаю следующую ошибку:
Error: The perf.data file has no samples!
Исключено: орфографические ошибки
Сначала я подозревал, что просто что-то написал с ошибкой.Поэтому я попытался преднамеренно неправильно указать важные идентификаторы в командах, но каждый раз, когда я это делал, инструмент очень хорошо информировал меня о том, что я что-то делаю неправильно.Поэтому у меня меньше причин подозревать, что это проблема сейчас.
Исключено: отсутствует зависимость
Как и в случае с ошибкой, я попытался преднамеренно удалить нужную мне зависимость, изатем инструментарий предупредил меня об этом.
Исключено (?): Неправильно libcoreclr.so
Я не совсем уверен, как все это объединяет .NET, но яначинаю думать, что, возможно, исполняемый файл TestServer
не использует файл libcoreclr.so
в своем рабочем каталоге, потому что он использует какой-то общесистемный двоичный файл.Тем не менее, я не нашел в системе никакого другого файла с именем libcoreclr.so
, хотя я не выглядел слишком усердно.
Однако я начинаю думать, что, возможно, это один из техСодержит элементы развертывания и то, что libcoreclr.so
каким-то образом встроен в двоичный файл, поэтому он не должен полагаться на это как на внешний файл.Однако, даже если я запускаю приложение с
cd /home/kqr/testserver
COMPlus_EnableEventLog=1 dotnet TestServer.dll
, у меня возникает та же проблема, заставляя меня думать, что это также менее вероятная причина.