分析Golang服务器

分析Golang服务器,go,profiling,Go,Profiling,我想分析一下我在Go中编写的一个简单的Web服务器。它接受请求,将请求映射到avro对象,并在go例程中将其发送给Kafka。要求是它立即响应,并在稍后向卡夫卡发送一个对象。在本地,平均响应时间不到1毫秒。我一直试图通过使用davecheney/profile包启动脚本并使用jmeter发送测试请求来评测它。我可以在输出中看到,概要文件已经生成,但不管jemeter发送请求的时间有多长,它都保持为空。我在Mac El Capitan上运行它。我读到Mac上的评测有一些问题,但它将在El Capi

我想分析一下我在Go中编写的一个简单的Web服务器。它接受请求,将请求映射到avro对象,并在go例程中将其发送给Kafka。要求是它立即响应,并在稍后向卡夫卡发送一个对象。在本地,平均响应时间不到1毫秒。我一直试图通过使用davecheney/profile包启动脚本并使用jmeter发送测试请求来评测它。我可以在输出中看到,概要文件已经生成,但不管jemeter发送请求的时间有多长,它都保持为空。我在Mac El Capitan上运行它。我读到Mac上的评测有一些问题,但它将在El Capitan上工作。您有什么建议吗?

首先,我不确定您是否正在尝试进行延迟分析。如果是这样的话,请注意Go的CPU profiler只报告函数在CPU上执行所花费的时间,不包括睡眠时间等。如果您真正需要的是CPU评测,请继续阅读

如果您正在运行Web服务器,只需在导入(main()所在的文件中)中包含以下内容并重新生成:

import _ "net/http/pprof"
然后,在通过jmeter应用负载时,运行:

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

net/http/pprof
包提供了分析挂钩,允许您随时根据需要分析Web服务器,即使它正在生产环境中运行。但是,如果您的Web服务器打算公开,您可能需要为其使用不同的防火墙端口。

您可以共享一些代码吗?(一个简化的版本,只是展示了如何使用分析器)您是否构建了一个更简单的示例,并成功地完成了评测工作?评测工作在Mac OS X的“坏”版本上,即生成输出,但随着多个go例程的出现,评测变得越来越不准确。还有一份报告称,评测可以正确地与OS X El Capitan配合使用。因此,很可能是程序设置不正确,因此建议先做一些简单的事情。我在“net/http/pprof”中没有得到任何结果或者:go-tool-pprof-Fetching-profile-from-server-response:204 No-Content1)需要显式启用块评测2)您需要包含要评测的二进制文件的路径,以便评测数据有意义。