2015-11-17 76 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)您需要包含正在分析数据的二进制文件的路径合理。 –