在写入已装入目录中的文件时,docker容器会增加内存使用量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在写入已装入目录中的文件时,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") } }
- 构建一个泊坞窗图像
docker build -t mylog .
Dockerfile
FROM golang RUN mkdir -p /home/mylog COPY main.go /go WORKDIR /go CMD ["go","run","main.go"]
- 使用-v选项运行一个容器,用于管理当前目录。
docker run -d -v $PWD:/home/mylog mylog
- 检查内存使用情况
docker stats
- 它使用的是527MiB。
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
- 几秒钟后,它是844.8 MiB
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")
以上是关于在写入已装入目录中的文件时,docker容器会增加内存使用量的主要内容,如果未能解决你的问题,请参考以下文章