写在前面
由于测试环境JED申请比较繁琐,所以Eone提供了单机版Mysql供用户使用,近期Eone搭建Mysql5的时候发现莫名被kill了,容器规格是4C8G,磁盘30G
这不科学,之前都是可以的,镜像没变,配置没变,咋就不行了呢,一定不是我的问题,是机器的问题
问题排查
重现
通过多次搭建mysql5进行采样,发现并不是稳定复现,有一些容器是可以正常启动提供服务的,找到被mysql服务被kill的容器日志,发现是MySQL初始化被kill了,
/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/export/data/mysql/data --user=admin --initialize-insecure
mysql配置文件:
[client]
socket=/tmp/mysql.sock
[mysqld]
basedir=/usr/local/mysql
datadir=/export/data/mysql/data
port=3306
server_id=1
socket=/tmp/mysql.sock
log-error=/tmp/mysqld.err
pid-file=/tmp/mysqld.pid
skip-host-cache
skip-name-resolve
skip-grant-tables
问题排查
初始化为什么被kill?
手动执行了下初始化的命令,发现直接被kill了
通过dmesg
命令发现,貌似oom了
纳尼?怎么用了这么多内存?容器都没这么大内存诶
通过排查,发现MySQL有一个8G的匿名内存,这是哪来的???
将容器规格调整为32G内存,再次尝试,发现成功启动了,但是内存占用貌似不太正常
这不科学,正常的容器内存使用情况是这样的👇
MySQL配置不合理?
难道是因为mysql设置的大小不合理?默认不设置innodb_buffer_pool_size
按理说应该是128M
才对,抱着侥幸心理设置下试下
然而问题依旧,改了配置也没有效果,看来不是配置的问题
真是机器的问题?
对比了一下正常启动的机器,拿着ip找到运维,发现异常的机器是近期添加的云舰系统的机器,之前centos系统宿主机
是正常的,新加的云舰系统宿主机
都是异常的,看来真是机器的问题,这两台机器有啥差别呢,接下来运维同学开启了排查之路:
首先,看看两台宿主机是不是物理CPU总数不一样
再确认下CentOS是否开启了富容器功能
对比了下两台宿主机的资源配置,发现好像是资源配置的问题
正常的机器配置是这样的
或许真的有可能,修改下open files
限制再试下
ulimit -n 1048576
竟然可以了!!!MySQL正常提供服务了,真的是机器的问题
问题分析
strace log分析
28139 execve("/usr/local/mysql/bin/mysqld-debug", ["/usr/local/mysql/bin/mysqld-debu"..., "--initialize-insecure", "--basedir=/usr/local/mysql", "--datadir=/export/data/mysql/dat"..., "--user=admin"], 0x7ffe74bdcbe8 /* 294 vars */) = 0
28139 brk(NULL) = 0x4b50000
28139 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f93d3bf6000
28139 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
28139 open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
28139 fstat(3, {st_mode=S_IFREG|0644, st_size=16580, ...}) = 0
28139 mmap(NULL, 16580, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f93d3bf1000
28139 close(3) = 0
28139 open("/lib64/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
28139 read(3, "177ELF211 3 >