likes
comments
collection
share

Mysql容器启动内存异常占用的问题

作者站长头像
站长
· 阅读数 21

问题回顾

使用docker-compose.yaml启动了mysql容器。

启动成功后,使用free -mh查看宿主机内存占用情况,并用docket stats 查看容器情况,mysql竟然占用了16个G

docker-compose.yaml

version: '3.9'
services:
  mysql:
    image: mysql:5.7.29
    restart: on-failure
    container_name: mysql
    environment:
      - TZ=Asia/Shanghai
      - MYSQL_ROOT_PASSWORD=123456
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ${PWD}/config/my.cnf:/etc/mysql/my.cnf
      - ${PWD}/data:/var/lib/mysql
      - ${PWD}/logs:/usr/local/mysql/log
    ports:
      - 3306:3306

my.cnf 配置

[mysqld]
lower_case_table_names=1
port=3306

docker stats Mysql占用了16G

Mysql容器启动内存异常占用的问题

问题排查

进入到容器内部

docker exec -it mysql

使用top命令,提示命令不存在,那么执行下面命令,安装top命令

apt install procps

执行top,并按m键,发现只有mysqld这个进程占用内存。

Mysql容器启动内存异常占用的问题

这就很奇怪了。

在google下发现了这篇文章。

docker启动mysql时内存占用过多

原因分析:

文章指出 这个问题的直接原因是文件描述符上限太大了;

原文截图

Mysql容器启动内存异常占用的问题 于是我修改下docker-compose启动脚本

version: '3.9'
services:
  mysql:
    image: mysql:5.7.29
    restart: on-failure
    container_name: mysql
    environment:
      - TZ=Asia/Shanghai
      - MYSQL_ROOT_PASSWORD=123456
    ulimits:
      nproc: 65535
      nofile:
        soft: 26677
        hard: 46677
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ${PWD}/config/my.cnf:/etc/mysql/my.cnf
      - ${PWD}/data:/var/lib/mysql
      - ${PWD}/logs:/usr/local/mysql/log
    ports:
      - 3306:3306

重新run了容器,发现内存下来了。

root@betterme:/data/soft/mysql# free -mh
               total        used        free      shared  buff/cache   available
Mem:            27Gi       2.3Gi        19Gi       7.8Mi       5.2Gi        24Gi
Swap:          8.0Gi          0B       8.0Gi
转载自:https://juejin.cn/post/7381476230775849014
评论
请登录