我正在调试一个非常糟糕地降低系统的应用程序。应用程序从本地硬盘加载大量数据(大约1000个文件,每个半个MB)。文件作为内存映射文件加载,仅在需要时映射。这意味着在任何给定的时间点,虚拟内存使用量不会超过300 MB。
我还使用sysinternals中的handle.exe检查了Handle计数,发现最多打开了大约8000个奇数句柄。当数据被卸载时,它下降到大约400.每次加载和卸载操作后都没有句柄泄漏。
2-3次加载卸载循环后,在一次加载期间,系统变得非常慢。我检查了应用程序的虚拟内存使用情况以及此时的句柄计数,它完全在限制范围内(VM大约460MB,碎片也不多,处理计数为3200)。
我想要一个应用程序如何使系统响应缓慢?我可以使用哪些其他工具来调试此场景?
让我更具体一点,当我的意思是系统时,整个窗口正在放慢速度。任务管理器本身需要2分钟才能启动,而且通常需要硬重启
答案 0 :(得分:1)
此时可以使用的工具:
根据我的经验,当系统发生阻止任务管理器弹出的事情时,它们通常具有硬件种类 - 检查事件查看器的系统事件日志有时只是警告或某些硬件的错误设备正在超时。
如果事件查看器没有指出任何类型的可记录硬件错误导致速度减慢,那么尝试Perfmon - 为系统对象添加计数器以跟踪文件读取,异常,上下文切换等每秒,看看是否有什么东西很明显。
坦率地说,所展示的行为在设计上是不可能的,因为用户模式代码会导致这种行为。 WinNT付出了很多努力来隔离应用程序,防止恶意应用程序使系统无法使用。所以我的怀疑是某种硬件故障是罪魁祸首。你有没有机会在不同的PC上运行相同的测试?
答案 1 :(得分:1)
整个系统减速的事实非常烦人,这意味着您无法轻松附加分析器,这也意味着甚至很难停止分析会话以查看结果(因为您说它需要硬重启)。
在这种情况下适合工作的最佳工具是ETW(Windows事件跟踪),这些工具很棒,可以为您提供您正在寻找的确切答案
在这里查看
http://msdn.microsoft.com/en-us/library/cc305210.aspx 和 http://msdn.microsoft.com/en-us/library/cc305221.aspx 和 http://msdn.microsoft.com/en-us/performance/default.aspx
希望这有效。 感谢
答案 2 :(得分:0)
您可以使用“IBM Rational Quantify”或“Intel VTune”等工具来检测性能问题
[编辑]
就像Benoît所做的那样,一个好的意思是测量任务时间以确定哪些是吃cpu
但请记住,当您使用许多文件时,很可能会丢失导致内存与磁盘交换。
答案 3 :(得分:0)
如果您没有分析器,您可能需要手工完成同样的工作......
您是否尝试过评论所有读/写操作,只是为了检查减速是否消失? “分而治之”策略将帮助您找到问题所在。
答案 4 :(得分:0)
如果您在IDE下运行它,请运行它直到它变得非常慢,然后点击“暂停”按钮。你会在做任何需要这么多时间的事情中抓住它。
答案 5 :(得分:0)
当任务管理员花了2分钟时,你是否获得了大量的磁盘活动?还是cpu-bound?
我会尝试从sysinternals处理资源管理器。当您的系统处于减速状态,并且您尝试运行时,例如记事本,请注意页面错误增量。
答案 6 :(得分:0)
Windows对于缓存文件数据非常贪心。我会尝试按照某人的建议删除文件I / O,并确保在完成文件后立即关闭文件映射。 I / O可能会导致您的速度减慢,尤其是当您的文件与操作系统位于同一磁盘上时。另一种测试方法是将文件移动到另一个磁盘,看看是否可以缓解这个问题。