```go
package main
import (
"fmt"
)
func main() {
for {
go NewJob()
}
}
func NewJob() {
var buf [1024]byte
fmt.Println(buf)
}
```
内存持续上涨,到一定程度直接因为内存读取过多闪退崩溃。如果真的遇到这种情况的程序,需要goroutine里开很多buf,该这么解决?
请问何解
你所说的1秒钟开一个buf,容易耗尽?我在你的程序的for循环里sleep 1秒后,基本上内存维持在2M以内并且没有看到增长啊
这样疯狂的开goroutine,我实验到2钟崩溃的情况
1:因为短时间巨量的终端输出,导致拿不到相关锁 panic了
2:单个goroutine中分配过多的内存,同一时间又很多goroutine,导致在go的垃圾回收之前耗尽内存,我这边环境是大致每个goroutine分配高于10M的内存的时候会出现这种情况,如果低于10M,则内存会维持在一个稳定的数值,如果在for语句中添加间隔输出(每开1000个goroutine输出一次)会明显感觉到程序的停顿,应该就是gc在运行了
#6
更多评论
<a href="/user/channel" title="@channel">@channel</a> 哪些开源项目使用了“重用对象池”的方法?请赐教,我去学习一下
#2