今天想在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
|
这个命令的作用是重新建立 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 且配置文件都在,恢复也不是特别麻烦。
😈 😈 😄😄