什么可以使.NET应用程序冻结计算机?

时间:2009-03-12 07:01:51

标签: c# .net managed ethernet

我知道这可能是规范的“这取决于......”的问题,但我很欣赏任何关于从哪里开始寻找的指示。

我有一个客户端/服务器应用程序通过以太网通话。在一台计算机中,我运行服务器和客户端,而另一台只运行客户端。一个运行Vista,另一个运行XP。在大约3周的正常运行时间之后,整个计算机冻结并且没有任何工作,不是鼠标,不是键盘,没有 - 只是断电。每隔十秒钟服务器发送一条ping消息,看看客户端是否还活着,除了每天只有几条小消息来回传播。

我试图找出是否是我造成它或其他东西。我已经开始了一段时间,几天后我想我会检查内存使用的奇怪增加,但除此之外,我的想法很少。

4 个答案:

答案 0 :(得分:3)

您可以将内核调试程序附加到操作系统。这样,即使操作系统完全没有响应,您也应该能够检查操作系统和进程的状态。 (不幸的是,它比在VS中击中“break”要难得多。我建议在尝试之前阅读John Robbin的“.NET和Windows调试应用程序”。)

您还可以尝试定期创建应用程序的内存转储。不过,您可能需要为此编写一些脚本。 (通常,你使用像userdump或adplus这样的工具创建一个带击键的转储,但如果操作系统没有响应击键,那就行不通了。)这样,你就知道你的进程处于什么状态。或挂起前不久。 这个页面:http://blogs.msdn.com/debuggingtoolbox/default.aspx是编写WinDbg脚本的一个很好的起点。 (如果您不知道如何处理内存转储,我会再次建议John Robbin关于调试的优秀书籍!)

除此之外,我只能想到标准的调试技巧:每台PC上都会出现问题吗?如果没有客户请求会发生吗?如果有更多的客户请求会更快发生吗?如果可用的物理内存较少,是否会更快发生?尝试删除部分应用程序(可能在单独的服务器上进行测试),看看是否仍然出现问题,依此类推。尝试在VM中运行它,以便在“挂起”期间查看它是否使用CPU,硬盘或网络。

答案 1 :(得分:3)

需要考虑的一些想法:

  1. 你知道电脑没有响应,但这并不意味着电脑没有响应。它会响应ping吗?
  2. 也许磁盘活动指示灯一直亮着?
  3. 你说“没有键盘” - 你的意思是没有大写锁定或数字锁定灯吗?
  4. 虽然.NET应用程序可能是您当时唯一运行的应用程序,但这并不意味着它是导致问题的原因。一些后台工作可能会这样做。
  5. 例如,我注意到Retrospect备份在创建快照时会冻结整个系统10-15分钟。我的意思是,没有大写锁定,任务栏中的时钟不更新,没有CTRL-ALT-DEL,无法输入SO中的“答案”文本框,什么也没有。它与我当时正在做的事情无关,后者回答了关于SO的问题。

    回来后,SO问我是不是人。我的感受很受伤。 ; - )

答案 2 :(得分:1)

这不是 的答案,但我建议首先检查您的操作系统事件日志并运行perfmon以跟踪内存,CPU使用情况等。

答案 3 :(得分:0)

哪台计算机冻结,服务器或客户端?那些操作系统分别在运行?

正如Daniel L所说,紧密的轮询循环可以真正杀死CPU。如果可以,请更改代码以使用事件处理程序,这是一个更强大的解决方案。

最后,您确定冷冻计算机上没有硬件问题吗?