You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu虚拟机重复运行h2o.automl触发getaddrinfo CURL连接错误求助

报错原因排查与修复方案

关于是否为VirtualBox拦截的验证

该问题有小概率由VirtualBox的网络限制触发,可通过以下步骤排除:

  • 报错发生时,直接在虚拟机终端执行 curl http://localhost:54321,如果也返回相同的getaddrinfo()相关错误,说明问题出在虚拟机内部的系统资源限制,和VirtualBox拦截无关;如果只有R调用H2O时报错、直接访问端口正常,再排查VirtualBox配置。
  • 检查VirtualBox的虚拟机网卡设置:如果H2O绑定的是非localhost的公网/宿主机网段IP,查看是否开启了端口拦截、流量限制类的增强功能,临时关闭后测试是否还能复现报错。

高概率根因及修复方案

你遇到的getaddrinfo() thread failed to start报错本质是H2O运行过程中耗尽了虚拟机进程可申请的系统资源(线程数、文件句柄数),和内存占用无关,是Ubuntu 20.04默认资源限制偏低导致的常见问题,可按以下步骤修复:

1. 调高系统资源限制

Ubuntu默认的单进程最大文件打开数、最大线程数配置仅为1024,H2O多次运行AutoML后会占满资源,无法启动新的域名解析线程:

  • 编辑/etc/security/limits.conf,末尾添加以下配置:
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
  • 分别编辑/etc/systemd/user.conf和/etc/systemd/system.conf,修改或添加以下两行:
DefaultLimitNOFILE=65535
DefaultLimitNPROC=65535
  • 重启虚拟机后执行 ulimit -n 和 ulimit -u,确认返回值为65535即生效。

2. 调整H2O调用配置

  • 启动H2O时指定绑定IP为127.0.0.1,跳过localhost的域名解析步骤:
h2o.init(ip = "127.0.0.1", port = 54321)
  • 每次执行完h2o.automl后,除了已有h2o.removeAll()和gc(),额外添加一行清空H2O内部缓存连接的语句:
h2o.api("GET /3/NodePersistentCache/clear")

3. 修复libcurl版本兼容问题

Ubuntu 20.04自带的libcurl版本存在并发请求下的线程泄漏bug,会加剧资源消耗,可升级修复:

  • 执行系统命令升级libcurl:
sudo apt update && sudo apt install -y libcurl4 libcurl4-openssl-dev
  • 重启R后重新编译安装curl包:
install.packages("curl", type = "source")

效果验证

调整完成后连续运行20次以上h2o.automl,如果不再触发报错说明问题解决。如果仍有异常,可查看h2o.init()输出的临时日志目录中的JVM运行日志,进一步定位具体崩溃原因。

内容的提问来源于stack exchange,提问作者jjhold

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 12:57:00