Amazon Linux2 EC2执行conda env create卡在repodata.json怎么办
Conda创建环境卡在
Collecting package metadata (repodata.json)排查方案(Amazon Linux 2 EC2场景) 以下是按触发概率从高到低排序的排查点和对应解法:
- 网络连通性问题
这是EC2场景下最高发的原因,先执行curl -I https://repo.anaconda.com/pkgs/main/linux-64/repodata.json测试连通性:- 如果请求超时、返回4xx/5xx错误,先检查实例出站规则:私有子网实例确认是否绑定了可用的NAT网关/公网IP,安全组、网络ACL是否放行了443端口出站流量,Amazon Linux 2默认SELinux策略如果拦截了请求,可临时执行
setenforce 0测试,确认后再添加对应放行规则。 - 如果连通正常但速度极慢,直接替换为速度更快的镜像源,删除默认的官方源配置,替换完成后执行
conda clean -i清空旧的索引缓存。
- 如果请求超时、返回4xx/5xx错误,先检查实例出站规则:私有子网实例确认是否绑定了可用的NAT网关/公网IP,安全组、网络ACL是否放行了443端口出站流量,Amazon Linux 2默认SELinux策略如果拦截了请求,可临时执行
- Conda版本过旧或求解器效率低
2022年之前发布的Miniconda/Anaconda3版本自带的默认元数据拉取、依赖求解逻辑存在已知bug,很容易在拉取大体积repodata时无响应:- 优先更新base环境的conda到最新版,执行
conda update -n base conda -y,如果更新流程也卡住,直接下载最新版Miniconda安装包重装,比修复老版本效率更高。 - 安装libmamba求解器替代默认求解器,元数据拉取和依赖求解速度可以提升数倍,配置命令如下:
conda install -n base conda-libmamba-solver -y conda config --set solver libmamba - 优先更新base环境的conda到最新版,执行
- 本地缓存损坏或锁文件残留
之前conda进程异常退出会残留锁文件、损坏的repodata缓存,导致进程一直卡在缓存校验步骤:
执行以下命令全量清理缓存和残留锁文件:
清理完成后重新执行环境创建命令即可。conda clean -a -y rm -rf ~/.conda/pkgs/*.lock ~/.conda/pkgs/cache/* - 实例资源不足
t2.micro等1G内存规格的免费档实例,在解析全量repodata时很容易因为内存不足触发OOM,进程被系统挂起但不会直接退出,表现为长时间无响应:- 执行
free -h查看实例剩余内存,如果可用内存低于1G,可以先添加2G swap空间临时缓解:
sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile- 执行
iostat 1查看磁盘IO使用率,如果IO使用率持续100%,说明gp2卷的IOPS被打满,要么等待卷积分恢复,要么升级为gp3类型卷提升IO性能。
- 执行
- 多源配置导致元数据拉取量过大
如果environment.yml里同时配置了defaults、conda-forge以及多个第三方源,且没有开启严格源优先级,conda会拉取所有源的全量repodata做交叉校验,总数据量可达数GB,低配置实例上会耗时极久。执行conda config --set channel_priority strict开启严格源优先级,减少不必要的元数据拉取。
内容的提问来源于stack exchange,提问作者SAI VINIL
相关产品推荐
相关产品推荐

