@ -23,7 +23,7 @@ go build -n # -n选项用来显示编译过程中所有执行的命令, 不会
< link rel = "icon" href = "/favicon.png" >
< link rel = "stylesheet" href = "/book.min.f06572240ce28e67eb332ac5cf5d59a696c47ad4c6f700d5842c5ed93dd8ec77.css" integrity = "sha256-8GVyJAzijmfrMyrFz11ZppbEetTG9wDVhCxe2T3Y7Hc=" crossorigin = "anonymous" >
< script defer src = "/flexsearch.min.js" > < / script >
< script defer src = "/en.search.min. b60b587eec74092fc10c110f802948ebe5dc902d7b8dfdc51f147ae4038eec1d.js" integrity = "sha256-tgtYfux0CS/BDBEPgClI6+XckC17jf3FHxR65AOO7B0 =" crossorigin = "anonymous" > < / script >
< script defer src = "/en.search.min. 17ed8785d618483565ce5458241250de0bb24d7b931b8b71446036ef43affd37.js" integrity = "sha256-F+2HhdYYSDVlzlRYJBJQ3guyTXuTG4txRGA270Ov/Tc =" crossorigin = "anonymous" > < / script >
< script async src = "https://www.googletagmanager.com/gtag/js?id=G-BQ229RRTTX" > < / script >
< script >
@ -507,66 +507,51 @@ go tool objdump -s "main.(main|add)" ./test # objdump支持搜索特定
GC
< a class = "anchor" href = "#gc" > #< / a >
< / h3 >
< p > 与GC相关的参数是gctrace, 当设置为1时候, 会输出gc信息到标准err输出中。使用方式示例如下: < / p >
< div class = "highlight" > < pre tabindex = "0" style = "color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;" > < code class = "language-shell" data-lang = "shell" > < span style = "display:flex;" > < span > GODEBUG< span style = "color:#f92672" > =< / span > gctrace< span style = "color:#f92672" > =< / span > < span style = "color:#ae81ff" > 1< / span > godoc -http< span style = "color:#f92672" > =< / span > :8080
< / span > < / span > < / code > < / pre > < / div > < p > GC时候输出的内容格式如下: < / p >
< blockquote >
< p > gc# @#s #%: #+#+# ms clock, #+#/#/#+# ms cpu, #-> #-> # MB, # MB goal, #P< / p >
< / blockquote >
< p > 格式解释说明如下:< / p >
< p > 与 GC 相关的参数是 gctrace, 当设置为1时候, 会输出GC相关信息到标准错误输出。使用方式示例如下: < / p >
< div class = "highlight" > < pre tabindex = "0" style = "color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;" > < code class = "language-shell" data-lang = "shell" > < span style = "display:flex;" > < span > GODEBUG< span style = "color:#f92672" > =< / span > gctrace< span style = "color:#f92672" > =< / span > < span style = "color:#ae81ff" > 1< / span > go run main.go
< / span > < / span > < / code > < / pre > < / div > < p > GC 时候输出的内容格式如下:< / p >
< div class = "highlight" > < pre tabindex = "0" style = "color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;" > < code class = "language-rust" data-lang = "rust" > < span style = "display:flex;" > < span > gc # < span style = "color:#f92672" > @< / span > #s #< span style = "color:#f92672" > %< / span > : #< span style = "color:#f92672" > +< / span > #< span style = "color:#f92672" > +< / span > # ms clock, #< span style = "color:#f92672" > +< / span > #< span style = "color:#f92672" > /< / span > #< span style = "color:#f92672" > /< / span > #< span style = "color:#f92672" > +< / span > # ms cpu, #-> #-> # < span style = "color:#66d9ef" > MB< / span > , # < span style = "color:#66d9ef" > MB< / span > goal, # P
< / span > < / span > < / code > < / pre > < / div > < p > 格式解释说明如下:< / p >
< ul >
< li > gc#: GC 执行次数的编号,每次叠加。 < / li >
< li > @#s: 自程序启动后到当前的具体秒数。 < / li >
< li > #%: 自程序启动以来在GC中花费的时间百分比。 < / li >
< li > #+… +#: GC 的标记工作共使用的 CPU 时间占总 CPU 时间的百分比。 < / li >
< li > #-> #-> # MB: 分别表示 GC 启动时, GC 结束时, GC 活动时的堆大小. < / li >
< li > #MB goal: 下一次触发 GC 的内存占用阈值。 < / li >
< li > #P: 当前使用的处理器 P 的数量。 < / li >
< li > < strong > gc #< / strong > : GC 编号,每次 GC 时递增< / li >
< li > < strong > @#s< / strong > :程序自启动以来的时间(单位秒)< / li >
< li > < strong > #%< / strong > :程序自启动以来花费在 GC 上的时间百分比< / li >
< li > < strong > #+… +#< / strong > : GC 各阶段花费的时间, 分别为单个P的墙上时间和累计CPU时间< / li >
< li > < strong > #-> #-> # MB< / strong > :分别表示 GC 启动时, GC 结束时, GC 活动时的堆大小< / li >
< li > < strong > #MB goal< / strong > :下一次触发 GC 的内存占用阈值< / li >
< li > < strong > #P< / strong > : 当前使用的处理器P的数量< / li >
< / ul >
< p > 比如对于以 下输出内容:< / p >
< p > 比如对于下面的 输出内容,详细解释如下 : < / p >
< blockquote >
< p > gc 100 @0.904s 11%: 0.043+2.8+0.029 ms clock, 0.34+3.4/5.4/0 +0.23 ms cpu, 10-> 11-> 6 MB, 12 MB goal, 8 P< / p >
< p > gc 100 @0.904s 11%: 0.043+2.8+0.029 ms clock, 0.34+3.4/5.4/13.6 +0.23 ms cpu, 10-> 11-> 6 MB, 12 MB goal, 8 P< / p >
< / blockquote >
< ul >
< li >
< p > gc 100: 第 100 次 GC< / p >
< / li >
< li >
< p > @0.904s: 当前时间是程序启动后的0.904s< / p >
< / li >
< li >
< p > 11%:程序启动后到现在共花费 11% 的时间在 GC 上< / p >
< / li >
< li >
< p > 0.043+2.8+0.029 ms clock< / p >
< li > < strong > gc 100< / strong > :第 100 次 GC< / li >
< li > < strong > @0.904s< / strong > : 当前时间是程序启动后的0.904s< / li >
< li > < strong > 11%< / strong > :程序启动后到现在共花费 11% 的时间在 GC 上< / li >
< li > < strong > 0.043+2.8+0.029 ms clock< / strong >
< ul >
< li > 0.043:表示单个 P 在 mark 阶段的 STW 时间< / li >
< li > 2.8:表示所有 P 的 mark concurrent( 并发标记) 所使用的时间< / li >
< li > 2.8:表示所有 P 的 concurrent mark( 并发标记) 所使用的时间< / li >
< li > 0.029:表示单个 P 的 markTermination 阶段的 STW 时间< / li >
< / ul >
< / li >
< li >
< p > 0.34+3.4/5.4/0+0.23 ms cpu:< / p >
< li > < strong > 0.34+3.4/5.4/0+0.23 ms cpu< / strong >
< ul >
< li > 0.34:表示整个进程在 mark 阶段 STW 停顿的时间, 一共0.34秒< / li >
< li > 3.4/5.4/0: 3.4 表示 mutator assist 占用的时间, 5.4 表示 dedicated + fractional 占用的时间, 0 表示 idle 占用的时间 < / li >
< li > 0.23 ms: 0.23 表示整个进程在 markTermination 阶段 STW 时间< / li >
< li > 0.34:表示整个进程在 mark 阶段 STW 停顿的时间, 一共0.34秒,即 0.043 * 8 < / li >
< li > 3.4/5.4/13.6: 3.4 表示 mutator assist 占用的时间, 5.4 表示 dedicated + fractional 占用的时间, 13.6 表示 idle 占用的时间。这三块累计时间为22.4, 即2.8 * 8 < / li >
< li > 0.23 ms: 0.23 表示整个进程在 markTermination 阶段 STW 时间, 即0.029 * 8< / li >
< / ul >
< / li >
< li >
< p > 10-> 11-> 6 MB:< / p >
< li > < strong > 10-> 11-> 6 MB< / strong >
< ul >
< li > 10: 表示开始 mark 阶段前的 heap_live 大小< / li >
< li > 11: 表示开始 markTermination 阶段前的 heap_live 大小< / li >
< li > 6: 表示被标记对象的大小< / li >
< / ul >
< / li >
< li >
< p > 12 MB goal: 表示下一次触发 GC 回收的阈值是 12 MB< / p >
< / li >
< li >
< p > 8 P: 本次 GC 一共涉及8 P< / p >
< / li >
< li > < strong > 12 MB goal< / strong > :表示下一次触发 GC 回收的阈值是 12 MB< / li >
< li > < strong > 8 P< / strong > :本次 GC 一共涉及8 个P< / li >
< / ul >
< h4 id = "gogc参数" >
GOGC参数