我已经使用golang使用golang反向代理来构建应用程序api网关,但是我能够看到随着时间的推移逐渐增加的内存,并且我尝试进行剖析,这是启动后几小时内的图形。这有什么问题吗?所有分配都来自内置软件包和negroni mux。
当然,请监视您的应用程序,以使您知道驱动器的使用情况(当前请求的数量等),然后将其与资源使用率(CPU,内存,当前存在的goroutine的数量等)相关联。您应该具有应用程序资源使用情况的因果模型,并监视重大偏差。总之,采用系统的方法来测量和监视资源使用情况。
Package runtime
import"runtime"
func NumGoroutine
func NumGoroutine() int
NumGoroutine returns the number of goroutines that currently exist.
例如,监视并关联当前存在的goroutine的数量。 goroutine的数量应根据关键应用程序驱动程序(如当前请求的数量)在稳定状态附近振荡。
如果您未在程序中正确终止goroutine,则它们将变为非活动孤儿。孤立的goroutine保留内存,goroutine内存泄漏。您应该会看到随着时间的推移内存使用量稳步增加。
您的应用程序的goroutine模型是什么?您的应用程序的goroutine统计信息是什么?它们是否与记忆相关。它们与时间增加相关吗?