我有一个 64 位 .NET 控制台应用程序,它基本上从 MSMQ 读取消息,然后通过 .NET SqlClient 与 SQL 服务器通信来处理它们。大多数时候它工作正常,但时不时地让自己进入一个状态,即使是最简单的操作,例如构建 SqlCommand 参数数组,都运行异常缓慢。在最坏的情况下,应用程序一次 30 分钟什么都不做(什么都没有写入日志,并且在详细模式打开时非常健谈),然后将再次开始写入,没有任何迹象表明导致延迟的原因。这严重影响了我们产品的可用性。
在过去的几个小时里,我一直在查看每个性能计数器等,一切都表明页面读取过多 - 因此磁盘 I/O 已达到最大值,我可以看到我的进程不断从 pagefile.sys 等中大量读取. 等等 但我不知道为什么,因为应用程序的总内存使用量远低于可用 RAM:工作集为 60M,总提交大小为 300M(高,并且与峰值工作集匹配 - 不知道为什么会这样),但与可用的 12 Gig RAM 相比,这是微不足道的,其中很少使用其他内存。
我已经阅读了关于监控应用程序性能等的每一个 MS 文档,但所有内容都指向“我的应用程序需要更多内存”。好的......那么它如何给它更多的内存 - 没有其他东西在使用它!现在有一个单独的问题,考虑到应用程序的功能,它确实不应该需要那么多内存,但是为了降低内存而付出的努力可能不值得更多硬件的成本。
要注意的另一件事:如果我启动同一应用程序的第二个实例,它似乎运行良好。所以这显然不是系统范围的问题。
我在 stackoverflow 上看到了一些类似的帖子,但还没有特别有用的答案……希望比以前的海报有更多的运气。