我有一个Amazont2.小型EC2 -1核心和2GB内存,这超过了CentOS和Virtualmin的最低要求
我的系统:
一个月前,经过多次访问,MySQL服务总是停止工作,我可以从Webmin重新启动它,直到我在DigitalOcean博客中阅读了一篇文章,将Restart=Always添加到文件/etc/systemd/system/multi-user.target.wants/mariadb.service中,然后通过终止该进程来测试它,然后该服务再次自动启动-- 22天内停止运行
现在,服务再次停止工作,我打开了mariadb.service文件,我发现行Restart=Always仍然在那里,但是服务随机停止。
注意:我仍然可以从Webmin启动它--没有问题,但是所有的网站都因为DB连接而不可用。
我需要追踪这个问题,但我对这类问题没有经验。如何解决这个问题?
MySQL配置: my.conf
symbolic-links=0
innodb_file_per_table = 1
myisam_sort_buffer_size = 8M
read_rnd_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
sort_buffer_size = 512K
table_open_cache = 64
max_allowed_packet = 1M
key_buffer_size = 16M来自{var/log/messages}的一些行
Oct 22 16:49:49 ns1 kernel: Out of memory: Kill process 13092 (mysqld) score 97 or sacrifice child
Oct 22 16:49:49 ns1 kernel: Killed process 13092 (mysqld) total-vm:1065992kB, anon-rss:182972kB, file-rss:0kB, shmem-rss:0kB
Oct 22 16:49:49 ns1 kernel: [12822] 27 12822 28326 73 14 0 0 mysqld_safe
Oct 23 08:58:11 ns1 kernel: [12822] 27 12822 28326 74 14 0 0 mysqld_safe
Oct 23 08:58:11 ns1 kernel: [19703] 27 19703 266425 39874 150 0 0 mysqld
Oct 23 20:04:47 ns1 saslauthd[531]: do_auth : auth failure: [user=mysql] [service=smtp] [realm=] [mech=pam] [reason=PAM auth error]
Oct 23 22:21:25 ns1 kernel: [12822] 27 12822 28326 74 14 0 0 mysqld_safe
Oct 23 22:21:25 ns1 kernel: [19703] 27 19703 266425 48494 161 0 0 mysqld
Oct 23 22:21:25 ns1 kernel: Out of memory: Kill process 19703 (mysqld) score 103 or sacrifice child
Oct 23 22:21:25 ns1 kernel: Killed process 19703 (mysqld) total-vm:1065700kB, anon-rss:193976kB, file-rss:0kB, shmem-rss:0kB
Oct 23 22:21:25 ns1 kernel: [12822] 27 12822 28326 74 14 0 0 mysqld_safe
Oct 23 22:39:58 ns1 kernel: [12822] 27 12822 28326 76 14 0 0 mysqld_safe
Oct 23 22:39:58 ns1 kernel: [19246] 27 19246 266716 16891 98 0 0 mysqld
Oct 23 22:40:02 ns1 kernel: [12822] 27 12822 28326 76 14 0 0 mysqld_safe
Oct 23 22:40:02 ns1 kernel: [19246] 27 19246 266938 17064 98 0 0 mysqld
Oct 23 22:40:05 ns1 kernel: mysqld invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0
Oct 23 22:40:05 ns1 kernel: mysqld cpuset=/ mems_allowed=0
Oct 23 22:40:05 ns1 kernel: CPU: 0 PID: 19357 Comm: mysqld Kdump: loaded Not tainted 3.10.0-862.11.6.el7.x86_64 #1发布于 2018-11-06 02:37:18
最后,在经过12天的测试之后,我找到了解决方案,在经过数百个页面访问后,自动终止了MySQL启动。
解决方案:只需在make服务启动前添加几秒钟--在我的例子中,我增加了45秒
在{/etc/systemd/system/multi-user.target.wants/mariadb.service}中的服务部分下添加以下行-当然路径取决于您的系统OS和MySQL服务名称(并不是所有的都有mariadb.service)
Restart=always
RestartSec=45s不要忘记运行以下命令
sudo systemctl daemon-reload
sudo systemctl restart mariadb.service发布于 2018-10-24 13:44:53
不知道。我首先要说的是那些普通的嫌疑犯
发布于 2018-10-24 15:20:09
在您的日志输出中的这一行:Oct 22 16:49:49 ns1 kernel: Out of memory: Kill process 13092 (mysqld) score 97 or sacrifice child
可以看出,您的系统内存不足,Linux (内存不足)杀手确实阻止了mysqld(MySQL守护进程)进程。
从Restart=部分的描述中可以看出,如果the service is stopped with systemctl stop or an equivalent operation的话,它不会重新启动,也许OOM杀手与systemd相当,我不知道。
通过添加禁用OOM杀灭来禁用此功能,您似乎可以为您的流程添加OOMScoreAdjust=-1000。
https://serverfault.com/questions/936938
复制相似问题