好不容易吧博客重新弄好,又出现了一个问题,在访问较高的时候,老崩溃,导致我博客老是提示数据库无法连接,之前在其他的服务器上也遇到过,我还以为是那一台电脑的原因,现在我的vps也发生了(貌似就mariadb出现这问题,mysql没有出现过)
崩溃时候的日志:
171227 19:26:03 mysqld_safe Number of processes running now: 0
171227 19:26:03 mysqld_safe mysqld restarted
171227 19:26:04 [Note] /usr/libexec/mysqld (mysqld 5.5.56-MariaDB) starting as process 12656 ...
171227 19:26:05 InnoDB: The InnoDB memory heap is disabled
171227 19:26:05 InnoDB: Mutexes and rw_locks use GCC atomic builtins
171227 19:26:05 InnoDB: Compressed tables use zlib 1.2.7
171227 19:26:05 InnoDB: Using Linux native AIO
171227 19:26:05 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137756672 bytes) failed; errno 12
171227 19:26:05 InnoDB: Completed initialization of buffer pool
171227 19:26:05 InnoDB: Fatal error: cannot allocate memory for the buffer pool
//致命错误
171227 19:26:05 [ERROR] Plugin 'InnoDB' init function returned error.
171227 19:26:05 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
171227 19:26:05 [ERROR] mysqld: Out of memory (Needed 128917504 bytes)
171227 19:26:05 [ERROR] mysqld: Out of memory (Needed 96681984 bytes)
171227 19:26:05 [ERROR] mysqld: Out of memory (Needed 72499200 bytes)
171227 19:26:05 [ERROR] Plugin 'Aria' init function returned error.
171227 19:26:05 [ERROR] Plugin 'Aria' registration as a STORAGE ENGINE failed.
171227 19:26:05 [Note] Plugin 'FEEDBACK' is disabled.
171227 19:26:05 [ERROR] Unknown/unsupported storage engine: InnoDB
171227 19:26:05 [ERROR] Aborting
171227 19:26:05 [Note] /usr/libexec/mysqld: Shutdown complete
看起来像是说内存不够(原因是内存不够,根本原因是穷)
google来看,有两种解决方案
一种的减小数据库的缓存大小(推荐)
找到/etc/my.cnf修改或者添加以下项
innodb_buffer_pool_size=64M #默认貌似是128M
innodb_buffer_pool_size 参数用来设置 Innodb 最主要的 Buffer(Innodb_Buffer_Pool)的大小,也 就是缓存用户表及索引数据的最主要缓存空间,对 Innodb 整体性能影响也最大。
这个已经在原来的VPS上实验过了,确实是可行的,弊端应该就是减慢数据库的查询速度吧
另外一个是增大系统的内存大小(swap分区,像虚拟内存的东西吧)
输入free -m,发现swap大小只有可怜的259M(为什么是259?我觉得256更好看一点,可能是计算方式的问题吧)
swap分区的作用为在系统的物理内存(Mem)不够用的时候,把物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。
#创建一个大小为1024MB的swap分区
dd if=/dev/zero of=/swapfile bs=1024 count=1048576
#配置swap文件
mkswap /swapfile
#立即启动
swapon /swapfile
#free -m 查看发现已经就扩大到1238MB了
#修改/etc/fstab,添加一行,使之重启生效
/swapfile swap swap defaults 0 0
如果有什么错误,还请指正
-----------------2018年3月8日更新-----------------
上面两种方法,时间一长还是崩溃,于是直接监控进程,一旦结束就自动重启复活
#编辑mariadb服务文件
sudo vi /etc/systemd/system/multi-user.target.wants/mariadb.service
#在Service节中增加Restart=always
#重载所有修改过的配置文件
systemctl daemon-reload
文章评论