我们在Windows上有一个基于C ++的多线程应用程序,它使用WinPCAP库实时捕获网络数据包,然后处理这些数据包以监控网络。此应用程序旨在全天候运行。我们的应用程序很容易消耗7-8 GB的RAM。
我们正在观察的问题: 可以说该应用程序正在监控100Mbps的网络流量并消耗60%的CPU。我们观察到,当应用程序持续运行较长时间(如一两天)时,应用程序的CPU消耗增加到70-80%,即使它仍在处理100 Mbps流量(执行相同数量的工作) 。
我们尝试使用ProcessExplorer将此问题调试到线程级别,并注意到数据包捕获线程随着时间的推移开始消耗更多的CPU。重新启动应用程序后,此问题仍未解决。只有机器重启才能解决问题。
我们发现在夜间运行期间,此问题在Windows 2012 R2 Server OS上很容易重现。在Windows 7中,问题发生了几天。
知道可能导致这种情况的原因吗?
先谢谢
答案 0 :(得分:2)
内存分配怎么样?因为你使用了大量的内存,所以它可能是一个内存fregmentation问题,所以如果你做几个缓冲区的分配/重新分配,这当然会导致处理器查找和分配可用空间的主要成本。
答案 1 :(得分:0)
我终于找到了上述行为的原因:它是导致它的winpcap代码。在替换之后,我们没有观察到这种行为。