我只是无法解决这个问题。
我正在使用 Linode 1G RAM 基本计划。试图通过 Composer 安装一个包,它不让我。我的内存限制在 PHP.ini 上设置为“-1”
我还能做些什么来安装它吗?
Loading composer repositories with package information
Updating dependencies (including require-dev)
- Installing thujohn/rss (dev-master df80a7d)
Downloading: 100%
PHP Fatal error: Uncaught exception 'ErrorException' with message 'proc_open(): fork failed - Cannot allocate memory' in phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php:975
Stack trace:
#0 [internal function]: Composer\Util\ErrorHandler::handle(2, 'proc_open(): fo...', 'phar:///usr/loc...', 975, Array)
#1 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(975): proc_open('stty -a | grep ...', Array, NULL, NULL, NULL, Array)
#2 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(853): Symfony\Component\Console\Application->getSttyColumns()
#3 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(818): Symfony\Component\Console\Application->getTerminalDimensions()
#4 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(752): Symfony\Component\Console\Application->getTerminalWidth()
#5 phar:///usr/local/bin/com in phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php on line 975
Fatal error: Uncaught exception 'ErrorException' with message 'proc_open(): fork failed - Cannot allocate memory' in phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php:975
Stack trace:
#0 [internal function]: Composer\Util\ErrorHandler::handle(2, 'proc_open(): fo...', 'phar:///usr/loc...', 975, Array)
#1 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(975): proc_open('stty -a | grep ...', Array, NULL, NULL, NULL, Array)
#2 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(853): Symfony\Component\Console\Application->getSttyColumns()
#3 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(818): Symfony\Component\Console\Application->getTerminalDimensions()
#4 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(752): Symfony\Component\Console\Application->getTerminalWidth()
#5 phar:///usr/local/bin/com in phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php on line 975
看起来你的交换内存用完了,试试这个
/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
/sbin/mkswap /var/swap.1
/sbin/swapon /var/swap.1
正如@BlackBurn027 在下面的评论中提到的,此解决方案在 here 中进行了描述
正如作曲家故障排除指南here,这可能是因为 VPS 内存不足且未启用交换空间。
free -m
要启用交换,您可以使用例如:
sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
sudo /sbin/mkswap /var/swap.1
sudo /sbin/swapon /var/swap.1
或者如果上述方法不起作用,那么您可以尝试创建一个交换文件
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
php -dmemory_limit
增加内存,那么如果您的机器没有足够的内存,您仍然会用完内存,除了启用交换之外没有其他办法。
有点旧,但以防万一新人正在寻找解决方案,更新您的 PHP 版本可以解决问题。
此外,您应该提交您的 composer.lock 文件并在资源密集型较少的生产环境中安装 composer。
更多详细信息:https://github.com/composer/composer/issues/1898#issuecomment-23453850
我遇到了同样的问题。我在一个内存较少的 AWS 免费微实例上。我总是尝试以下选项之一,它总是有效(在所有这些之前,请检查您是否安装了最新版本的作曲家)
sudo php -dmemory_limit=750M composer.phar update
或删除供应商文件夹的内容并尝试作曲家更新。
sudo rm -rf vendor
sudo php -dmemory_limit=750M composer.phar update --no-scripts --prefer-dist
sudo php artisan --dump-autoload
第二个选项尝试更新所有组件,如果没有更新,它会从缓存中获取包,否则从 dist 中获取
注意:请根据您的选择更改内存限制。
或者
创建一个交换分区并尝试。交换分区是 linux 在物理内存用完时用作虚拟内存的硬盘部分。它类似于 windows 交换文件,只是不使用实际文件,linux 使用硬盘上的分区代替。
希望这可以帮助
sudo php -dmemory_limit=750M composer.phar update
时出现此错误 Could not open input file: composer.phar
请帮助
很简单,输入以下命令:
rm -rf vendor/
rm -rf composer.lock
php composer install --prefer-dist
应该适用于低内存机器
以下是解决问题的步骤:(使用即时快速 SWAP 文件分配方法)
服务器 SWAP 设置(Ubuntu 16.04 SWAP 修复内存不足错误)
检查您是否已经有交换,内存和磁盘大小:
sudo swapon -s
free -m
df -h
制作交换文件:(如果你想要 4GB SWAP 内存,请将 1G 更改为 4G)
sudo fallocate -l 1G /swapfile
检查交换文件:
ls -lh /swapfile
分配交换文件:
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
检查交换是否正常,内存和磁盘大小:
sudo swapon -s
free -m
df -h
在系统重新启动时附加交换文件:
sudo nano /etc/fstab
/swapfile none swap sw 0 0
调整交换文件设置:
cat /proc/sys/vm/swappiness
cat /proc/sys/vm/vfs_cache_pressure
sudo sysctl vm.swappiness=10
sudo sysctl vm.vfs_cache_pressure=50
sudo nano /etc/sysctl.conf
SWAP 文件优先级:(0-100% => 0:不进行交换,100:进行 SWAP 并释放 RAM)
vm.swappiness=10
从缓存中删除inode:(100:系统从缓存中删除inode信息过快)
vm.vfs_cache_pressure = 50
sudo nano /etc/sysctl.conf
中我必须做什么,所以,我跳过它然后重新启动 Nginx,然后执行 composer install
(之前我已经删除了供应商目录)并且它正在工作。谢谢!
我对 vagrant 也有同样的问题。我通过分配更多内存来修复它。
config.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id, "--memory", "1024"]
end
vb.memory = 1024
而不是 vb.customize ...
。
这是我发现每次都对我有用的解决方法:
df -h
dd if=/dev/zero of=/swapfile bs=1M count=1024
sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
mkswap /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo 'echo "/swapfile none swap defaults 0 0" >> /etc/fstab' | sudo sh
free -m
confirm u see your swap there:
total used free shared buffers cached
Mem: 494 335 158 0 19 62
-/+ buffers/cache: 254 240
Swap: 1023 3 1020
watch free -m
试试看:
/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
/sbin/mkswap /var/swap.1
/sbin/swapon /var/swap.1
我尝试删除 vendor 文件夹 和 composer.lock 文件,然后运行命令 composer clear-cache
,然后运行 composer install
。所以它工作没有任何错误。
您可以使用以下内容检查您的空闲(交换)内存
free -m
total used free shared buffers cached
Mem: 2048 357 1690 0 0 237
-/+ buffers/cache: 119 1928
Swap: 0 0 0
要启用交换,您可以使用例如:
/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
/sbin/mkswap /var/swap.1
/sbin/swapon /var/swap.1
free -m
并注意到我没有内存,甚至在交换中也没有......然后做了 sudo reboot
并且它起作用了
对于 1GB 和更小的服务器实例,这似乎是一个反复出现的问题。除了尝试关闭进程和调整交换设置之外,您还可以在本地计算机上安装并上传。
有时通过自我更新作曲家可以解决问题
php composer.phar self-update
干杯
composer self-update
的用例。
我将 PHP memory_limit
从默认的 128M 增加到 512M 并重新启动服务器。这解决了问题。
我大多数时候都会遇到这种情况,所以通常我习惯于按照设置交换内存的步骤进行操作。
但现在我发现了一个对我有用的简单替代技巧。
运行 composer update
以外的 composer update --no-dev
我在 Vagrant 中解决了同样的问题。我增加了 memory_limit 的值并删除了作曲家缓存: sudo rm -R ~/.composer 最后是 vagrant reload。
尝试这个:
/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
/sbin/mkswap /var/swap.1
/sbin/swapon /var/swap.1
在 Centos 6 上为我工作
进行交换并再次运行 composer 命令。我希望它对你有用。
$ dd if=/dev/zero of=/swapfile bs=1024 count=512k
$ mkswap /swapfile
$ swapon /swapfile
$ echo "/swapfile none swap sw 0 0 " >> /etc/fstab
$ echo 0 > /proc/sys/vm/swappiness
$ chown root:root /swapfile
$ chmod 0600 /swapfile
就我而言,我尝试了上面列出的所有内容。我使用 Laravel 和 Vagrant,4GB 内存和一个交换,内存限制设置为 -1。我删除了 vendor/ 并尝试了其他 PHP 版本。最后,我通过运行来管理它
vagrant halt
vagrant up
然后 composer install 再次像往常一样工作。
我的 512mb 主机上的 php composer.phar 更新有同样的问题。
用 php composer.phar install 解决
我在wsl2中使用composer时遇到了同样的问题。
Microsoft WSL 团队引入了一个名为 .wslconfig 的文件,用于调整 WSL2 设置。
您基本上必须在 %UserProfile%.wslconfig 创建该文件并设置以下设置。
[wsl2]
memory=6GB # Any size you feel like
swap=30GB
localhostForwarding=true
重新启动计算机,从现在开始,您不会再遇到高内存消耗的问题了。
希望它有帮助!
我在使用 DigitalOcean 托管的最便宜的服务器(512MB RAM)上遇到了类似的问题,我也在同一台服务器上运行 Jenkins CI。在我停止 Jenkins 实例之后,composer install 命令起作用了(好吧,在某种程度上,它失败了,除了已经安装之外还缺少 mcrypt 扩展!)。
也许如果您在服务器上运行另一个应用程序,也许值得尝试停止它并重新运行该命令。
编辑 php.ini 文件并增加 memory_limit 值。
memory_limit=1G
将解决这个问题。
composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
> mmap() 失败:[12] 无法分配内存
更新服务器上的内存并要求 '4G' 更改 4GB 内存 [尝试更改服务器类型或添加更多内存]
2 文件我们需要编辑
按命令
# cd /var/www/html
# nano .htaccess
并将 "memory_limit 756M”
编辑为 4G
php 7.0 上的 php ini
# cd ~
# php –-ini
# sudo nano /etc/php-7.0.ini
memory_limit = 128M 到 4G
#AWS #AMAZONLINUX #MAGENTO2 #PHP7.0
.htaccess
中的任何内容都不会影响 composer
,因为这不是通过网络服务器运行的
我将它用于 500MB RAM,它适用于我。
php -d memory_limit=-1 /usr/local/bin/composer install
这对我有用:
根据 composer 的文档,Composer 1 使用了更多的内存,升级到最新版本会给你带来更好更快的结果。
https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors
请禁用 js 捆绑并增加内存。那应该解决它。我通过禁用 js 捆绑来修复我的问题。
谢谢
不定期副业成功案例分享