【发布时间】: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