Joh*_*ley 5 iis asp.net-core-mvc .net-core asp.net-core
因此,在生产环境中,我在 IIS 8(Windows Server 2012 R2)中托管的所有 dotnet 核心应用程序在一天中的随机时间重新启动。大约一天一次。永远不会同时 - 随机时间。我有很多用户在生产中遇到了这个问题,以及计划的服务失败等等......最后这个重启导致了停机时间(我的主服务需要大约 5 分钟才能启动,因为它受到了请求等的影响)每天,这显然是不可接受的。
在事件查看器中,重新启动之前没有任何内容 - 每个服务只有一行:
信息 - 时间戳 - IIS AspNetCore 模块 - 1001 - 无
详细信息:进程“9652”成功启动并正在侦听端口“25405”。
对于我拥有的每个 dotnet 核心应用程序(dotnet 1.0.0 - netcoreapp1.0)。有时应用程序在第一次尝试后会失败,可能是因为它的点击次数过多,或者其他原因,这只会延长停机时间。
没有 IIS 或 dotnet 故障转储(我通过 WER 启用了故障转储)。应用程序日志中没有任何帮助,IIS 日志中也没有任何帮助......我也打开了 STDOUT 日志 - 在重新启动时没有任何帮助。
服务器上的 dotnet 核心版本:.NET Core 1.0.1 - SDK 1.0.0 Preview 2-003133 (x64) - 我不认为 dotnet 是罪魁祸首,因为它是 IIS 进行重启...
我该怎么做才能找出我的应用程序崩溃的原因?
一种选择是在进程上使用ProcDump在进程退出时触发内存转储(-t开关):
procdump.exe -t pid c:\exit.dmp
要获取进程的 pid(因为可能有多个应用程序池),您可以使用
c:\windows\system32\inetsrv\appcmd.exe 列表 wp
从提升的命令提示符中,显示如下列表:
WP“5624”(应用程序池:foo)
另一个需要检查的区域是IIS 自动应用程序池回收设置,但如果您在启动后立即看到崩溃,则可能不是原因。
根据亨利的回答 - 这是一个导致我做噩梦的回收环境。在 IIS 8 上,有一个 AppPools 的高级设置,用于按固定时间间隔(分钟)进行回收,默认设置为 1740(29 小时)。所以我将其更改为 0(从不回收)。
问题是当 IIS 回收应用程序池时,它实际上会重新启动您的 dotnet 核心应用程序。这在某些情况下并不理想(例如,当您有许多用户向重新启动的应用程序发送请求时)。
将监控应用程序的性能,并在必要时使用“特定时间”选项在工作时间以外重新启动所有 .net 核心应用程序。
| 归档时间: |
|
| 查看次数: |
2014 次 |
| 最近记录: |