2015-11-17 109 views
1

我想剖析我在Go中編寫的簡單Web服務器。它接受請求,將請求映射到avro對象並在去程序中將其發送給Kafka。要求是它會立即回答並在稍後向Kafka發送一個對象。在本地它平均在1毫秒內回答。我一直試圖通過使用davecheney/profile包啓動腳本並使用jmeter發送測試請求來分析它。我可以在輸出中看到生成的配置文件,但無論jemeter發送請求的時間長短,它仍然是空的。我在Mac El Capitan上運行它。我讀到在Mac上進行分析時遇到了一些問題,但它將在El Capitan上工作。你有什麼建議嗎?剖析Golang服務器

+0

你能分享一些代碼嗎? (一個簡化的版本,只是顯示你如何使用profiler) – HectorJ

+0

你是否構建了一個更簡單的例子,併成功地進行了性能分析?性能分析適用於Mac OS X的「破損」版本,即生成輸出,但對於多個去程,它變得越來越不準確。還有一份報告顯示,配置文件可以與OS X El Capitan正確配合。因此,程序設置可能不正確,因此建議先做一些簡單的事情。 – gbulmer

回答

1

首先,我不確定您是否嘗試執行延遲分析。如果是這樣,請注意Go的CPU分析器僅報告在CPU上執行的函數花費的時間,並且不包括睡眠時間等。如果CPU Profiling確實是您要查找的內容,請繼續閱讀。

如果你正在運行一個Web服務器,只需在您的進口以下(其中主()是在文件中)和重建:

import _ "net/http/pprof" 

然後,同時通過JMeter的應用負載,運行:

go tool pprof /path/to/webserver/binary http://<server>/debug/pprof/profile 

net/http/pprof軟件包提供了分析掛鉤,使您可以隨時按需分析Web服務器,即使它在生產環境中運行。不過,如果您的網絡服務器是公開暴露的,您可能希望爲其使用不同的防火牆端口。

+0

我沒有得到任何「net/http/pprof」的結果:去工具pprof http:// localhost:8080/debug/pprof/block 從http:// localhost:8080/debug/pprof /塊 服務器響應:204無內容 –

+0

1)塊分析需要顯式啓用https://golang.org/pkg/runtime/#SetBlockProfileRate 2)您需要包含正在分析數據的二進制文件的路徑合理。 –