【问题标题】:Is there any way to calculate the startup time of Go app? [closed]有什么方法可以计算 Go 应用的启动时间吗? [关闭]
【发布时间】:2021-07-25 15:01:10
【问题描述】:

我试图计算 Go 应用程序启动和接受请求所需的时间。 我尝试使用:

func main() {
    start:=time.Now()
    repo.CreateConnection()
    router := mux.NewRouter()
    r := bookController.Controller(router)
    fmt.Println("Starting server on the port 8080...")
    log.Fatal(http.ListenAndServe(":8080", r))
    fmt.Println(time.Since(start))
}

但是控制台只打印到 在端口 8080 上启动服务器...

GOROOT=/usr/local/go #gosetup
GOPATH=/Users/admin/go #gosetup
/usr/local/go/bin/go build -o /private/var/folders/t3/1fk2w7y55qs1dfxbxbvpsn9h0000gp/T/___go_build_payments_go_performance go-performance #gosetup
/private/var/folders/t3/1fk2w7y55qs1dfxbxbvpsn9h0000gp/T/___go_build_go_performance
Successfully connected!
Starting server on the port 8080...

有没有显示正确的启动时间? 启动时间是指这个应用程序开始监听 8080 端口所花费的时间。

【问题讨论】:

  • 嗯,这取决于 a) 您如何定义“启动时间”和 b) 您想要达到的准确度。没有程序可以准确地计算出它自己的启动时间,因为程序至少要在一些启动发生之后才能开始计数。
  • 如果您不需要完美的准确性,您可以让一个提前执行的语句启动一个计时器(例如main() 中的第一条语句、init() 函数或包级变量声明)。然后您可以在执行http.ListenAndServe 之前立即咨询该计时器。但这不会计算启动计时器之前的启动时间,也不会计算调用 http.ListenAndServe 和实际打开套接字进行侦听之间的时间。
  • 你用这个计算做什么?这可能有助于制定合理的方法。
  • http.ListenAndServe 程序退出之后,这将告诉您程序运行了多长时间,而不是启动了多长时间。
  • ListenAndServe 在开始接受请求之前所花费的时间对于您的用例来说可以忽略不计,因此在此调用之前进行测量就足够了。

标签: performance go testing performance-testing


【解决方案1】:

最简单的,对于大多数情况来说应该足够好,是这样的:

package main

var start = time.Now()

/* place any other package variable declarations after `start` */

func main() {
    /* set up code */
    fmt.Printf("Startup took aprox %v\n", time.Since(start))
    log.Fatal(http.ListenAndServe(...))
}

这可确保start 在程序执行中尽早初始化,在其他包级变量之前,在任何init 函数之前。然后作为启动服务器之前的最后一件事,它会显示经过的时间。

【讨论】:

    猜你喜欢
    • 2015-12-18
    • 2012-01-27
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多