go环境变量

Go语言环境安装完成后,可以使用 go env命令查看环境变量,打开命令终端执行go env命令,输出内容如下:

GOARCH="amd64"

GOBIN="/Users/***/Desktop/go/bin"

GOEXE=""

GOHOSTARCH="amd64"

GOHOSTOS="darwin"

GOOS="darwin"

GOPATH="/Users/***/Desktop/go"

GORACE=""

GOROOT="/usr/local/go"

GOTOOLDIR="/usr/local/go/pkg/tool/darwin\_amd64"

GCCGO="gccgo"

CC="clang"

GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/pr/llzpdzcn6n7crtrjmpmwyjxm0000gn/T/go-build496244169=/tmp/go-build -gno-record-gcc-switches -fno-common"

CXX="clang++"

CGO\_ENABLED="1"

CGO\_CFLAGS="-g -O2"

CGO\_CPPFLAGS=""

CGO\_CXXFLAGS="-g -O2"

CGO\_FFLAGS="-g -O2"

CGO\_LDFLAGS="-g -O2"

PKG\_CONFIG="pkg-config"

> runtime 包 包含与 Go 的运行时系统交互的操作,例如控制 goroutines 的函数。 

> 也包含 reflect 包使用的低级别的类型信息;查看 reflect 的文档了解运行时类型的可编程接口。 

> 以下环境变量($name 或 %name% 取决于主机操作系统)控制 Go 程序的运行时行为,其含义和用途可能会随版本发布而变化。

GOGC

GOGC变量设置初始垃圾收集目标百分比。

当新分配的数据与上一次收集后剩余的活动数据的比率达到此百分比时,将触发收集。

默认值为GOGC = 100。

设置GOGC = off会完全禁用垃圾收集器。

runtime/debug包的SetGCPercent函数允许在运行时更改此百分比。

GODEBUG

GODEBUG变量控制运行时内的调试变量。

它是以逗号分隔的name = val对列表,用于设置这些命名变量:

allocfreetrace:设置 `allocfreetrace = 1` 会导致对每个对象的分配和释放进行概要分析和栈跟踪。

clobberfree:设置 `clobberfree = 1` 使垃圾回收器在释放对象时用错误内容破坏对象的内存内容。

cgocheck:

设置 `cgocheck = 0` 禁用使用 cgo 将 Go 指针错误传递到非 Go 代码的所有包检查。

设置 `cgocheck = 1`(默认值)可以启用相对便宜的检查,这些检查可能会遗漏一些错误。

设置 `cgocheck = 2` 启用昂贵的检查,这些检查不会遗漏任何错误,但是会导致程序运行速度变慢。

efence:

设置 `efence = 1` 会导致分配器以某种模式运行,在该模式下每个对象都分配在一个唯一的页面上,地址永远不会被回收。

gccheckmark:

设置 `gccheckmark = 1` 可以通过在 STW 时执行第二次标记传递来验证垃圾收集器的并发标记阶段。

如果第二次传递找到了一个并发标记未找到的可达对象,垃圾收集器将 panic。

gcpacertrace:设置 `gcpacertrace = 1` 会导致垃圾收集器打印有关并发 pacer 内部状态的信息。

gcshrinkstackoff:

设置 `gcshrinkstackoff = 1` 禁止将 goroutines 移动到较小的栈上。

在这种模式下,goroutine 的栈只能增长。

gcstoptheworld:

设置 `gcstoptheworld = 1` 禁用并发垃圾收集,使每个垃圾收集成为一个 STW 事件。

设置 `gcstoptheworld = 2` 还会在垃圾收集完成后禁用并发清除。

gctrace:

设置 `gctrace = 1` 会导致垃圾收集器在每次收集时向标准错误输出发出一行,

汇总收集的内存量和暂停的长度。此行的格式可能会发生变化。

目前格式是:

gc # @#s #%: #+#+# ms clock, #+#/#/#+# ms cpu, #->#-># MB, # MB goal, # P

其中字段含义如下('#' 代表数字):

      gc #            每次 GC 时递增的 GC 编号

      @#s              程序运行的秒数

      #%              自程序启动后在 GC 中花费的时间百分比

      #+...+#          GC 各阶段的挂钟时间(wall-clock)/CPU 时间

      #->#-># MB      GC 开始时的堆大小、GC 结束时的堆大小和活动堆大小

      # MB goal        目标堆大小

      # P              使用的处理器数量

这些阶段是 stop-the-world(STW)清除终止(sweep termination),

并发标记和扫描,以及 STW 标记终止(mark termination)。

`mark/scan` 的 CPU 时间被分解为辅助时间(根据分配执行的 GC)、后台 GC 时间和空闲 GC 时间。

如果该行以 `"(forced)"` 结尾,则此 GC 由 `runtime.GC()` 调用强制执行。

挂钟时间:

根据计算机的内部时钟流逝的时间,这应该与外界的时间相匹配。

这与 CPU 使用率无关; 它仅供参考。

如果挂钟时间 < CPU 时间,那么您正在并行执行一个程序。

如果挂钟时间 > CPU时间,则表示您正在等待磁盘,网络或其他设备。

将 `gctrace` 设置为任何大于 0 的值也会导致垃圾收集器在将内存释放回系统时发出摘要。

