我一直在使用Dave Cheney's gcvis
tool来解决内存泄漏问题。一切顺利,问题解决了。
但是,我不知道该怎么做,但是我一生都无法阻止垃圾收集器的输出淹没我的日志,这使开发非常困难。
将gctrace设置为任何值> 0也会导致垃圾收集器 在将内存释放回系统时发出摘要。
但是,这无效。
如何删除输出?
我尝试了以下方法:
导出为空值
$ export GODEBUG=
$ go run main.go
取消设置
$ unset GODEBUG
$ go run main.go
设置为零 (也尝试了不带引号的形式,仅用于完成操作)
$ export GODEBUG="gctrace=0"
$ go run main.go
无论如何,我每次都会得到此输出(修订的软件包名称):
# my-package-0
gc 1 @0.006s 10%: 0.025+3.4+0.11 ms clock, 0.20+1.7/5.9/1.7+0.94 ms cpu, 4->4->3 MB, 5 MB goal, 8 P
gc 2 @0.019s 7%: 0.005+1.0+0.086 ms clock, 0.047+0.67/1.8/2.8+0.69 ms cpu, 5->5->4 MB, 6 MB goal, 8 P
gc 3 @0.030s 6%: 0.006+2.8+0.091 ms clock, 0.053+0.10/4.8/4.2+0.73 ms cpu, 7->8->6 MB, 8 MB goal, 8 P
gc 4 @0.050s 6%: 0.030+4.2+0.096 ms clock, 0.24+1.0/7.3/3.7+0.76 ms cpu, 13->14->8 MB, 14 MB goal, 8 P
# my-package-1
gc 1 @0.007s 5%: 0.010+2.6+0.15 ms clock, 0.086+0.19/3.4/2.6+1.2 ms cpu, 4->4->2 MB, 5 MB goal, 8 P
gc 2 @0.015s 6%: 0.007+2.5+0.11 ms clock, 0.060+0.63/3.4/2.4+0.91 ms cpu, 5->5->4 MB, 6 MB goal, 8 P
gc 3 @0.028s 6%: 0.010+3.0+0.53 ms clock, 0.084+0.23/2.7/2.4+4.2 ms cpu, 8->9->5 MB, 9 MB goal, 8 P
# my-package-3
gc 1 @0.009s 15%: 0.012+4.5+1.7 ms clock, 0.10+0.62/4.5/0.77+13 ms cpu, 4->4->2 MB, 5 MB goal, 8 P
gc 2 @0.030s 9%: 0.006+2.8+0.10 ms clock, 0.050+0.63/3.7/2.9+0.85 ms cpu, 5->5->4 MB, 6 MB goal, 8 P
gc 3 @0.043s 11%: 0.53+3.9+0.084 ms clock, 4.3+7.0/7.8/5.2+0.67 ms cpu, 9->10->7 MB, 10 MB goal, 8 P
gc 4 @0.062s 10%: 0.027+3.6+0.12 ms clock, 0.21+5.2/6.3/5.0+1.0 ms cpu, 12->13->8 MB, 14 MB goal, 8 P
# my-package-4
[...]
应评论要求,以下是$ go env
的输出:
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/dimholt/Library/Caches/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/dimholt/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/fx/p9gpbcnd5_jdgqyp6z1w9tqr0000gn/T/go-build333219542=/tmp/go-build -gno-record-gcc-switches -fno-common"
还有我的main.go
:
package main
import (
"fmt"
"log"
"net/http"
"github.com/redacted/config"
"github.com/redacted/db"
)
func main() {
conf := config.GetConfig()
// Connect database.
db.Connect()
defer db.Close()
// Register all HTTP routes.
registerRoutes()
port := fmt.Sprintf(":%v", conf.Port)
log.Printf("documents: listening on port %v", port[1:])
log.Fatal(http.ListenAndServe(port, nil))
}
答案 0 :(得分:1)
其他地方是错误的。
运行GODEBUG= go run main.go
绝对应该在不运行main.go
的情况下运行GODEBUG
。在os.Getenv
的开头随意main.go
检查GODEBUG
-应该关闭。
您可以最小化main.go
并显示出来吗?您可以通过代码内部的某种方式设置调试标志。
尝试运行go env
并查看设置