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

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语言中如何让诊断代码右移

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/338478.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

擦窗机器人不用时怎么收纳_省心省力,智能擦窗机器人

以前擦窗户&#xff0c;一手湿抹布一手干抹布&#xff0c;身边再放点儿报纸&#xff0c;可能还得再来一个人换洗抹布。一天下来&#xff0c;两个人都是腰酸背痛的。对于又爱干净又是懒癌星人的人来说&#xff0c;玻妞擦窗机器人&#xff0c;让大家不用爬上爬下&#xff0c;也能…

C语言变量定义和赋值

定义变量的格式非常简单&#xff0c;如下所示&#xff1a;数据类型 变量名;首先要强调的一点是&#xff1a;最后的分号千万不要丢了。变量的定义是一个语句&#xff0c;我们说过&#xff0c;语句都是以分号结尾的。“数据类型”表示想要存储什么类型的数据就定义什么类型的变量…

win7计算机盘共享,win7电脑如何共享文件夹 win7电脑共享文件夹操作方法

我们在工作当中&#xff0c;中是喜欢在电脑当中创建一个文件夹&#xff0c;然后把东西放进这个文件夹当中&#xff0c;最后实现共享&#xff0c;这样的方式能够为我们省去不少时间&#xff0c;那么win7电脑如何共享文件夹呢?今天为大家带来win7电脑共享文件夹的操作步骤。win7…

cdi-api_使用CDI简化JAX-RS缓存

cdi-api这篇文章&#xff08;通过一个简单的示例&#xff09;说明了如何使用CDI Producers使其在RESTful服务中利用缓存控制语义更加容易 与HTTP 1.0中可用的Expires标头相比&#xff0c; HTTP 1.1中添加了Cache-Control标头&#xff0c;这是急需的改进。 RESTful Web服务可以…

智能驾驶板块_智能驾驶股票有哪些?智能驾驶股票一览

智能驾驶股票有哪些?智能驾驶板块5月8日午后拉升&#xff0c;华东数控(002248)涨停&#xff0c;伊之密(300415)、斯莱克(300382)股价大涨超过9%&#xff0c;中南建设(000961)涨逾4%&#xff0c;高新兴(300098)涨幅超过3%&#xff0c;汇川技术(300124)、亚威股份(002559)、亚太…

调整w7计算机屏幕一直亮,win7系统电脑屏幕不休眠保持常亮状态设置的操作方法...

很多小伙伴都遇到过对1.首先我们点开始-控制面板&#xff0c;打开控制面板2.在控制面板中找到“电源选项”&#xff0c;点击进入3.然后根据你的选择&#xff0c;我这边选择的是平衡&#xff0c;则在平衡的右边点击更改计划设置&#xff0c;自己是哪一项就选哪一项对应的更改计划…

java文章上一篇下一篇_每个人都必须阅读的10篇Java文章

java文章上一篇下一篇一个月前&#xff0c;我们发布了每个人都必须阅读的10篇SQL文章列表。 我们相信jOOQ博客上的文章列表将为我们的读者带来非凡的价值。 jOOQ博客是一个专注于Java和SQL的博客&#xff0c;因此&#xff0c;很自然地&#xff0c;一个月后的今天&#xff0c;我…

【C语言】结构体赋值

结构体在 C 程序中使用的较为频繁&#xff0c;能对数据有一定的封装的作用。对一个结构体赋值时&#xff0c;经常采用的方式是&#xff0c;分别对其成员变量赋值。那么能否将一个结构体用赋值号&#xff08;“”&#xff09;直接赋值给另一个结构体呢&#xff1f;网上的答案不一…

vue 传参 微信_vue-router 你可能忽略的知识点

vue-router相信大家都不陌生&#xff0c;并且很多都有实战经验。可能有很多你忽略的一些点。1、丑陋的hash值vue-router 默认 hash 模式 —— 使用 URL 的 hash 来模拟一个完整的 URL&#xff0c;于是当 URL 改变时&#xff0c;页面不会重新加载。const router new VueRouter(…

适合计算机64位的cad,【1人回答】求一个能适用于CAD2008的纬地,我的电脑是Win7 64位的-3D溜溜网...

回答&#xff1a;下载方法&#xff1a;1、建立临时目录&#xff0c;如 CAD20082、下载AutoCAD2008安装软件&#xff0c;将文件复制到CAD2008目录下。3、将 CAD2008 文件夹中的 zh-cn 文件夹改名为 en-us&#xff1b;4、下载“AutoCAD 2008 64 位补丁包(下载地址&#xff1a;ACA…

