BOSh
文章81
标签26
分类5

一言

文章归档

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
4
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 且配置文件都在,恢复也不是特别麻烦。

😈 😈 😄😄

本文作者:BOSh
本文链接:http://bosh.zz.ac/posts/1134321031.html
版权声明:本文由BoSh发布,部分内容来源于网络。