c# - NET5 Windows 服务进程停止后卡在“暂停”状态
问题描述
程序描述:我有一个非常活跃的服务器应用程序作为 Windows 服务运行,用于与物联网设备进行通信(每分钟超过数千次)。一些做 UDP,一些 TCP,一些 HTTP,总是从服务器端建立连接。它不是我知道以这种方式挂起进程的“UWP”应用程序。主机是 Windows Server 2019。
该项目之前的目标是 .NET 4.7.2,并用于System.ServiceProcess.ServiceBase
作为服务运行。它还在同步模式下进行所有通信。它没有这个问题。
然后我进行了大规模升级并将其移植到 .NET5,使用Microsoft.Extensions.Hosting.Host
带有UseWindowsService()
MS DI 容器的类,并将所有通信代码移植到 async/await。
现在,大多数情况下进程关闭或崩溃,它卡在“暂停”状态的 Windows 任务管理器中,如下面的屏幕截图所示:
只有第一个进程是活动的,其余的都是“幽灵”。这些幽灵不会等待某些网络通信超时或其他什么,它们可以在那里停留数周。
我无法终止进程。右键单击“结束任务”什么也不做。即使在具有完全管理权限的用户的管理员命令提示符下,我也会收到此错误:
taskkill /F /PID 9100
ERROR: The process with PID 9100 could not be terminated.
Reason: Access is denied.
我可以摆脱它们的唯一方法是重新启动服务器。
幸运的是,它们不浪费资源,也不锁定文件,所以我仍然可以更新程序并重新启动它。
在开发机器或测试服务器上运行的相同应用程序没有此问题,它仅在生产服务器上的高负载时发生。
我唯一能想到的是,我不会将关闭 CancellationToken 传播到我的所有异步任务,但无论如何它们都应该在几秒钟后完成。
我的问题是:有什么方法可以找出导致这种症状的原因吗?有什么方法可以诊断出是什么让进程保持这样锁定?
解决方案
推荐阅读
- javascript - 我们如何在 Django 中使用 AJAX 将 script.js 的视频文件发送到 views.py?
- python - 如何修复 Pylint 的误报无法导入错误?
- python - 如何替换字典中所有键的第一个字符?
- python - 如何在 Python 中的 pandas 数据帧上使用 groupby 创建多个列表聚合?
- react-native - 成功扫描生物识别反应本机指纹扫描仪无法进入下一个屏幕?
- omnet++ - 有没有办法将多个 TraCI 模块连接到 OMNet++/veins 仿真?
- python - 在 Spyder 中导入 Flasgger:ModuleNotFoundError: No module named 'flasgger'
- laravel - laravel 8 -> 使用 jwt 和邮递员授权
- python - s3上传后未触发Lambda函数
- node.js - Node中的数据库连接是异步的吗?