检测到引用库的 100% CPU 加载
Detect 100% CPU load by a referenced library
我有一个 ASP.NET (C#) 网站,该网站使用第三方 DLL 来处理用户 POST 通过 Web 表单提供的数据。调用非常简单:
string result = ThirdPartyLib.ProcessData(myString);
此库挂起并(根据我的托管服务提供商日志)消耗了 100% 的 CPU。该网站托管在共享主机上,因此我无权访问 IIS 或事件日志。发生这种情况时,托管服务提供商性能监视器会自动停止我的网站,我已手动将其重新打开。
现在,我知道正确的做法是调查问题并修复(或替换)DLL。但由于它是第三方软件,我无法修复它,而且他们的支持根本没有帮助。而且,我无法重现该问题。换库也很痛苦
C# 中有没有一种方法可以检测此 DLL 何时开始消耗 100%CPU 并从我的 ASP.NET 代码中自动终止进程?
如果当前进程挂起,你不能 "detect" 因为作为方法的调用者(第三方或非第三方)你根本无法控制它 returns.
你可以做的是将对第三方库的调用移动到一个单独的可执行文件中,并让它通过标准输出输出结果(为此你可以简单地使用 Console.WriteLine(string)
)。
完成后,您可以启动一个单独的 Process
that runs this executable, read the result via StandardOutput
and use WaitForExit(int)
to wait a certain amount of time (maybe a few seconds) for the process to finish. The return value of WaitForExit()
tells you if the process actually exited. In case it didn't, you can Kill()
它并继续前进,而不会将 IIS 工作进程作为一个整体挂起。
我有一个 ASP.NET (C#) 网站,该网站使用第三方 DLL 来处理用户 POST 通过 Web 表单提供的数据。调用非常简单:
string result = ThirdPartyLib.ProcessData(myString);
此库挂起并(根据我的托管服务提供商日志)消耗了 100% 的 CPU。该网站托管在共享主机上,因此我无权访问 IIS 或事件日志。发生这种情况时,托管服务提供商性能监视器会自动停止我的网站,我已手动将其重新打开。
现在,我知道正确的做法是调查问题并修复(或替换)DLL。但由于它是第三方软件,我无法修复它,而且他们的支持根本没有帮助。而且,我无法重现该问题。换库也很痛苦
C# 中有没有一种方法可以检测此 DLL 何时开始消耗 100%CPU 并从我的 ASP.NET 代码中自动终止进程?
如果当前进程挂起,你不能 "detect" 因为作为方法的调用者(第三方或非第三方)你根本无法控制它 returns.
你可以做的是将对第三方库的调用移动到一个单独的可执行文件中,并让它通过标准输出输出结果(为此你可以简单地使用 Console.WriteLine(string)
)。
完成后,您可以启动一个单独的 Process
that runs this executable, read the result via StandardOutput
and use WaitForExit(int)
to wait a certain amount of time (maybe a few seconds) for the process to finish. The return value of WaitForExit()
tells you if the process actually exited. In case it didn't, you can Kill()
它并继续前进,而不会将 IIS 工作进程作为一个整体挂起。