Featured image of post zz.ac遇到进程超限导致podman奔溃

zz.ac遇到进程超限导致podman奔溃

今天想在zz.ac主机上安装docker版本的vscode玩,结果在运行完安装命令后,运行podman ps 却出现了进程超限的错误,无法运行 podman

安装vscode

1
2
3
4
5
6
7
8
9
podman run -d --name code-server \
  -p 9080:9080 \
  -e BIND_ADDR=0.0.0.0:9080 \
  -e PASSWORD=xxxxxx \
  --network slirp4netns \
  --userns=keep-id \
  -v "$PWD/project:/home/coder/project:Z" \
  --restart always \
  docker.io/codercom/code-server:latest

运行podman或者podman ps都出现以下报错:

1
2
3
4
5
6
7
8
bosh@h1:~$ podman
runtime/cgo: pthread_create failed: Resource temporarily unavailable
SIGABRT: abort
PC=0xf8ee03627608 m=0 sigcode=18446744073709551610

goroutine 0 gp=0x2cca7c0 m=0 mp=0x2ccde40 [idle]:
runtime: g 0 gp=0x2cca7c0: unknown pc 0xf8ee03627608
……

经查询AI:

这个报错(pthread_create failed: Resource temporarily unavailable)意味着你的系统已经**“拒绝提供任何新线程”**了。

即使你执行简单的 podman ps,它也需要创建一个新线程来运行,但系统告诉它:“对不起,名额满了。”

为什么会出现?

这通常不是 Podman 的 Bug,而是环境限制(ulimit)或僵尸进程堆积导致的。

想起涛叔说每个用户限制99个进程,通过查询得知用户进程限制确实为:99

1
2
bosh@h1:~$ ulimit -u
99

目前我这台主机上运行的服务:哪吒探针,canddy和alist服务都正常。但是却不能通过podman进行管理。

这次解决办法:

  • 杀掉所有相关进程(这不会丢失容器数据):
1
2
3
pkill -u $(whoami) -9 podman
pkill -u $(whoami) -9 conmon
pkill -u $(whoami) -9 catatonit
  • 执行强制迁移重置:
1
podman system migrate

这个命令的作用是重新建立 Podman 的运行环境和挂载点,它绝对不会删除你的镜像和容器

运行 podman ps -a ,发现容器都在运行:

1
2
3
938c57648389  docker.io/codercom/code-server:latest                        32 minutes ago  Up 32 minutes  0.0.0.0:9080->9080/tcp, 8080/tcp    code-server
0572b476f3ad  docker.io/alist666/alist:latest        /entrypoint.sh        15 minutes ago  Up 15 minutes  0.0.0.0:5244->5244/tcp, 5245/tcp    alist
f5937c3affc1  docker.io/library/caddy:alpine         caddy run --confi...  15 minutes ago  Up 15 minutes  80/tcp, 443/tcp, 2019/tcp, 443/udp  my-caddy

查看自己的进程数目:

1
2
bosh@h1:~$ ps -u $(whoami) -L | wc -l
60

显示目前有60个进程,系统限制99个进程,为什么会产生这样的问题呢?

为什么 60/99 就会报错?

因为 Podman 或 Go 语言程序在启动瞬间会产生大量的突发线程,这个数值会瞬间飙升超过 99,然后立即回落。内核发现超过 99 后会直接拒绝 pthread_create 请求,于是你就看到了 Resource temporarily unavailable


彻底解决这个“天花板”问题

请按顺序执行以下命令,将这个限制从 99 提到无限(或一个很大的值):

好吧!看来这个主机也就这样玩玩了。

在这次之前也出现了一次进程饱满导致的podman奔溃,上次通过关闭所有进程,删除所有容器,重建容器好的,还好这个主机上就是个探针、caddy、alist 且配置文件都在,恢复也不是特别麻烦。

😈 😈 😄😄

热爱生活 学无止境
使用 Hugo 构建
主题 StackJimmy 设计