我有 AWS micro stance,612MB RAM。我正在运行 Apache、PHP、MySQL 和 Magento。但 mysql 有时会自行停止。我不知道为什么?我的 mysql 日志如下:
130815 6:55:58 [Note] Plugin 'FEDERATED' is disabled.
130815 6:55:58 InnoDB: The InnoDB memory heap is disabled
130815 6:55:58 InnoDB: Mutexes and rw_locks use GCC atomic builtins
130815 6:55:58 InnoDB: Compressed tables use zlib 1.2.3.4
130815 6:55:58 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
130815 6:55:58 InnoDB: Completed initialization of buffer pool
130815 6:55:58 InnoDB: Fatal error: cannot allocate memory for the buffer pool
130815 6:55:58 [ERROR] Plugin 'InnoDB' init function returned error.
130815 6:55:58 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
130815 6:55:58 [ERROR] Unknown/unsupported storage engine: InnoDB
130815 6:55:58 [ERROR] Aborting
提前致谢
答案1
这个错误本质上表明内存不足异常,从您的描述中很容易理解原因。您在太少的内存中运行了太多东西。
我最好的猜测是,Apache 的流量会增加内存使用量(每个进程可以使用 50-100mb 或更多,具体取决于使用情况和连接限制),以至于 MySQL 无法分配足够的内存来进行正常运行,并且它会因上述消息而死亡。
现在只有 PHP、Apache 和 MySQL,我不知道 Magento 是什么,但它不太可能使这种已经很糟糕的情况变得更好。
我知道您使用 Micro 是因为它是免费的,但请认真考虑将 DB 服务与 Web 服务器分开使用。当流量突然增加或只是在一段时间内正常运行时,Apache 会使用大量内存。通常,Apache 会使用您允许的每个进程 100MB 内存,尽管 PHP 等程序当然会使用更多内存。
答案2
这个问题在 stackoverflow 上有答案。添加 swap 解决了崩溃问题。解决方案链接是https://stackoverflow.com/questions/10284532/amazon-ec2-mysql-aborting-start-because-innodb-mmap-x-bytes-failed-errno-12