众所周知,Go语言的垃圾回收机制,内存自动回收,不需开发人员管理,这点在开发中一般是无感知状态,实际开发中也很少遇到内存溢出问题,不过在处理高并发数据的时候,偶尔会感知一点内存回收的动作。Statsviz在mian函数嵌入一个goroutine,就可以实现实时查看程序运行状态,包括GC, MemStats等等。
0. 使用教程
安装:
go get github.com/arl/statsviz
然后在你的main函数嵌入以下代码即可:
statsviz.RegisterDefault()
go func() {
log.Println(http.ListenAndServe("localhost:6060", nil))
}()
启动程序后,在浏览器访问 http://localhost:6060/debug/statsviz/即可查看效果
1. 实现原理
主要分为两部分,前端部分是一个数据展示页面,也就是图形化页面,数据来源于后端的runtime.ReadMemStats
方法,通过ws模式与前端交互,后端定时获取runtime运行时的状态参数。与我们之前接触的云探针一个原理。
2. 不足或改进
可能该项目的开发者比较擅长后端开发,前端UI布局实在一般,实际上完全可以做成单屏幕自适应布局。从体验而言,基本上heap所占用的实时内存是我们最关注的,其余的数据变化不大,或许可以使用归一化或者标准化,将其映射到便于比较的尺度。
3. 开源地址
https://github.com/arl/statsviz