Golang:使用net / http,

时间:2017-08-31 08:49:30

标签: go memory-management memory-leaks

我已经使用golang使用golang反向代理构建应用程序api网关,但是我能够看到逐渐增加的内存并且我试图分析,这是启动后几小时内的图形。这有什么不对或预期。所有的分配都来自内置的软件包和negroni mux。

enter image description here

Number of go routins

1 个答案:

答案 0 :(得分:5)

当然,监控您的应用程序,以便了解驱动器的使用情况(当前请求的数量等),然后将其与资源使用情况(CPU,内存,当前存在的goroutine数量等)相关联。您应该具有应用程序资源使用的因果模型,并监视重大偏差。总之,采用系统的方法来衡量和监控资源使用情况。

  

Package runtime

     

导入"运行时"

     

func NumGoroutine

     

func NumGoroutine()int

     

NumGoroutine返回当前存在的goroutine数量。

例如,监视并关联当前存在的goroutine的数量。根据关键应用程序驱动程序(例如当前请求的数量),goroutine的数量应在稳定状态下振荡。

如果你没有在你的程序中正确终止goroutine,那么他们就会成为非活跃的孤儿。 Orphan goroutines保留内存,goroutine内存泄漏。随着时间的推移,你应该看到内存使用率稳步增长。

您的应用程序的goroutine模型是什么?您的申请的goroutine统计数据是什么?它们与记忆有关吗?它们是否与增加时间相关?