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