我正在 Kubernetes 中使用容器化的 Spring boot 应用程序。但应用程序会自动退出并重新启动,并显示退出代码 143 和错误消息“Error”。
我不确定如何确定此错误的原因。
我的第一个想法是 Kubernetes 由于资源使用率过高而停止了容器,如here所述,但我看不到相应的 kubelet 日志。
有什么方法可以确定
SIGTERM
的原因/起源吗?也许来自 spring-boot 本身,或者来自 JVM?
退出代码 143
表示进程被
external signal
终止。
数字 143 是两个数字的和:128+x,
# where x is the signal number sent to the process that caused it to terminate.
示例中,x等于15,即
SIGTERM
信号的编号,表示进程被强行杀死。
希望这能更好地帮助您。
我刚刚遇到了同样的问题。我能够通过查看 Kubernetes 节点上的日志来追踪
Exit Code 143
的来源(注意,是 node 上的日志,而不是 Pod)。 (我使用Lens作为获取节点外壳的简单方法,但还有其他方法)
然后,如果您查看
/var/log/messages
(我发现在某些设置中可能是 /var/log/syslog
)中的 terminated
,您会看到类似这样的内容:
Feb 2 11:52:27 np-26992252-3 kubelet[23125]: I0202 11:52:27.541751 23125 kubelet.go:2214] "SyncLoop (probe)" probe="liveness" status="unhealthy" pod="default/app-compute-deployment-56ccffd87f-8s78v"
Feb 2 11:52:27 np-26992252-3 kubelet[23125]: I0202 11:52:27.541920 23125 kubelet.go:2214] "SyncLoop (probe)" probe="readiness" status="" pod="default/app-compute-deployment-56ccffd87f-8s78v"
Feb 2 11:52:27 np-26992252-3 kubelet[23125]: I0202 11:52:27.543274 23125 kuberuntime_manager.go:707] "Message for Container of pod" containerName="app" containerStatusID={Type:containerd ID:c3426d6b07fe3bd60bcbe675bab73b6b4b3619ef4639e1c23bca82692633765e} pod="default/app-comp
ute-deployment-56ccffd87f-8s78v" containerMessage="Container app failed liveness probe, will be restarted"
Feb 2 11:52:27 np-26992252-3 kubelet[23125]: I0202 11:52:27.543374 23125 kuberuntime_container.go:723] "Killing container with a grace period" pod="default/app-compute-deployment-56ccffd87f-8s78v" podUID=89fdc1a2-3a3b-4d57-8a4d-ab115e52dc85 containerName="app" containerID="con
tainerd://c3426d6b07fe3bd60bcbe675bab73b6b4b3619ef4639e1c23bca82692633765e" gracePeriod=30
Feb 2 11:52:27 np-26992252-3 containerd[22741]: time="2023-02-02T11:52:27.543834687Z" level=info msg="StopContainer for \"c3426d6b07fe3bd60bcbe675bab73b6b4b3619ef4639e1c23bca82692633765e\" with timeout 30 (s)"
Feb 2 11:52:27 np-26992252-3 containerd[22741]: time="2023-02-02T11:52:27.544593294Z" level=info msg="Stop container \"c3426d6b07fe3bd60bcbe675bab73b6b4b3619ef4639e1c23bca82692633765e\" with signal terminated"
需要注意的是
containerMessage="Container app failed liveness probe, will be restarted"