跳到主要内容

故障排查

症状、成因、修复

症状成因修复
SSH 报 Connection refused你用了端口 22,或者实例还没到 running连接标签页复制命令;等到 running 标记出现
你启动的服务报 Connection refused该端口在启动时从未被发布通过 SSH 转发,或者在模板上声明它并重新部署
Permission denied (publickey)部署时没有附加密钥,或者你的客户端提供了另一把密钥附加密钥后重新部署;或者用 -iIdentitiesOnly=yes 指向正确的密钥
REMOTE HOST IDENTIFICATION HAS CHANGED一对被回收的主机和端口现在属于一个新实例ssh-keygen -R "[host]:port",然后重新连接
实例一直停在 creating一个很大的镜像还在拉取盯着日志标签页;如果它落到 error,就销毁并重新部署
实例处于 error工作负载启动失败读日志,销毁它,重新部署——它既不能启动也不能停止
JupyterLab 返回 403 Forbidden请求没有带令牌,或者带的是过期的令牌回到控制台,重新用打开 JupyterLab
浏览器警告证书不受信任JupyterLab 用自签名证书提供 HTTPS 服务属于预期情况;忽略警告继续
No space left on device你在部署时选的磁盘满了清出空间,或者用更大的磁盘重新部署——磁盘无法调整容量
实例自己停了组织的余额降到了 $0充值余额,然后重新启动它
实例整个消失了余额降到 −$5,实例被销毁了磁盘已经没了;充值余额并重新部署
API 返回 409 INVALID_STATE实例正处于状态转换中等过渡状态完成后重试
部署或启动时返回 402 INSUFFICIENT_BALANCE组织没有余额由 admin 充值余额;member 不能

Connection refused

同一条消息背后是两个不同的问题。

如果是 SSH 本身,那你几乎肯定用错了端口。实例的 sshd 发布在启动时分配的某个主机端口上,绝不会是 22,而且这个号码在停止再启动之后可能改变。从连接标签页重新复制一遍命令。

如果是你在实例里启动的服务,那就是端口没有被发布。端口在实例启动时就固定了,所以之后再起服务器不会暴露任何东西。通过你已经建立的 SSH 会话把它转发出来:

ssh -N -L 8000:localhost:8000 -p 40123 root@sh-us-tx-01.ssh.superheat.dev

同时确认进程绑定的是 0.0.0.0 而不是 127.0.0.1。参见端口与打开按钮

Permission denied (publickey)

密码认证已被禁用,所以这总是意味着你的客户端提供的密钥不是 authorized_keys 里的那一把。

ssh -i ~/.ssh/id_ed25519 -o IdentitiesOnly=yes -p 40123 root@sh-us-tx-01.ssh.superheat.dev

如果还是失败,最可能的情况是这个实例根本没有密钥——部署页面上的 SSH 密钥选择器留在了不使用密钥。没有办法给运行中的实例附加密钥。在 SSH 密钥中添加密钥,然后重新部署。参见添加密钥

卡在 creating

creating 通常远不到一分钟就能完成。拉长它的是镜像拉取:一个几 GB 的镜像落到从未见过它的主机上,该花多久就花多久。日志标签页会显示拉取那一行,然后是 image ready, creating container

如果工作负载始终起不来,实例会自己转到 error。它不会永远停在 creating

处于 error 的实例

error 意味着容器启动失败。原因只存在于日志里,所以在清理之前先把日志读了:

  • 镜像或标签不存在,或者私有镜像的仓库凭据不对。
  • 模板固定使用的镜像与启动模式不匹配。sshjupyter 模式需要基于 Superheat 基础镜像构建的镜像。
  • 工作负载在平台的启动时间窗口内始终没有就绪。

onstart 执行失败不在这些成因之列。基础镜像会在子 shell 里运行它,把失败写到 /var/log/superheat/onstart.log,并让容器继续运行,这样你可以连上去修。

处于 error 时唯一可用的操作是销毁。修好模板,然后重新部署。参见查看日志

JupyterLab 返回 403

notebook 服务器只接受一种凭据,就是平台在部署时生成的令牌。返回 403 意味着浏览器发过去的令牌不对,或者根本没发,而这通常说明这个标签页是从书签或复制来的地址打开的,而不是从控制台打开的。

回到控制台里的那个实例,按打开 JupyterLab。这个按钮会带上平台为该实例生成的令牌;手工拼出来的地址不会。参见打开 JupyterLab

磁盘空间用尽

df -h /
du -sh /workspace/* | sort -h | tail

常见的元凶是堆积的检查点和包缓存:

rm -rf ~/.cache/pip ~/.cache/huggingface

磁盘无法扩容。如果任务确实需要更多空间,把现有的数据从实例上拷贝出来,销毁它,再用更大的 disk_gb 重新部署。参见磁盘与存储

实例自己停止了

当组织的余额降到 $0 时,运行中的实例会被自动停止。什么都不会丢——磁盘保留下来,一旦有了余额实例就能重新启动。但实例停着的这段时间存储费仍然从已经空了的余额里扣,所以余额会继续往下掉。

如果余额降到 −$5,实例会被销毁,磁盘也一并消失。在计费页面查看余额和流水,并参见自动停止与自动销毁

在第二道阈值之前充值

在 $0 和 −$5 之间,你的数据还在。越过 −$5 就没了,而且无法恢复。

相关内容