• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

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

linux 来源:kmat 10次浏览

当容器内的应用程序将日志写入安装目录中的文件时,容器使用的内存不断增加,因此我正面临一个问题。当写入安装目录中的文件时,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. 构建搬运工图像

 

    docker build -t mylog . 

Dockerfile

 

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

  • 运行带-v选项的容器mouting当前目录。
  •  
    
        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") 
    

    版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
    喜欢 (0)