【问题标题】:Profiling Golang server分析 Golang 服务器
【发布时间】:2015-11-17 12:45:41
【问题描述】:

我想分析一个我用 Go 编写的简单网络服务器。它接受请求,将请求映射到 avro 对象,并在 go 例程中将其发送到 Kafka。要求是它立即响应并稍后将对象发送到 Kafka。在本地,它平均在 1 毫秒内回答。我一直在尝试通过使用 davecheney/profile 包启动脚本并使用 jmeter 发送测试请求来对其进行分析。我可以在输出中看到配置文件已生成,但无论 jemeter 发送请求多长时间,它仍然为空。我在 Mac El Capitan 上运行它。我读到 Mac 上的分析存在一些问题,但它可以在 El Capitan 上运行。你有什么建议吗?

【问题讨论】:

  • 你能分享一些代码吗? (简化版,仅展示如何使用分析器)
  • 您是否构建了一个更简单的示例,并且成功地进行了概要分析?分析适用于 Mac OS X 的“损坏”版本,即生成输出,但随着多个 go 例程它变得越来越不准确。还有一份报告说,分析可以在 OS X El Capitan 上正常工作。因此很可能程序设置不正确,因此建议先做一些简单的事情。

标签: go profiling


【解决方案1】:

首先,我不确定您是否正在尝试进行延迟分析。如果是这样,请注意 Go 的 CPU 分析器仅报告函数在 CPU 上执行所花费的时间,不包括睡眠时间等。如果 CPU 分析确实是您要查找的内容,请继续阅读。

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

import _ "net/http/pprof"

然后,在通过 jmeter 施加负载的同时,运行:

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

net/http/pprof 包提供了分析挂钩,允许您随时按需分析您的网络服务器,即使它在生产中运行。不过,如果您的网络服务器是要公开的,您可能希望为其使用不同的防火墙端口。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-04-11
  • 1970-01-01
  • 1970-01-01
  • 2017-05-28
  • 2010-11-10
  • 2018-08-01
  • 2013-07-15
  • 1970-01-01
相关资源
最近更新 更多