Golang:使用net/http在分配的堆中不断增加(内存泄漏),

Ysa*_*sak 0 memory-leaks memory-management go

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

在此输入图像描述

去常规的数量

pet*_*rSO 5

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

包运行时

导入"运行时"

功能NumGoroutine

func NumGoroutine()int

NumGoroutine返回当前存在的goroutine数.

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

如果您没有在程序中正确终止goroutine,那么它们将成为非活动孤儿.Orphan goroutines保留内存,goroutine内存泄漏.随着时间的推移,您应该看到内存使用量稳步增长.

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