一、问题背景
在未对某容器内存占用限制的情况下,该容器内存经常会跑满,致使服务器卡死,无法正常连接,需要限制制定容器的资源占用情况。
二、查看容器资源占用情况
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 5eb9b08ebe30
Error 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