Arch Linux下使用Docker MySQL 占用过高内存

#系统环境

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
> neofetch --off
OS: Arch Linux x86_64
Host: HP Laptop 14s-cr0xxx
Kernel: 5.16.10-arch1-1
Shell: zsh 5.8.1
DE: Plasma 5.24.1
WM: KWin
CPU: Intel i5-8250U (4) @ 3.400GHz
Memory: 3268MiB / 23925MiB

> docker version
Client:
 Version:           20.10.12
 API version:       1.41
 Go version:        go1.17.5
 Git commit:        e91ed5707e
 Built:             Mon Dec 13 22:31:40 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server:
 Engine:
  Version:          20.10.12
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.17.5
  Git commit:       459d0dfbbb
  Built:            Mon Dec 13 22:30:43 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.6.0
  GitCommit:        39259a8f35919a0d02c9ecc2871ddd6ccf6a7c6e.m
 runc:
  Version:          1.1.0
  GitCommit:        v1.1.0-0-g067aaf85
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

#复现步骤

1
2
3
4
5
6
7
8
docker run -d --rm --name mysql5.7 -e MYSQL_ROOT_PASSWORD=passwd mysql:5.7
# 这里mysql版本为5.7.37

docker run -d --rm --name mysql -e MYSQL_ROOT_PASSWORD=passwd mysql
# 这里 mysql版本为 8.0.27

docker stats
# 实时CPU、内存占用显示

我的情况是:

版本 5 情况下,内存占用高低变化,从 1G 到 16G(总内存 23G),1 分钟后稳定在 16G;CPU 占用一开始在 100%,甚至超过,1 分钟后也稳定下来,不到 0.5%。 BLOCK I/O 一直是 0B / 292MB ,这可能是一个关键点。

版本 8 情况下,内存占用很稳定,382M;CPU 占用不超过 0.5%。 BLOCK I/O25.4MB / 258MB

I/O 表示输入与输出。

只出不入,容易壅塞。

一条相关 GitHub issue:https://github.com/docker-library/mysql/issues/579

之后的测试过程中得到一个短语:memory trap,相关 issue:https://github.com/docker-library/mysql/issues/361

Layout of comment panels