线上程序跑了一周, 内存奔到5G
使用命令:kubectl top pod -n {namespace}
使用pprof查看是否是go内存泄漏
注:程序运行时加上pprof才能查看(_ "net/http/pprof")
升级时存了一份当时的内存文件
只要下载现在的内存文件做一下比较,看是否有内存泄漏
go tool pprof http://10.3.0.200:30985/debug/pprof/heap
go tool pprof -base .\pprof.monitorweb.alloc_objects.alloc_space.inuse_objects.inuse_space.003.pb.gz .\pprof.monitorweb.alloc_objects.alloc_space.inuse_objects.inuse_space.004.pb.gz
比较后发现内存并没有增大多少
进入容器中查看
查看虚拟内存虚高
查看内存真实占有
查了好久想到seelog日志量增大了, 看是否是日志cache导致
接着把回滚日志(就是归档日志)备份了一个, 把原日志文件删除了,发现内存降下来了
原来问题出在之前的每日的日志还占用cash
解决问题
先在k8s中限制一下pod的内存, 不能影响到其他pod,观察一段时间
//yaml
resources:
requests:
cpu: "200m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "512Mi"
后续: 限制后内存不超过512M后一直保持在300多M,也不往上涨了,应该是缓存被及时清理了