这段时间我们这边服务经常遇到一个诡异的问题。
服务在容器中正常运行了 2-3 周,期间没有人管过。某一天后端服务突然挂掉不再提供服务了。
排查性能相关,cpu ,磁盘,内存都是正常的,docker ps 也显示正常没有重启之类的情况。但是 docker logs 日志停止输出。必须手动 docker restart 才能恢复服务,文件描述符数量也正常,容器日志也不存在写满的情况。因为要优先恢复服务可用性,所以没办法再排查更加细致的内容,有没有大佬遇到过类似的问题?或者说有大佬能提供一下下次出现类似情况的排查思路吗?
docker 版本是 23.0.6
1
defunct9 9 小时 33 分钟前 开 ssh ,让我上去看看
|
2
finab 9 小时 33 分钟前 你 docker 运行的不是提供服务本身的那个进程吧?
|
5
log4j 9 小时 30 分钟前 有没有可能你服务的进程不是 0 号?这种情况它异常退出后 docker 是不知道
|
6
klo424 9 小时 28 分钟前 多半是自己程序的 bug ,异常终止了。docker logs 的输出内容是可以通过程序修改的,所以如果程序自己崩了,没有弹出异常,docker 容器也不知道发生了什么。检查一下程序有没有 bug 吧。
|
9
kd9yYw2RyhQwAwzn 9 小时 0 分钟前
可以写 health check 做健康检查
|
10
taohua1c 8 小时 58 分钟前
写个定时任务,每晚重启下 docker 服务,先跑着
|
11
c4923 OP @kd9yYw2RyhQwAwzn 目前想到的解决方案是健康检查,但是我希望还是能找到具体原因。主要这么奇怪的情况我也是第一次遇到。
|
13
johnbobby 8 小时 53 分钟前
dockerfile 有问题吧,就像楼上说的不是 0 号进程
|
14
Daybyedream 8 小时 52 分钟前
进容器看业务到底咋回事呀
|
15
deplives 8 小时 47 分钟前
盲猜 dockerfile 有问题,容器内启动的进程不是 0 导致即使服务挂了 docker 也认为没有问题一切正常
|
16
xzysaber 8 小时 41 分钟前
这就是为什么 Docker 推荐一个容器一个进程,即使多个进程也要有成熟的进程管理工具。
|
17
newaccount 8 小时 37 分钟前
你有请求日志吧?把那些重放一遍看能重现出来不,不然等 2-3 周实在没法弄
|
18
TeeMoCode 8 小时 35 分钟前
脚本中启动服务的命令是用的 exec 么?
|
19
laminux29 8 小时 31 分钟前
如果把容器实例当成物理宿主机,虽然里面的服务进程挂起,但物理宿主机是仍然在运行的,因此你用 docker ps 显示容器实例正在运行,是正常现象。至于 docker log 无输出,是因为 docker log 可能绑定到服务进程的 log 输出,由于服务进程挂起,无 log 输出,所以你用 docker log 也无输出了。
|
20
zhangyunlu80 8 小时 28 分钟前
这个意思不就是服务 hang 住了么
|
23
c4923 OP @newaccount 试过了, 确实复现不了😭
|
24
fds 7 小时 44 分钟前 保留现场,根据是什么语言,用相应工具提取一下 stack 看看卡在哪里了。
软件 bug 很常见的,特别是有些异常输入之类的。大概率不是 docker 的问题。 你要保证可用性,建议前面加个负载均衡之类的服务,这样一个停了,可以直接启动另外一个,然后分析前一个的状态。 |
25
hefish 6 小时 59 分钟前
多数是服务停了,但是启动服务的 shell 还活着。在等待控制台的输入。
|
26
MineDog 5 小时 9 分钟前
从来都是 pid=1 的进程吧,0 号进程是什么
|
27
TeeMoCode 3 小时 33 分钟前
@c4923 脚本里面用 exec 启动服务,pid=1 的就是你的服务进程。执行 docker ps 看状态是 up ,那说明 pid=1 还活着。 用 docker exec 进容器执行 ps -p 1 -o stat,rss,vsz,cmd,wchan 看进程状态如何呢
|
28
yinmin 1 小时 32 分钟前 via iPhone
大概率是服务程序的代码 bug ,或者程序引入模块的 bug 。有些服务架构是有外部调用多少次就重启一个新进程,可以规避长时间运行不稳定的情况。
|