C |格式化输出与变量类型

C语言 格式化输出与变量类型 1、格式化输出在PHP里面&#xff0c;我们一般都是用echo和var_dump以及print_r等来输出调试语句&#xff0c;在&#xff23;语言中一般用printf来输出&#xff0c;不过由有点特殊&#xff0c;你需要在输出的时候指定输出的数据类型&#xff1a;#in…

n76e885_新唐N76E003,N76E616烧录,调试各种问题集【坑集】

新唐N76E003&#xff0c;N76E616烧录&#xff0c;调试各种问题集【坑集】芒果 • 2018 年 10 月 24 日这篇博文用来记录学习新唐单片机时遇到的问题以及解决的过程和方法。当然也有各种坑。希望这篇文章有机会能够帮助到遇到到同样问题的朋友。1. **可以和STC单片机一样使用串口…

注解默认继承_默认方法和多重继承

注解默认继承最近卢卡斯JOOQ埃德尔发布和文章有关嵌套类及其使用。 这是一个有趣的话题&#xff0c;他的文章一如既往地有趣并且值得一读。 只有一个简短的声明我无法同意&#xff0c;我们有一个简短的回复链&#xff0c;导致了默认方法&#xff0c;以及为什么不能有类似的东西…

暑期社会实践服务器维护,寒假网络维护社会实践报告

今年由于来学校返校报到的时间比较晚&#xff0c;我早到学校一星期了&#xff0c;就在学校附近的网吧做了一星期的网络维护社会实践&#xff0c;把一星期实践所学到的东西和遇到的问题做个总结&#xff1a;一、网络简介网络按照地域可分为&#xff1a;局域网、城域网与广域网。…

信工干货||C语言输入输出语句

数据输入与输出C语言无I/O语句&#xff0c;I/O操作由函数实现putchar( ) getchar( ) printf( ) scanf( ) puts( ) gets( )#include或#include “stdio.h”数据输出字符输出函数格式&#xff1a;putchar&#xff08;c&#xff09;参数&#xff1a;c为字符型或整型常量、变量或表…

如何设置网件gs108e_Netgear 网件 EAX80 AX6000规格 无线扩展器 开箱拆解评测

前言众所周知&#xff0c;国行网件RAX系列默认中国区&#xff0c;这就导致了路由器的发射功率不会高&#xff0c;所以很多人觉得国行RAX无线路由器信号覆盖不尽如意。为了解决这个问题&#xff0c;本次为大家介绍一款WiFi 6信号扩展器—EAX80(官网链接)&#xff0c;它可以将高强…

maven 可执行 jar_Maven提示:有关可执行jar的所有信息

maven 可执行 jarMaven提示&#xff1a;有关可执行jar的所有信息 可执行jar是分发代码时非常有用的工具。 这意味着&#xff0c;只要将Java安装在客户端计算机上&#xff0c;至少在Windows和Mac上&#xff0c;您的用户只需双击jar即可启动程序。 或者&#xff0c;在命令行上&am…

饥荒海难创建显示专用服务器,饥荒创建世界时一直显示启动服务器 | 手游网游页游攻略大全...

发布时间&#xff1a;2017-08-07TGP版怎么建立服务器呢?各位知道在TGP里如何创建服务器吗?这里给大家带来了TGP版服务器创建开服方法,教大家TGP如何创建服务器,还不会的玩家,一起来了解下吧. >&gt ...标签&#xff1a;攻略发布时间&#xff1a;2015-12-20联机过程中有…

C语言 | 6种常用的转换工具函数盘点

字符串转十六进制代码实现&#xff1a;void StrToHex(char *pbDest, char *pbSrc, int nLen){ char h1,h2; char s1,s2; int i; for (i0; i2; i) { h1 pbSrc[2*i]; h2 pbSrc[2*i1];s1 toupper(h1) - 0x30; //toupper 转换为大写字母 if (s1 > 9) s1…

企业联合体的形式_联合体如何联合?——总包新政下,联合体如何联合?系列三...

以下文字为根据科思顿企业咨询管理(上海)有限公司合伙人胡建于2020年4月10日的网课核心内容摘录&#xff0c;因内容较多&#xff0c;分三个系列发布&#xff0c;包括&#xff1a;系列之一、为什么政策突变&#xff1f;系列之二、联合体是什么&#xff1f;系列之三、联合体如何联…