gpt4 book ai didi

linux - docker容器在写入挂载目录中的文件时不断增加内存使用量

转载 作者:IT王子 更新时间:2023-10-29 01:26:21 25 4
gpt4 key购买 nike

当容器内的应用程序将日志写入挂载目录中的文件时,我遇到了容器使用的内存不断增加的问题。

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

这是我做的:

  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 镜像

    docker build -t mylog .

docker 文件

    FROM golang    RUN mkdir -p /home/mylog    COPY main.go /go    WORKDIR /go    CMD ["go","run","main.go"]
  1. 运行一个带有 -v 选项的容器,输出当前目录。
    docker run -d -v $PWD:/home/mylog mylog 
  1. 检查内存使用情况
    docker stats 
  1. 它正在使用 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. 几秒后是844.8MiB
    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. 一直在增加,最后宿主宕机。

最佳答案

不时调用它。

file.Sync() 

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

如果您不调用它,它会写入内存并等待 file.Close() 以提交对文件的更改。在这种情况下 Close in not called 因为它在 defer 中(这意味着它在函数返回时被调用,在这里它永远不会返回,因为它是 never -结束于)。

乐:也可以尝试使用:

file.WriteString("hello world")

代替

fmt.Fprintln(file, "hello world")

关于linux - docker容器在写入挂载目录中的文件时不断增加内存使用量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47865559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com