编译PHP fileinfo模块因内存不足失败记录
最近在一台服务器上为NextCloud编译PHP的fileinfo模块出错了。仔细检查了一下,发现错误的提示是:“virtual memory exhausted: Cannot allocate memory”(虚拟内存耗尽:无法分配内存),应该是因为内存不足无法编译中断了。
刚开始还搜索了一番。因为PHP的fileinfo模块编译的时候很耗内存,机器只有512M内存是不是可能不够用,考虑是否需要调整Swap分区。不过后来找到了一个简单有效的方法:暂时关闭大部分服务,腾出内存来进行编译。
机器用的是oneinstack整合包安装的LNMP环境,Nginx/PHP/MySQL/Redis等服务都在运行占用了一定内存,可以用这些命令暂时关闭这些服务:
service nginx stop # 关闭 Nginx/Tengine/OpenResty service mysqld stop # 关闭 MySQL/MariaDB/Percona service php-fpm stop # 关闭 PHP service httpd stop # 关闭 Apache service redis-server stop # 关闭 Redis 分布式缓存服务 service pureftpd stop # 关闭 Pure-Ftpd FTP服务
这些命令是给oneinstack环境用的,更多的服务控制命令可以在其官网https://oneinstack.com/install/找到,如果是lnmp一键包环境可以直接使用“lnmp stop”命令。
尽可能的关闭服务后,执行编译命令,这回编译成功了。完成编译后,再启动之前停止了的服务即可,或者直接用"reboot"命令重启服务器。
看来PHP的fileinfo模块编译的时候还真是很吃内存。512M内存的机器确实也能编译,就是有些吃力了。这也是为什么很多一件安装环境、VPS面板安装时都默认不开启fileinfo模块的原因。
https://xyuxf.com/archives/1503
欢迎关注 咸鱼先锋 (微信号公众号:xyuxf),获取干货推送
THE END
二维码
short
你这怎么直接把服务停了
Snow@short
暂时关停呀,腾出空闲的内存用来编译,之后再开启