如何配置Go fasthttp/路由器应用程序?

如何配置Go fasthttp/路由器应用程序?,go,Go,我想分析一下我的GoHTTP服务器应用程序,看看是否有可以优化的地方。我正在将fasthttp包与fasthttp/router包一起使用,我正在努力找出如何连接pprof 基本设置如下所示,显然非常简化: func main() { flag.Parse() r := router.New() r.GET("/", index) r.GET("/myroute", myrouteFn) h := r.Handl

我想分析一下我的GoHTTP服务器应用程序,看看是否有可以优化的地方。我正在将
fasthttp
包与
fasthttp/router
包一起使用,我正在努力找出如何连接
pprof

基本设置如下所示,显然非常简化:

func main() {
    flag.Parse()

    r := router.New()
    r.GET("/", index)
    r.GET("/myroute", myrouteFn)

    h := r.Handler

    if err := limitedListenAndServe(*addr, fasthttplogger.Tiny(h)); err != nil {
        log.Fatalf("Error in ListenAndServe: %s", err)
    }
}
首先,我尝试遵循一个相当简单的指南,如,并在我的
main()
函数(根据指南)中添加了这一行,以及相应的导入。将上述内容更改为:

func main() {
    flag.Parse()

    r := router.New()
    r.GET("/", index)
    r.GET("/myroute", myrouteFn)

    h := r.Handler

    if err := limitedListenAndServe(*addr, fasthttplogger.Tiny(h)); err != nil {
        log.Fatalf("Error in ListenAndServe: %s", err)
    }

    defer profile.Start().Stop()
}
完成后,我运行了我的程序,提出了一系列我对评测感兴趣的请求,然后终止了服务器。这创建了一个
cpu.pprof
文件,但是当我通过
go-tool-pprof
命令来生成图形时,该文件是空的(零字节)

经过进一步的调查,我发现如果我完全使用香草
fasthttp
,我怀疑它会起作用

试图将其与我的应用程序结合起来,我仍然被卡住了。从概念上讲,我认为解决方案是使用
fasthttpadaptor
net/http/pprof
转换为
fasthttp
路由。但我所关注的要点是使用它自己的路由器来执行多路复用,我宁愿不在服务器中使用不同的路由器重写所有路由

我将如何在此处提供分析数据?

您可以使用这些数据进行分析。
fasthttp提供了相同的自定义。您可以使用与
net/http/pprof
相同的方法

要使用它,请将处理程序注册为:

import "github.com/valyala/fasthttp/pprofhandler"

...

r.GET("/debug/pprof/{profile:*}", pprofhandler.PprofHandler)
然后,您可以使用此配置文件

go tool pprof http://host:port/debug/pprof/profile

或者您也可以访问以查看更多类型的可用配置文件。

您说的“程序从未真正终止”是什么意思?这仍然是一个开始并最终退出的过程,web服务器并不特殊。如果添加该行,运行服务器,通过它推送一些请求,然后关闭服务器,您应该有一个包含一些数据的概要文件。这也是我的想法,但我不完全确定概要文件是如何工作的。非常新鲜!也就是说,在我停止服务器后,
cpu.pprof
文件肯定是空的。我会寻找什么来解释为什么它是空的?很难说,因为你问题中的代码根本没有调用pprof。你能编辑这个问题来显示你正在使用的代码吗?当然,我已经说得更清楚了。我在这里是个新手,怎么强调都不过分。如果我的问题非常基本,我深表歉意!您将在应用程序退出之前立即开始分析,因此我希望配置文件为空。您需要将该行放在
main
的顶部。非常感谢!我觉得有点傻,我没有看到不同的包装。