2015-07-08 4 views
0

Сейчас я профиль Go приложения с помощью Go инструмента pprof как это:идут инструмент pprof с помощью приложения PID вместо HTTP конечной

go tool pprof http://localhost:8080/debug/pprof/profile 

Я хочу использовать инструмент pprof на произвольный процесс Go, который работает под управлением http-сервер на неизвестном порту. Единственная информация о процессе - это PID. Мне нужно сделать одну из двух вещей:

  • Get the Go обрабатывает номер порта из своего PID.
  • Профилируйте текущий процесс напрямую. Например, что-то вроде go tool pprof 10303, где ПИД-код 10303.

Будет ли это работать?

ответ

1

Service Discovery предназначен для решения таких проблем. Простым решением является создание tmp-файла для каждого PID, запись каждого порта в соответствующий файл. и прочитайте порт, когда вам нужно go tool pprof.

http.ListenAndServe("localhost:" + PORT, nil) 
tmpFilePath := filePath.Join(os.TempDir(), "myport_" + strconv.FormatInt(os.Getpid(), 10)) 
f, _ := os.OpenFile(tmpFilePath, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0600) 
f.Write(byte[](strconv.FormatInt(PORT, 10))) 
f.Close() 

в ходе инструмента проф Баша: перейти инструмент http://localhost:`cat/TMP/myport_10303`/отлаживать/pprof/Профиль

не тестируется в реальных, возможно, некоторых ошибках синтаксиса

UPDATE:

другой способ не изменить go source, использовать команду bash, например netstat/lsof, чтобы узнать порт прослушивания процесса go. например:

netstat -antp | grep 10303| grep LISTEN | awk '{ print $4 }' | awk -F: '{print $2}' 

не лучший сценарий bash Я думаю, только для справки.

+0

На самом деле это не то, что я ищу. Я хочу профилировать произвольный процесс Go (не обязательно тот, который я создаю). –

+1

вы не должны знать, как работает pprof. вы не можете профилировать процесс go, если нет встроенного pprof-сервера. означает, что вы не можете профилировать произвольный процесс Go. –

+0

Я знаю, что процесс предоставляет конечную точку pprof. Я хочу найти локальный порт, на котором выполняется этот процесс. Ваше предложение возможно, но мне потребуется изменить код многих приложений Go. –

 Смежные вопросы

  • Нет связанных вопросов^_^