加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – CPU利用率随时间的下降

发布时间:2020-12-16 06:50:44 所属栏目:百科 来源:网络整理
导读:我有一个多线程的过程.每个线程都受CPU限制(执行计算)并且还使用大量内存.根据资源监视器,该过程从100%cpu利用率开始,但几个小时后,cpu利用率开始缓慢降低. 24小时后,它在90-95%并且下降. 问题是 – 我应该寻找什么,以及我可以使用哪些最知名的方法来调试
我有一个多线程的过程.每个线程都受CPU限制(执行计算)并且还使用大量内存.根据资源监视器,该过程从100%cpu利用率开始,但几个小时后,cpu利用率开始缓慢降低. 24小时后,它在90-95%并且下降.

问题是 – 我应该寻找什么,以及我可以使用哪些最知名的方法来调试它?

附加信息:

我有足够的RAM – 大部分都没有在任何特定时刻使用过.
根据perfmon – 记忆不会增长(所以我认为它不会泄漏).
代码是.Net和native c的混合,有些数据来回编组.
我在几台不同的机器(具有24个逻辑核心的服务器)上看到了这一点
我在perfmon中看到的一件事 – 随着CPU利用率的降低,修改的页面列表字节数指标会随着时间的推移而增加.

编辑1
使用的第三方库之一是openfst.看起来它与该库的一些误用非常相关.
具体来说,我注意到我有以下警告:
警告LNK4087:CONSTANT关键字已过时;使用DATA

编辑2

由于这个问题已经结束,而且没有重新开放,我会写下我的发现,以及如何在问题正文中解决问题(对不起)给未来的用户.
原来有一个openfst.def文件,它定义了消费应用程序/ dll所使用的所有openfst FLAGS_ *符号.我不得不修复那些使用关键字“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关键字的误用,这些默认值是不确定的.

结论了解您的警告!尽可能多地消除它们!
谢谢.

解决方法

对于像这样的非显而易见的问题,您还应该使用实际采样CPU中的底层硬件计数器的分析器.我熟悉的大多数分析器使用内核提供的统计信息而不是底层的HW计数器.在Windows中尤其如此. (原因在于部分遗留,部分原因是Windows希望其内核统计信息独立于硬件.PAPI API尝试解决此问题,但仍然相对较新.)

最好的分析师之一是英特尔的VTune.是的,我为英特尔工作,但内部HPC人员也使用VTune.不幸的是,它的成本.如果您是学生,可以享受折扣.如果没有,则有试用期.

您可以在software.intel.com找到许多优化和性能问题诊断信息.以下是optimization和profiling的指针.即使您没有使用x86架构,这些技术仍然有效.

至于可能是什么问题,缓慢的退化是奇怪的.

>您多久使用一次新内存或访问旧内存?以什么速度?如果速率非常慢,您可能仍然遇到放慢使用资源的情况,例如:页面.
>您的内存访问模式是什么?它会随着时间而改变吗?多快?也许你的内存访问模式随着时间的推移而蔓延,导致更多的缓存未命中.
>也许您对问题空间的划分是这样的,您已经进入了一个新的计算域,并且没有真正的病态.
>查看是否存在较长时间间隔内发生的定期维护活动,但这会导致周期性降级,例如每24小时一次.这听起来不像你的情况,因为你经历的是逐渐退化.

如果您使用的是x86架构,请考虑在英特尔论坛中提交问题(例如“英特尔?集群和HPC技术”和“软件调优,性能优化和平台监控”).

让我们知道你最终发现了什么.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读