为啥作曲家在 300 秒后安装超时?
Posted
技术标签:
【中文标题】为啥作曲家在 300 秒后安装超时?【英文标题】:Why composer install timeouts after 300 seconds?为什么作曲家在 300 秒后安装超时? 【发布时间】:2013-09-25 21:37:05 【问题描述】:我有一个在 symfony2 中制作的小项目,当我尝试在我的服务器上构建它时,解压缩 symfony 时总是失败。构建是好的,突然作曲家不会解压缩 symfony,我没有改变任何东西。我尝试使用 Jenkins 构建,也尝试从 bash 手动构建,结果相同。这不是权限问题,我的服务器上的互联网连接也正常。
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
- Installing symfony/symfony (v2.3.4)
Downloading: 100%
[Symfony\Component\Process\Exception\ProcessTimedOutException]
The process "unzip '/path/vendor/symfony/symfony/6116f6f3
d4125a757858954cb107e64b' -d 'vendor/composer/b2f33269' && chmod -R u+w 'vendor/composer/b2f33269'" exceeded the timeout of 300 seconds.
【问题讨论】:
【参考方案1】:尝试composer update/install -o -vvv
并检查包是否正在从作曲家的缓存中加载。
如果是,请尝试清除作曲家的缓存或尝试添加 -cache-dir=/dev/null
。
要强制下载存档而不是克隆源,请将--prefer-dist
选项与--no-dev
结合使用。
否则你可以尝试提高作曲家的进程超时值:
export COMPOSER_PROCESS_TIMEOUT=600 ( defaults to 300 )
【讨论】:
井包被写入缓存。请参阅 pastebin,它对于评论 pastebin.com/sb7deyNc 与更新命令相同的结果来说太大了。延长时间也无济于事,我认为它是 4 核机器,几乎无法正常工作。 使用php composer.php install --prefer-dist --no-dev
对我有用。
也适合我。有谁知道为什么?
后来我弄清楚为什么会发生这种情况,原因是 NFS 速度慢。我不知道为什么,因为它在本地网络上,但我切换到 sshfs 并且它可以正常工作。
一个常见的问题是 NFS 共享在涉及大量磁盘 i/o 时速度很慢......即缓存文件夹受此影响。您可以通过将缓存文件夹移动到 /dev/shm/
来解决此问题。对于作曲家,您可以使用--cache-dir=/dev/shm/composer/cache
。在 this article 中阅读有关它的更多信息,其中针对 symfony2 的性能技巧以及 vagrant nfs 共享。很高兴你解决了你的问题。您可能仍然会考虑接受我的回答,因为 11 票赞成 + cmets 明确表示它对其他人有帮助。【参考方案2】:
composer config --global process-timeout 2000
【讨论】:
如果你想在特定的 composer.json 中设置,或者不带 --global 【参考方案3】:最简单的方法是在 composer.json 文件中添加配置选项,添加 process-timeout 0,仅此而已。它适用于任何地方。
.....
"scripts":
"start": "php -S 0.0.0.0:8080 -t public public/index.php"
,
"config":
"process-timeout":0
【讨论】:
从 composer 1.9 开始,您还可以基于每个脚本禁用进程超时。例如。"start": ["Composer\\Config::disableProcessTimeout","php -S 0.0.0.0:8080 -t public public/index.php"],
这是@Ali Motameni 的答案为您所做的,以及答案下方的评论所做的(@morris4)。它们实际上都为您更改了相应的 composer.json 文件,更改了此配置值。一个在您的全局 composer.json 文件中更改它,另一个来自注释的更改它在当前项目的 composer.json 文件中。【参考方案4】:
Composer 本身对允许远程 git 操作的时间有一个限制。查看Composer documentation 确认环境变量 COMPOSER_PROCESS_TIMEOUT 控制着这一点。该变量设置为默认值 300(秒),这对于使用慢速 Internet 连接的大型克隆操作显然是不够的。
使用以下方法提高该值:
COMPOSER_PROCESS_TIMEOUT=2000 composer install
【讨论】:
【参考方案5】:删除作曲家缓存对我有用。
rm -rf ~/.composer/cache/*
【讨论】:
【参考方案6】:默认情况下,Symfony 组件的进程超时设置为 60。这就是为什么你会得到这样的错误:
[Symfony\Component\Process\Exception\ProcessTimedOutException]
The process "composer update" exceeded the timeout of 60 seconds.
解决方案
将超时设置为 5 分钟或更长时间
$process = new Process("composer update");
$process->setTimeout(300); // 5 minutes
$process->run();
【讨论】:
问题中的 sn-p 表示exceeded the timeout of 300 seconds
。所以它要么需要高于 300,否则超时不是问题(根据@nifr 和 @wormhit 的回答,可能是缓存问题)。【参考方案7】:
这是一个旧线程,但我发现超时的原因是运行 php 调试器(PHPStorm 正在侦听 xdebug 连接)导致进程超时。当我关闭 PHPStorm 或禁用 xdebug 扩展时,没有发生超时。
【讨论】:
这确实是我超时的原因,VS Code 正在调试,我让它监听连接...【参考方案8】:旧线程但对我来说是新问题。尝试在 Windows 10 主机内的 Ubuntu VM 上安装 google/apiclient(在 google/apiclient-services 上失败)时,此处没有解决方案。
在执行此作曲家安装/更新时注意到 Windows 的“反恶意软件可执行文件”占用了相当多的 CPU 周期后,我在 Windows 10 机器上禁用了“实时保护”,我的作曲家更新/安装工作正常!!
希望对某人有所帮助。
【讨论】:
它帮助了我!我在通过 VirtualBox 在 Windows 10 上运行的 Ubuntu VM 上安装 google/apiclient 时遇到了完全相同的问题,这解决了问题。 即使在 Windows 11 上,这似乎也有助于解决这个问题。您可以随时重新启用该设置,或者让它自行重新开启。【参考方案9】:我同意上面的大部分建议,但我遇到了同样的问题,对我有用的是删除供应商文件夹并重新运行 composer install
问候
【讨论】:
【参考方案10】:这是 NFS 慢的问题。 Composer 将缓存写入 NFS 目录。您必须全局安装composer并重写缓存路径。
这不起作用:
php composer.phar install
使用这个:
composer install
在此运行之前,您必须全局配置作曲家。看到这个https://getcomposer.org/doc/00-intro.md#globally
此外,您必须将此行添加到您的 config.json:
"config":
"cache-dir": "/var/cache/composer"
为我工作。
【讨论】:
以上是关于为啥作曲家在 300 秒后安装超时?的主要内容,如果未能解决你的问题,请参考以下文章
等待所有设备上线 -> 等待设备时出错:等待模拟器上线 300 秒后超时