golang OOM分析

curl localhost:8888/debug/pprof/heap >heap.base

sleep 60s

curl localhost:8888/debug/pprof/heap >heap.current

go tool pprof -http localhost:8889 -base heap.base heap.current

 

 

 

定位到方法:99%新生成的对象在这个方法里

查看view->source,发现

 

 

 

 

 

发现问题代码:itemMap := item 这里做了浅拷贝,又循环了item,导致边赋值边循环,循环了很多次,创建了很多对象

 

解决方案:循环遍历赋值

itemMap := make(map[string]interface{})

for k,v := range item {

  itemMap[k] = v

}

 浅拷贝:只取了地址

=号这个都是浅拷贝,必须循环赋值才是深拷贝

itemMap := make(map[string]interface{})
itemMap = item

深拷贝:复制了值

posted @ 2020-10-26 16:14  zipon  阅读(2874)  评论(0编辑  收藏  举报