无法跟踪 MySQL docker 容器的内存使用情况

无法跟踪 MySQL docker 容器的内存使用情况

我有一个 MySQL 实例码头工人容器管理者Hashicorp Nomad在 AWS EC2 上t4g.small 实例。我需要监控 MySQL 的内存使用情况,因为在启动 MySQL 守护进程大约两天后,我遇到了 OOM 终止,因此必须优化配置。

docker stats、、atophtop显示 MySQL 最初使用大约 400MiB 的 RAM,并且使用量正在缓慢增长。

按小时计算的内存使用情况图表

上图显示内存增加了约 150MiB。但是sys.memory_global_by_current_bytes内存全局总值似乎表明内存使用量始终是恒定的。无论何时,查询都显示如下。

mysql> SELECT SUBSTRING_INDEX(event_name,'/',2) AS
            code_area, FORMAT_BYTES(SUM(current_alloc))
            AS current_alloc
            FROM sys.x$memory_global_by_current_bytes
            GROUP BY SUBSTRING_INDEX(event_name,'/',2)
            ORDER BY SUM(current_alloc) DESC;
+---------------------------+---------------+
| code_area                 | current_alloc |
+---------------------------+---------------+
| memory/innodb             | 215.31 MiB    |
| memory/performance_schema | 159.17 MiB    |
| memory/sql                | 17.18 MiB     |
| memory/mysys              | 9.01 MiB      |
| memory/temptable          | 1.00 MiB      |
| memory/mysqld_openssl     | 160.50 KiB    |
| memory/mysqlx             | 2.89 KiB      |
| memory/myisam             |  696 bytes    |
| memory/csv                |   88 bytes    |
| memory/blackhole          |   88 bytes    |
| memory/vio                |   16 bytes    |
+---------------------------+---------------+

mysql> select * from sys.memory_global_total;
+-----------------+
| total_allocated |
+-----------------+
| 425.03 MiB      |
+-----------------+

我多次调整了 MySQL 配置,最新版本是:

[mysqld]
default_authentication_plugin=mysql_native_password
datadir=/srv/mysql
max_connections=20
temptable_max_ram=128M
temptable_max_mmap=128M

# You can see the live-updated configuration on remote: https://github.com/femiwiki/nomad/blob/main/mysql/my.cnf

但是配置不可见的内存使用情况太难了。如何监控内存使用情况以及防止 OOM kill 的最佳方法是什么?

此致。

版本

  • 操作系统 - Amazon Linux 2 LTS Arm64 AMI 2.0.20210427.0 arm64 最小 HVM ebs
  • MySQL - 适用于 aarch64 上的 Linux 的 8.0.24(MySQL 社区服务器 - GPL)
  • Docker - 20.10.4,内部版本 d3cb89e
  • 游牧民-1.0.4

相关内容