【发布时间】:2014-10-22 08:35:26
【问题描述】:
我们在 Windows 上有一个基于 C++ 的多线程应用程序,它使用 WinPCAP 库实时捕获网络数据包,然后处理这些数据包以监控网络。此应用程序旨在运行 24x7。我们的应用程序很容易消耗 7-8 GB 的 RAM。
我们正在观察的问题: 假设应用程序正在监控 100Mbps 的网络流量并消耗 60% 的 CPU。我们观察到,当应用程序持续运行较长时间(如一两天)时,应用程序的 CPU 消耗会增加到 70-80%,即使它仍在处理 100 Mbps 流量(做相同的工作量) .
我们尝试使用 ProcessExplorer 将此问题调试到线程级别,并注意到数据包捕获线程随着时间的推移开始消耗更多 CPU。即使重新启动应用程序后,此问题也未解决。只有重新启动机器才能解决问题。
我们观察到,在夜间运行期间,此问题在 Windows 2012 R2 Server 操作系统上很容易重现。在 Windows 7 中,该问题会在几天后发生。
知道是什么原因造成的吗?
提前致谢
【问题讨论】:
-
不知道。查看xperf。 Random thinks it's great.
-
或PerfView。
-
重新启动应用程序没有帮助,所以可能不是内存泄漏。系统资源泄漏情况如何:寻找随时间增长的句柄数。
-
可能是 WinPcap 驱动程序中的错误,甚至可能是网络驱动程序中的错误。
-
克里斯,我也会尽量留意句柄数
标签: c++ windows multithreading cpu-usage packet-capture