linux ASP.NET 7重新启动docker容器,错误陷阱:.NET ThreadPool常规保护错误:libc-2.31.so中的0

m1m5dgzv  于 4个月前  发布在  Linux
关注(0)|答案(1)|浏览(81)

我在Ubuntu 20.04.3 LTS上的Docker容器中运行了ASP.NET 7应用程序。它正常运行了一年,但最近两周它开始无故重新启动Docker容器。来自系统日志的错误给出了以下信息:
陷阱:.NET ThreadPool[241403]常规保护故障ip:7 f512 ca 26602 sp:7 f50 aca 21 c10错误:0 in libc-2.31.so[7 f512 ca 26000 +159000]
但是此时线程池中没有任何工作项。
有谁能帮我解释一下为什么会发生这个错误吗?
我可以使用哪种方法来诊断并找到问题的根本原因,或者至少了解问题的原因?

2mbi3lxu

2mbi3lxu1#

我找到了这种行为的原因。它发生是因为来自线程或线程池的未处理异常将退出整个进程。来自miscrosoft文档:
公共语言运行库允许线程中的大多数未处理异常自然地继续。在大多数情况下,这意味着未处理异常将导致应用程序终止。但是,公共语言运行库为某些用于控制程序流的未处理异常提供了支持:
由于调用了Abort,在线程中引发ThreadAbortException。这仅适用于.NET Framework应用程序。
在线程中引发AppDomainUnloadedException,因为正在卸载执行线程的应用程序域。
公共语言运行库或宿主进程通过引发内部异常来终止线程。
如果公共语言运行库创建的线程中未处理这些异常中的任何一个,则该异常将终止线程,但公共语言运行库不允许该异常继续处理。
如果这些异常在主线程或从非托管代码进入运行库的线程中未处理,则它们将正常进行,从而导致应用程序终止。

相关问题