草庐IT

gc_enable

全部标签

go - 大分配数据 block 的巨大 GC 性能问题

我刚刚注意到,如果我在程序中分配一个巨大的内存块。GC将占用所有程序时间。这是POC。https://gist.github.com/martende/252f403f0c17cb489de4funcmain(){////////////////!!!!!!!/*IfIuncomment2linesbelowprogrammrunsfast*/nodesPool:=make([]int,300e6,300e6)_=nodesPool//////////////////////7file,_:=os.Open("result.txt")deferfile.Close()reader:=b

go - 从 slice 差异gccgo vs gc中删除元素

我发现GCCGO有一个非常奇怪的问题,我想知道是否有人可以解释它。我正在尝试使用建议的slice技巧(https://github.com/golang/go/wiki/SliceTricks)按索引从slice中删除一个元素。以下代码(https://play.golang.org/p/f039m1h7Z1):packagemainimport"fmt"funcmain(){xs:=[]int{0,1,2,3,4}i:=2xs,xs[len(xs)-1]=append(xs[:i],xs[i+1:]...),0fmt.Println(xs)}适用于go编译器(gorun),但是当我尝

golang GC分析? runtime.mallocgc 似乎名列前茅;然后是转向 sync.Pool 解决方案?

我有一个用Go编写的应用程序正在处理消息,需要以20K/秒(可能更多)的速率从网络(UDP)中获取消息,并且每条消息最多可以达到UDP数据包的最大长度(64KB-headersize),程序需要解码这个传入的数据包并编码成另一种格式并发送到另一个网络;目前在24core+64GBRAM的机器上运行正常,但偶尔会丢包,编程模式已经遵循pipelines使用多个go-routines/channels占用整机cpu负载的10%;因此它有可能使用更多的CPU%或RAM来处理所有20K/s的消息而不丢失任何消息;然后我开始分析,遵循这个profiling我在cpu配置文件中发现runtime.

go - 为什么 CGO_ENABLE 会对虚拟内存产生如此大的影响?

我有一个用Golang编写的小守护进程,它循环工作并做一些事情。我发现,在使用CGO_ENABLE=1或CGO_ENABLED=0编译时,守护进程的行为有所不同。例如,在CGO_ENABLE=1(默认值)的情况下,程序的VSZ在短时间内(一小时内)膨胀到1-2GB。当CGO_ENABLED=0时,VSZ在很长一段时间内(数天)是相同的。看看下面的数字:CGO_ENABLED=1(守护进程已经工作了5分钟)$grep-E'VmSize|VmRSS'/proc/14916/statusVmSize:1084052kBVmRSS:12524kBCGO_ENABLED=0(守护进程已工作约30

centos - docker exec -it 返回 "cannot enable tty mode on non tty input"

dockerexec-it命令返回以下错误“无法在非tty输入上启用tty模式”level="fatal"msg="cannotenablettymodeonnonttyinput"我在centosbox6.6上运行docker(1.4.1)。我正在尝试执行以下命令dockerexec-itcontainerName/bin/bash但我收到以下错误level="fatal"msg="cannotenablettymodeonnonttyinput" 最佳答案 运行dockerexec-i而不是dockerexec-it解决了我的问

centos - docker exec -it 返回 "cannot enable tty mode on non tty input"

dockerexec-it命令返回以下错误“无法在非tty输入上启用tty模式”level="fatal"msg="cannotenablettymodeonnonttyinput"我在centosbox6.6上运行docker(1.4.1)。我正在尝试执行以下命令dockerexec-itcontainerName/bin/bash但我收到以下错误level="fatal"msg="cannotenablettymodeonnonttyinput" 最佳答案 运行dockerexec-i而不是dockerexec-it解决了我的问

garbage-collection - 如果 gc 在 go 中是可选的怎么办?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭11年前。这样的语言是否可行,或者go中是否有特定功能绝对需要某种形式的gc?注意:我不是反gc,但来自C/C++背景并从事实时服务器应用程序,我更愿意保持一定程度的控制来控制内存的获取方式和时间(不能有实时运行中发生10秒的垃圾收集)。考虑到我的要求,我的担忧是否切合实际?还是gogc太好了,我的担心是多余的?Go的gc是我对尝试C++实时服务器端口的唯一保留。

去 GC 奇怪的行为

我们有几个用Go编写的服务。运行几周后,我们发现堆大小偶尔会不断增加。我们添加了一些仪器来发现这是由于GC频率降低所致。我们使用的是Go1.8。我不确定这是GoGC中的错误还是我们编写的内容触发了此行为。任何指示、提示都会有所帮助。 最佳答案 永远不要在分析之前猜测性能不佳的原因。这是仪器https://golang.org/doc/diagnostics.html#profiling 关于去GC奇怪的行为,我们在StackOverflow上找到一个类似的问题:

memory - Go 的精确 GC 是如何工作的?

Go1.3实现了一个precise垃圾收集器。它是如何精确识别指针的? 最佳答案 看看“Changestothegarbagecollector”,机制似乎很简单:StartingwithGo1.3,theruntimeassumesthatvalueswithpointertypecontainpointersandothervaluesdonot.Thisassumptionisfundamentaltotheprecisebehaviorofbothstackexpansionandgarbagecollection.Prog

go - 收集实时 GC 指标 - Golang

在Go中是否有一种直接的方法来获取有关GC和堆大小的信息,以便将它们暴露给监控仪表板。我查看了运行时包,但那里似乎没有任何东西可以做到这一点。理想情况下,这不应该需要任何开销,例如在分析模式下运行应用程序等,但应该为生产做好准备。 最佳答案 您可以使用GODEBUG=gctrace=1获得连续输出,这在runtimepackage中有记录.否则需要从runtime.MemStats收集信息和debug.GCStats. 关于go-收集实时GC指标-Golang,我们在StackOverf