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

时间:2016-01-11 11:58:42

标签: go garbage-collection

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

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

  • 在我们的应用中,我们使用数据类型PS D:\PShell> D:\PShell\SO\34718014.ps1 skipped line: Name ;Computer skipped line: [user1][Comp1] [user2][Comp2] [user3][Comp3] [user4][Comp4] Ansgar Wiechers' solution: [user1 ][Comp1] [user2 ][Comp2] [user3 ][Comp3] [user4 ][Comp4] [][] ,此类型的实例将包含超过250K的密钥。
  • 也许golang 1.4.1中的gc消耗更多的CPU时间并阻止世界。但是,我找不到用于配置gc goroutines(线程)并行性的参数。并且,它是否与[]map[string]*list参数有一些关系。

1 个答案:

答案 0 :(得分:0)

你真的需要知道这样的问题。

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

  1. 链接列表会产生大量小额分配。您考虑过使用[]map[string][]whatever_you_are_storing吗?
  2. 您是否在这张巨型地图中添加和删除内容?您添加和删除的内容基本相同吗?如果是这样,您可以使用sync.Pool
  3. 您是否尝试过直接存储该项目:map[string]list而不是map[string]*list。它会改变你的程序的行为,但对于一个小的结构,无论如何它都可能有意义。
  4. 那些是黑暗中的镜头。