将内存返回到系统的这个过程称为清除(`scavenging`)。

此摘要的格式可能会更改。

目前格式是:

    scvg#: # MB released  printed only if non-zero

    scvg#: inuse: # idle: # sys: # released: # consumed: # (MB)

其中字段含义如下('#' 代表数字):

    scvg#          清除周期数,每次清除时递增

    inuse: #        MB 已使用或部分使用的 spans

    idle: #        MB spans 待清除

    sys: #          从系统映射的 MB

    released: #    释放到系统的 MB

    consumed: #    从系统中分配的 MB

madvdontneed:

设置 madvdontneed = 1  当将内存返回到内核时,将在 Linux 上使用 MADV_DONTNEED 而不是 MADV_FREE。

这效率较低,但会导致 RSS(resident set size 常驻内存集)数量下降得更快。

madvise()  系统调用允许一个了解其内存行为的进程将其描述给系统,给予使用内存的建议。

int

madvise(void *addr, size_t len, int advice);

系统可以使用传入的建议来更改其虚拟内存分页策略。

此建议可以提高应用程序和系统性能。建议有很多种其中两种:

MADV_DONTNEED:

表示应用程序不希望很快访问此地址范围。

MADV_FREE:

表示应用程序不需要此地址范围中包含的信息,因此可以立即重用这些页面。

地址范围仍然有效。

memprofilerate:

设置 `memprofilerate = X` 将更新 runtime.MemProfileRate 的值。

设置为 0 时,禁用内存分析。

MemProfileRate 控制在内存概要文件中记录和报告的内存分配比例。

分析器的目标是对每 `MemProfileRate` 字节的平均分配进行抽样。

要在概要文件中包含每个已分配的块,请将 `MemProfileRate` 设置为 1。

要完全关闭分析,请将 `MemProfileRate` 设置为 0。

处理内存概要文件的工具假设概要文件速率在程序的整个生命周期中是恒定的,并且等于当前值。

更改内存分析速率的程序应该只改变一次,在程序执行过程中越早越好(例如,在 `main` 的开头)。

var MemProfileRate int = 512 * 1024

invalidptr:

默认 `invalidptr = 1`,如果在指针类型的位置中发现无效的指针值(例如,1),

则会导致垃圾收集器和栈复制器使程序 crash。

设置 `invalidptr = 0` 将禁用此检查。

这应该只被用作诊断错误代码的临时解决方案。

真正的解决方案是不将整数存储在指针类型的位置。

sbrk:

设置 `sbrk = 1` 用一个简单的分配器替换内存分配器和垃圾收集器,

该分配器从操作系统获取内存并且永远不会回收任何内存。

scavenge:

`scavenge = 1` 启用堆清除程序的调试模式。

scheddetail:

设置 `schedtrace = X` 和 `scheddetail = 1` 会导致调度程序每 `X` 毫秒发出一次详细的多行信息,

描述`调度程序`,`处理器`,`线程` 和 `goroutines` 的状态。

schedtrace:

设置 `schedtrace = X` 使调度程序每 `X` 毫秒发出一行标准错误,汇总调度程序状态。

tracebackancestors:

设置 `tracebackancestors = N` 使用创建 `goroutines` 的栈扩展回溯,

其中 `N` 限制要报告的祖先 `goroutines` 的数量。

这也扩展了 `runtime.Stack` 返回的信息。

祖先的 `goroutine IDs` 将引用创建时 goroutine 的 ID;

这个 ID 有可能被重用于另一个 goroutine。

将 `N` 设置为 0 将不报告任何祖先信息。

net,net/http和crypto/tls 也引用GODEBUG中的调试变量,有关详细信息,请参阅这些包的文档。

GOMAXPROCS

GOMAXPROCS变量限制了可以同时执行用户级 Go 代码的操作系统线程数

(即,可以同时执行的最大CPU数)。

代表 Go 代码在系统调用中可以阻塞的线程数没有限制;那些不计入GOMAXPROCS限制。

该包的GOMAXPROCS函数查询并更改限制。

GOTRACEBACK

GOTRACEBACK变量控制 Go 程序因未恢复的panic或意外的运行时条件而失败时生成的输出量。

默认情况下,失败会打印当前goroutine的栈跟踪,省略运行时系统内部的函数,然后使用退出代码2退出。

如果当前goroutine或者故障都不在运行时内部,则故障会打印所有goroutines的栈跟踪。

GOTRACEBACK = none完全省略了 goroutine 栈跟踪。

GOTRACEBACK = single(默认值)的行为如上所述。

GOTRACEBACK = all为用户创建的所有 goroutines 添加栈跟踪。

GOTRACEBACK=system就像"all",但为运行时函数添加了栈帧,并显示了运行时内部创建的 goroutine。

GOTRACEBACK=crash就像"system",但是以特定于操作系统的方式 crash 而不是退出。例如,在Unix系统上,crash引发SIGABRT以触发核心转储(core dump)。

由于历史原因,GOTRACEBACK设置0,1和2分别是none,all和system的同义词。

runtime/debug包的SetTraceback函数允许在运行时增加输出量,但不能减少到低于环境变量指定的输出量。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容