```go
package main
import (
"fmt"
)
func main() {
for {
go NewJob()
}
}
func NewJob() {
var buf [1024]byte
fmt.Println(buf)
}
```
内存持续上涨,到一定程度直接因为内存读取过多闪退崩溃。如果真的遇到这种情况的程序,需要goroutine里开很多buf,该这么解决?
请问何解
gc有自己的触发机制,可以google一下,但是通用的想法是:
不要依赖这个机制释放内存,只当作一个锦上添花的东西,要保证自己的程序稳定运行,要评估一下并发量,限制goroutine的数量。
比如一个goroutine占用2M内存,(2M我觉的不少了,啥都可以算上了),那么4g可用内存的机器,不考虑goroutine调度的情况下,可以支持2000并发数,2000并发每秒的单机我觉得已经是相当不错的业务了,毕竟一般都不可能是单台机器组成服务。
#7
更多评论
<a href="/user/channel" title="@channel">@channel</a> 哪些开源项目使用了“重用对象池”的方法?请赐教,我去学习一下
#2