什么原因会导致应用程序和系统变慢?

4
我正在调试一个应用程序,它会导致系统变得非常缓慢。该应用程序从本地硬盘加载大量数据(每个文件大约半MB,约1000个文件)。这些文件被加载为内存映射文件,只在需要时进行映射。这意味着在任何给定时间点上,虚拟内存使用量不会超过300 MB。
我还使用来自Sysinternals的handle.exe检查了句柄计数,并发现最多只有大约8000个打开的句柄。当数据被卸载后,它会降至约400个。每次加载和卸载操作后都没有句柄泄漏。
在2-3次加载/卸载周期之后,在一次加载期间,系统变得非常缓慢。此时,我检查了应用程序的虚拟内存使用量以及句柄计数,它们都在限制范围内(VM约460MB,没有太多碎片化,句柄计数为3200)。
我想知道一个应用程序如何使系统变得非常缓慢?我可以使用哪些其他工具来调试此情况?
更具体地说,当我说“系统”时,是指整个Windows都变得缓慢。任务管理器本身需要2分钟才能启动,并且经常需要硬重启。

让我更具体地说明,当我说系统变慢时,是指整个Windows系统。任务管理器本身需要2分钟才能启动,并且大多数情况下需要进行硬重启。 - Canopus
7个回答

1
整个系统变慢的事实非常令人烦恼,这意味着您无法轻松附加分析器,也意味着停止分析会话以查看结果将更加困难(因为您说它需要硬重启)。
在这种情况下最适合该工作的工具是 ETW(Windows 事件跟踪),这些工具非常好,可以给出您要寻找的确切答案。
在此处检查它们: http://msdn.microsoft.com/en-us/library/cc305210.aspxhttp://msdn.microsoft.com/en-us/library/cc305221.aspx 还有 http://msdn.microsoft.com/en-us/performance/default.aspx 希望这起作用。 谢谢

1

此时您可以使用的工具:

  • Perfmon
  • 事件查看器

根据我的经验,当系统发生阻止任务管理器弹出的问题时,通常是硬件问题——检查事件查看器的系统事件日志有时会充满警告或错误,表明某些硬件设备超时。

如果事件查看器没有指示任何可记录的硬件错误导致减速,则尝试使用 Perfmon——添加系统对象计数器以跟踪每秒钟的文件读取、异常、上下文切换等,看看是否有明显的问题。

坦白地说,所展示的行为应该是不可能的——按设计——用户模式代码无法引起。WinNT花费了很多精力来隔离应用程序并防止流氓应用程序使系统无法使用。因此,我怀疑某种硬件故障是罪魁祸首。您有没有机会在另一台电脑上运行相同的测试?


0

Windows系统对于缓存文件数据非常贪婪。我建议你试着删除文件I/O操作,并确保在完成文件操作后立即关闭文件映射。 如果你的文件和操作系统在同一磁盘上,那么I/O可能会导致速度下降。另一种测试的方法是将文件移到另一个磁盘上,看看是否可以缓解这个问题。


0

你可以使用像“IBM Rational Quantify”或“Intel VTune”这样的工具来检测性能问题。
[编辑]
就像Benoît所做的那样,一个好的方法是测量任务时间以确定哪个任务正在占用CPU。
但请记住,由于你正在处理许多文件,可能会出现缺失导致内存与磁盘交换。


0

如果你没有性能分析工具,你可能需要手动完成相同的工作...

你尝试过将所有读/写操作注释掉,只是为了检查减速是否消失了吗? “分而治之”的策略有助于找出问题所在。


0
如果您在IDE下运行它,一直运行到它变得非常缓慢,然后点击“暂停”按钮。这样您就可以捕捉到它正在执行任何需要大量时间的操作。

0

当任务管理器需要2分钟才能启动时,您是否会遇到大量的磁盘活动?还是CPU受限?

我建议尝试使用来自Sysinternals的Process Explorer。当您的系统处于减速状态并尝试运行记事本等应用程序时,请注意页面错误增量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接