在写入安装目录中的文件时,docker容器不断增加内存使用量
当容器内的应用程序将日志写入安装目录中的文件时,容器使用的内存不断增加,这是一个问题。
我希望内存使用量不会因此而增加。 有没有人知道为什么增加? 谢谢 !!
这是我做的:
-
写一个只写“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") } }
-
build立一个docker形象
dockerbuild设-t的Mylog。
Dockerfile
FROM golang 运行mkdir -p / home / mylog COPY main.go / go WORKDIR / go CMD [“go”,“run”,“main.go”]
- 使用-v选项运行一个容器,指定当前目录。
docker运行-d -v $ PWD:/ home / mylog mylog
- 检查内存使用情况
docker统计
- 它使用527MiB。
容器CPU%MEMUSAGE / LIMIT MEM%NET I / O块I / O PIDS 100.41%527MiB / 15.5GiB 3.32%648B / 0B 72.3MB / 0B 15
- 几秒钟后,它是844.8 MiB
容器CPU%MEMUSAGE / LIMIT MEM%NET I / O块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")