我有以下问题。
我有一个安装了LAMP的AWS EC2 t2.micro实例。
我的WebApp使用InnoDB表。如果有很多用户,InnoDB因缓冲池大小而过去崩溃。它说它不能分配内存。
170511 10:32:05 InnoDB:初始化缓冲池,大小= 128.0M
InnoDB:mmap(137363456字节)失败; errno 12
我已将 innodb_buffer_pool_size 添加到750M(如果我把它放得更多1GB - mysql根本没有启动)。我在LoadImpact下对我的WebApp进行了压力测试。从30人起,WebApp试图分配800M之类的内容并再次崩溃MySQL。
170511 12:16:04 InnoDB:初始化缓冲池,大小= 752.0M
InnoDB:mmap(807010304字节)失败; errno 12
另一个问题是我不能在mysql崩溃后运行 sudo service mysql start 或 restart 。它说工作未能开始。
答案 0 :(得分:0)
t2.micro实例只有512M RAM。如果你在同一个盒子上运行MySQL和Apache,你应该谨慎分配内存。
看起来apache进程占用了所有内存,因此MySQL获得的内存不到最低限度。
如果您还没有添加掉,我建议先添加交换。
dd if=/dev/zero of=/swapfile bs=1024 count=65536
chmod 0600 /swapfile
mkswap /swapfile
swapon /swapfile
并将其添加到/etc/fstab
。
/swapfile swap swap defaults 0 0
接下来,限制Apache工作人员以确保MySQL始终获得innodb_buffer_pool_size
。根据您使用的内容 - prefork或worker配置会有所不同,但您有了一个想法。