douqu2481 2017-12-18 09:39
浏览 973
已采纳

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

I'm facing an issue that memory used by a container keep increasing when an app inside the container writing log into a file in a mounted directory.

I'd expect memory usage doesn't increase by this. Does anyone have idea why it increases ? Thank you !!

Here is what I did:

  1. Write an app which just writes "hello world" into "/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 a docker image


    docker build -t mylog .

Dockerfile


    FROM golang
    RUN mkdir -p /home/mylog
    COPY main.go /go
    WORKDIR /go
    CMD ["go","run","main.go"]

  1. Run a container with -v option mouting the current dir.

    docker run -d -v $PWD:/home/mylog mylog 

  1. Check memory usage

    docker stats 

  1. It's using 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
  1. After a few seconds, it is 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

  1. It keeps increasing and the host downs in the end.
  • 写回答

1条回答 默认 最新

  • dstm2014 2017-12-18 10:17
    关注

    Call this from time to time.

    file.Sync() 
    

    https://golang.org/pkg/os/#File.Sync

    If you do not call this it writes to memory and waits for file.Close() in order to commit the changes to the file. And in this case Close in not called because it is in a defer (this means it is called when the function returns, and here it will never return since it is a never-ending for).

    LE: Also try using:

    file.WriteString("hello world")
    

    instead of

    fmt.Fprintln(file, "hello world")
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记