竟然还有 进程占用异常 。。。而且异常堆栈中不就是那个熟悉的文件创建函数 WindowsCreateFile 吗??? 好吧,好奇心驱使着我决定要拿到那个文件名,可以切换到 78 号线程,使用 !clrstack -a 调出参数和局部变量,找到最后的 FileName。
0:078> !clrstack -a OS Thread Id: 0xafb8 (78) 0000001b3703e750 00007ff7d2d30ce1 NLog.Internal.FileAppenders.BaseFileAppender.WindowsCreateFile(System.String, Boolean) PARAMETERS: this (<CLR reg>) = 0x000001c9771abf40 0:078> !do 0x000001c9771abf40 Name: NLog.Internal.FileAppenders.RetryingMultiProcessFileAppender Fields: MT Field Offset Type VT Attr Value Name 00007ff830f88760 40000dd 8 System.Random 0 instance 000001c9771abf80 random 00007ff830f99808 40000de 10 System.String 0 instance 000001c9772fd418 <FileName>k__BackingField 0:078> !DumpObj /d 000001c9772fd418 Name: System.String MethodTable: 00007ff830f99808 EEClass: 00007ff830876cb8 Size: 142(0x8e) bytes File: C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll String: D:\xxx\wwwroot\WebService\log\2021-04-16\file.txt
还记得文章开头第二张截图吗?朋友开了WebService程序的多个副本,没想到都写一个文件了,这是大忌哈。。。
三:总结吐槽了这么多,可能我和朋友都在做涉医行业的业务,来自于甲方的压力还是挺大的😭😭😭,最后给出的优化措施如下。
修改 NLog 的配置文件,支持 专有线程 + Queue 模式,从而释放业务线程。
NLog 的写法和调用方式太杂乱,需要重新封装,对外只需提供一个接口即可,用它就要信任它。
有条件提升到 SSD。
最后的彩蛋就是反馈好消息啦😁😁😁
更多高质量干货:参见我的 GitHub: dotnetfly
到此这篇关于.NET医院公众号系统 线程CPU双高分析的文章就介绍到这了,更多相关.NET医院公众号系统 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章: