最近我遇到了一个情况,我们的Golang应用程序消耗了将近30GB的内存,会定期占用所有24个CPU核心,几乎接近100%。这可能会持续超过3秒钟。我们的Golang版本是1.4.1,运行在64位Linux上。
我搜索了一些信息,下面是我的假设:
- 在我们的应用程序中,我们使用了一个数据类型
[]map[string]*list
,而该类型的实例将包含超过250K个键。 - 可能是Golang 1.4.1中的gc消耗更多的CPU时间并停止工作。但是,我找不到配置gc goroutines(线程)并行性的参数。它是否与
GOMAXPROCS
参数有关。