在写入安装目录中的文件时,docker容器不断增加内存使用量

当容器内的应用程序将日志写入安装目录中的文件时,容器使用的内存不断增加,这是一个问题。

我希望内存使用量不会因此而增加。 有没有人知道为什么增加? 谢谢 !!

这是我做的:

  1. 写一个只写“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") } } 
  2. build立一个docker形象


    dockerbuild设-t的Mylog。

Dockerfile


     FROM golang
    运行mkdir -p / home / mylog
     COPY main.go / go
     WORKDIR / go
     CMD [“go”,“run”,“main.go”]

  1. 使用-v选项运行一个容器,指定当前目录。

    docker运行-d -v $ PWD:/ home / mylog mylog 

  1. 检查内存使用情况

    docker统计 

  1. 它使用527MiB。
    容器CPU%MEMUSAGE / LIMIT MEM%NET I / O块I / O PIDS 
      100.41%527MiB / 15.5GiB 3.32%648B / 0B 72.3MB / 0B 15
  1. 几秒钟后,它是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

  1. 它不断增加和主机的下降。

随时打电话给你。

 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")