我遇到一个问题,当容器内的应用程序将日志写入已安装目录中的文件时,容器使用的内存会不断增加。
我希望内存使用量不会增加。有谁知道它为什么会增加?谢谢 !!
这是我做的:
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
不时打电话给这个。
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")