关于Docker容器下查看资源占用情况以及对特定容器内存进行限制【测试成功】

艺帆风顺 发布于 2025-04-03 36 次阅读


一、问题背景

    在未对某容器内存占用限制的情况下,该容器内存经常会跑满,致使服务器卡死,无法正常连接,需要限制制定容器的资源占用情况。

二、查看容器资源占用情况

  1、  查看所有容器的资源占用情况【实时监控】:

    docker stats

2、查看容器的资源占用数据而不需要实时监控

    docker stats --no-stream

3、按照内存占用大小进行排序

docker stats --no-stream --format "table {{.Container}}t{{.Name}}t{{.MemUsage}}"

或者

docker stats --no-stream --format "table {{.Container}}t{{.Name}}t{{.MemUsage}}" | tail -n +2 | sort -k 3 -h -r

4、按照CPU占用大小进行排序

docker stats --no-stream | awk 'NR > 1' | sort -k 3 -n

三、优化正在运行的容器资源占用配置

1、停止需要调整的容器

    docker stop 5eb9b08ebe30

2、修改容器的内存限制

    docker update --memory 2g 5eb9b08ebe30

    [root@Aliyun YLMonitor]# docker update --memory 2g 5eb9b08ebe30Error response from daemon: Cannot update container 5eb9b08ebe30421f08f1cc31aa97adbe21d512aaa4963203c528fbaa225cba25: Memory limit should be smaller than already set memoryswap limit, update the memoryswap at the same time报错原因:因为容器的内存限制应该小于或等于已设置的内存交换(memoryswap)限制。Docker要求内存限制不超过内存交换限制,以确保容器在合理范围内使用内存。为了解决这个问题,需要同时更新内存和内存交换限制。

    3、加入指定虚拟内存参数

    docker update --memory 2g --memory-swap 2g 5eb9b08ebe30

    4、重启容器,观察生效情况

        docker start 5eb9b08ebe30