繁体   English   中英

在Golang 1.4.1中由GC引起的cpu核心是什么

[英]What is the cpu cores caused by GC in Golang 1.4.1

我最近遇到过这样一种情况:我们的Golang应用程序消耗了近30GB的内存,会定期吃掉所有24个CPU内核几乎100%。 这将持续超过3秒。 我们的Golang版本在Linux 64位上是1.4.1。

我已经google了一些信息。 这是我的假设:

  • 在我们的应用程序中,我们使用数据类型[]map[string]*list ,此类型的实例将包含超过250K的键。
  • 也许golang 1.4.1中的gc消耗更多的CPU时间并阻止世界。 但是,我找不到用于配置gc goroutines(线程)并行性的参数。 并且,它与GOMAXPROCS参数有一些关系GOMAXPROCS

你真的得知道这样的问题。

这说你可能能够减少你在垃圾收集器上的负担。 以下是一些建议:

  1. 链接列表会导致大量小额分配。 您是否考虑过使用[]map[string][]whatever_you_are_storing
  2. 你在这个巨大的地图上添加和删除东西吗? 您添加和删除的内容基本相同吗? 如果是这样,您可以使用sync.Pool
  3. 您是否尝试过直接存储项目: map[string]list而不是map[string]*list 它会改变你的程序的行为,但对于一个小的结构,它可能是有意义的。

那些是黑暗中的镜头。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM