我遇到一个问题,当容器内的应用程序将日志记录到已安装目录中的文件中时,容器使用的内存会不断增加。
我预计内存使用率不会因此而增加。 有谁知道它为什么会增加? 谢谢!!
这是我做的:
写一个只写'#34; hello world"进入" /home/mylog/test.txt"。
func main(){
file, _ := os.OpenFile("/home/mylog/test.txt", os.O_WRONLY|os.O_CREATE, 0666)
defer file.Close()
for {
fmt.Fprintln(file, "hello world")
}
}
构建泊坞窗图片
docker build -t mylog .
Dockerfile
FROM golang RUN mkdir -p /home/mylog COPY main.go /go WORKDIR /go CMD ["go","run","main.go"]
docker run -d -v $PWD:/home/mylog mylog
docker stats
CONTAINER CPU% MEMUSAGE / LIMIT MEM% NET I/O BLOCK I/O PIDS 100.41% 527MiB / 15.5GiB 3.32% 648B /0B 72.3MB / 0B 15
CONTAINER CPU% MEMUSAGE / LIMIT MEM% NET I/O BLOCK I/O PIDS 100.15% 844.8MiB / 15.5GiB 5.32% 648B /0B 72.3MB / 0B 15
答案 0 :(得分:5)
不时打电话给这个。
file.Sync()
https://golang.org/pkg/os/#File.Sync
如果你不调用它,它会写入内存并等待file.Close()
以便将更改提交给文件。
在这种情况下Close in not called
因为它在defer
中(这意味着它在函数返回时被调用,并且在这里它永远不会返回,因为它是永无止境的)。
LE: 也可以尝试使用:
file.WriteString("hello world")
而不是
fmt.Fprintln(file, "hello world")