我最近遇到过这样一种情况:我们的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的密钥。[]map[string]*list
参数有一些关系。答案 0 :(得分:0)
你真的需要知道这样的问题。
那说你可以减少放在垃圾收集器上的负担。以下是一些建议:
[]map[string][]whatever_you_are_storing
吗?sync.Pool
。map[string]list
而不是map[string]*list
。它会改变你的程序的行为,但对于一个小的结构,无论如何它都可能有意义。那些是黑暗中的镜头。