我有一个多线程进程。每个线程都受 CPU 限制(执行计算)并且还使用大量内存。根据资源监视器,该过程以 100% 的 cpu 利用率开始,但几个小时后,cpu 利用率开始缓慢下降。24 小时后,它达到 90-95% 并下降。
问题是 - 我应该寻找什么,以及我可以使用哪些最知名的方法来调试它?
附加信息:
我有足够的内存——其中大部分在任何给定时刻都没有使用。根据 perfmon - 内存不会增长(所以我认为它没有泄漏)。该代码是 .Net 和本机 c++ 的混合体,并带有一些来回编组的数据。我在几台不同的机器(具有 24 个逻辑核心的服务器)上看到了这一点。我在 perfmon 中看到的一件事 - 随着 CPU 利用率的降低,修改的页面列表字节指示器会随着时间的推移而增加。
编辑 1 使用的第三方库之一是 openfst。看起来这与该库的一些误用非常相关。具体来说,我注意到我有以下警告: warning LNK4087: CONSTANT keyword is obsolete; 使用数据
编辑 2
由于该问题已关闭且未重新打开,因此我将在问题正文中写下我的发现以及该问题是如何解决的(对不起),以供将来的用户使用。原来有一个 openfst.def 文件定义了所有 openfst FLAGS_* 符号,以供使用应用程序/dll 使用。我必须修复那些使用关键字“DATA”而不是“CONSTANT”(CONSTANT 已过时,因为它有风险 - 更多信息:https://msdn.microsoft.com/en-us/library/aa271769(v=vs. 60).aspx)。在那之后 - 没有观察到 CPU 利用率的下降。“修改的页面列表字节”指标不再上升。我怀疑它与 FLAGS 的默认值(特别是垃圾收集标志 - FLAGS_fst_default_cache_gc)有关,由于在 openfst.def 文件中误用了 CONSTANT 关键字,这些值是不确定的。
结论了解您的警告!尽可能多地消除它们!谢谢。