c语言中如何让诊断代码右移

开发人员面临的更困难的任务之一是查找和诊断生产中运行缓慢的代码。

首先,您如何监控生产代码而不放慢速度? 当然,您无法通过分析器运行生产代码。 即使您有计时代码的机制,那么如何诊断问题呢? 如果您无法在开发环境中重现问题,则尤其如此。 理想情况下,您希望在生产中发生问题时得到通知,并向其提供足够的信息,以便有合理的机会修复或至少诊断问题。

这是我的同事彼得·劳瑞 ( Peter Lawrey)建议的一种机制,您可以用来精确地做到这一点。 (完整的代码清单可在此处找到)。

您要做的是创建一个Monitor类,如下所示:

public class Monitor implements Runnable{private final Thread thread;private final AtomicLong startTime = new AtomicLong(Long.MAX_VALUE);private final int thresholdMS;public Monitor(Thread thread, int thresholdMS){this.thread = thread;this.thresholdMS = thresholdMS;}public void reset(){startTime.set(System.currentTimeMillis());}@Overridepublic void run(){while(thread.isAlive()){long timeTaken = System.currentTimeMillis()-startTime.get();if(timeTaken > thresholdMS){System.out.println(timeTaken + "-------------------------");Stream.of(thread.getStackTrace()).forEach(System.out::println);}try {Thread.sleep(thresholdMS/2);} catch (InterruptedException e) {break;}}}
}

如果线程无法在阈值时间内重置,则此类将转储正在运行的线程的堆栈跟踪。

这是一些示例程序,演示如何调用Monitor。

Monitor monitor = new Monitor(Thread.currentThread(), 8);
Thread thread = new Thread(monitor, "MonitorThread");
thread.setDaemon(true);
thread.start();while(true) {monitor.reset();double x=0;for (int i = 0; i < 10_000; i++) {x += Math.sqrt(i);Logger.getLogger(getClass().getName()).fine("x=" + x);}
}

Monitor观察到了这一“关键”代码。 如果在8毫秒内未重置监视器,它将转储代码的堆栈跟踪。

如果您有一个Monitor监视您的关键代码段,则可以确保它们在给定的约束范围内执行。 如果代码确实违反了约束,则可以通过检查堆栈跟踪来很好地了解问题所在。 您还可以使用它来查看关键代码在其运行期间未执行多少次。

如果没有专用的备用CPU进行监视,则可以更改等待时间。 另外,您可能想更改等待策略以允许GC暂停,这会影响所有线程。 您可能想通过使用System.nanoTime()来细化计时,而不是以毫秒为单位。

翻译自: https://www.javacodegeeks.com/2015/02/detect-diagnose-slow-code-production.html

c语言中如何让诊断代码右移

c语言中如何让诊断代码右移_如何检测和诊断生产中的慢代码相关推荐

  1. 一行python代码能干_几个小例子告诉你, 一行Python代码能干哪些事

    首先你要了解一下Python之禅,一行代码输出"The Zen of Python": python -c "import this" "" ...

  2. 带通滤波中零相位和最小相位_相位器在Perl 6中的工作方式

    带通滤波中零相位和最小相位 这是关于将代码从Perl 5迁移到Perl 6 的系列文章中的第六篇 .本文着眼于Perl 5中的特殊块 ,例如BEGIN和END ,以及Perl中所谓的相位器在语义上的细 ...

  3. vivado中bit文件怎么没有生成_「干货」FPGA设计中深度约束技巧及调试经验总结...

    今天跟大家分享的内容很重要,也是我们调试FPGA经验的总结.随着FPGA对时序和性能的要求越来越高,高频率.大位宽的设计越来越多.在调试这些FPGA样机时,需要从写代码时就要小心谨慎,否则写出来的代码 ...

  4. python中的断言是什么意思_一日一技:python中的断言

    一.使用python中的断言来自动检测python程序中的错误,让程序更加可靠且更易于调试 从根本上来说,python中的断言语句是一种调试工具,用来测试某个断言条件,如果断言条件为True,则程序将 ...

  5. 统计用产品分类目录8位代码类别_宋清辉:威奥股份拿下605代码第一股 中国中车不利变化对其影响大...

    著名经济学家宋清辉认为,如果中国中车未来经营出现重大不利变化,对供应商订单量减少,可能对威奥股份的经营业绩造成不利影响. 威奥股份拿下"605"代码第一股 北京商报讯(记者 刘凤茹 ...

  6. 中使用swiper不能自动切换_液晶拼接墙显示系统中矩阵切换器使用的注意事项

    近年来在液晶拼接墙显示系统中矩阵切换器的使用已变得越来越普遍.这主要是因为各矩阵切换器品牌商根据众多用户的实际需求对矩阵进行了同能扩展与完善.这也使得矩阵切换器除了使用在大屏拼接显示系统外还适用于多媒 ...

  7. 文章中嵌入代码块_如何在您的文章中嵌入多项选择测验问题

    文章中嵌入代码块 In my experience, supplementing study with practical exercises greatly improves my understa ...

  8. java 电池类类代码举例_下面哪个不是java中的关键字?

    [简答题]Java的字符类型采用的是ASCII编码. [简答题]1. 介绍16日野外考察时,你的研究区的岩性,如果以该岩石制作岩样进行单轴压缩实验,请预估一下它的应力应变曲线的特征. [其它]乡村旅游 ...

  9. python代码技巧_几个小技巧让你的Python代码更Pythonic

    Python是一门非常灵活的语言,很多语法是其他语言不具备的,特别是对于从C.Java等语言转向Python的人来说,很容易按照C.Java等语言的写法来写Python,对于初学者来说,如果对Pyth ...

最新文章

  1. Invocation of destroy method 'close' failed on bean with name 'sqlSession'
  2. linux centos使用xrdp远程界面登陆
  3. linux的同步与互斥
  4. 达梦数据库查看当前执行的查询并杀死session
  5. SSM框架的搭建(idea)
  6. MapReduce的shuffle阶段
  7. SSH (Secure Shell)详解
  8. XML文件结构和基本语法
  9. 旋流式沉砂池计算_旋流沉砂池设计方法
  10. idea 批量导入包
  11. php serialize和json_encode哪个更快_学习PHP的10个技巧
  12. python小说阅读器_用python实现自己的小说阅读器
  13. axure中备注线_Axure教程资料
  14. 默认空间和webapps下项目部署
  15. 分数加减乘除混合运算带答案_给我出50道分数加减乘除四则混合运算题(只需题目不需答案)...
  16. 2021-03-28
  17. 采用拉丁超立方采样的电力系统概率潮流计算 拉丁超立方采样属于分层采样,是一种有效的用采样值反映随机变量的整体分布的方法
  18. 交房后如何在手机上办理产权证,线上办理总耗时约6天拿到证书
  19. Calendar(日历)
  20. PhotoShop中的自由变换UI实现

热门文章

  1. P1412-经营与开发【dp】
  2. P3181-[HAOI2016]找相同字符【SAM】
  3. P3332-[ZJOI2013]K大数查询【树套树】
  4. 欢乐SSL初二组周六赛【2019.5.11】
  5. SPOJ1812 LCS2
  6. Nacos(九)之Dubbo 融合 Nacos 成为注册中心
  7. Spring Boot面试题(2020最新版)
  8. JAVA面试常考系列十
  9. 深入Java类型信息:RTTI和反射
  10. 20级:班级日常分享,一天一瞬间