天道酬勤,学无止境

有什么工具可以说明每种方法运行需要多长时间?(Any tool that says how long each method takes to run?)

问题

我的程序的某些部分很慢。 我想知道是否有我可以使用的工具,例如它可以告诉我运行 methodA() 需要 100 毫秒,等等......或者类似的有用信息。

回答1

System.Diagnostics 命名空间提供了一个名为 Stopwatch 的有用类,可用于为您的代码部分计时(将其视为“穷人的分析器”)。

这是你将如何使用它:

Stopwatch stopwatch = new Stopwatch();
stopwatch.Start(); // Start timing

// This is what we want to time
DoSomethingWeSuspectIsSlow();

stopwatch.Stop();
Console.WriteLine("It took {0} ms.", stopwatch.ElapsedMilliseconds);
回答2

如果您使用的是 Visual Studio Team System,则“性能工具”中有一个内置分析器。 在这个博客上有很多有用的背景知识。

我发现这对于识别 20% 的代码运行 80% 的时间非常有用,因此我应该担心优化。

另一种非常有效的简单技术是在调试器中运行您的发布代码,并在它处于您试图诊断的“忙碌”状态时将其中断几次(10 次左右就足够了)。 您可能会发现重复出现的调用堆栈信息,将您引导至一般关注的领域。 同样,80/20 规则有效。

回答3

这类应用程序被称为“分析器”

这是一个例子:example

回答4

请参阅我们的 SD C# Profiler。 它可以通过自身和/或其所有被调用者提供函数的函数计时。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Go调优神器trace介绍
    你想知道你的Go程序在做什么吗? go tool trace可以向你揭示:Go程序运行中的所有的运行时事件。 这种工具是Go生态系统中用于诊断性能问题时(如延迟,并行化和竞争异常)最有用的工具之一。 在我之前的博客文章中,我提到我们在Pusher中使用go tool trace来跟踪为何Go垃圾收集器有很长的停顿时间。 在这篇博文中,我更加深入的介绍go toll trace。 go tool trace 试用go tool trace可以显示大量的信息,所以从哪里开始是个问题。 我们首先简要介绍使用界面,然后我们将介绍如何查找具体问题。 go tool traceUI是一个Web应用程序。 下面我已经嵌入了一个这个web程序的实例! 此示例是可视化并行快速排序实现的追踪信息: 请尝试这个例子!有关导航UI的帮助,请单击右上角的“?”。单击屏幕上的任何事件可以在下面获取更多信息。这里有一些你可以从这个追踪中找到的有价值的信息: 这个程序运行多长时间? 有多少goroutines运行872微秒? 该进程何时第一次升级到使用三个OS线程? 什么时候主要调用qSortPar? 是什么导致额外的过程(1,2和3)开始工作? proc#2什么时候停止? 太棒了! 我应该怎么在我的程序中使用go tool trace?您必须调整程序以将运行时事件写入二进制文件。
  • 京东40条软件测试常考题目总结——强烈建议收藏
    1、开发犯低级错误怎么办?开发首先要规范好编码,出低级错时不要指责,内心指出错误。让他们自己进行测试,反思找出错误。2、你进行过哪些测试,擅长什么?我主要从事web测试,搭建环境,对程序进行集成测试、系统测试、回归测试。还有编写测试用例,使用手册,功能测试文档。单元测试:测试的最早期阶段,焦点在于被测软件的最小的组成部分。集成测试:确保最小单元被(部分)整合后能正常操作的测试执行阶段系统测试:当应用作为整体运行时的测试执行阶段(测试最终的应用)回归测试:修改了旧代码后,重新进行测试以确认修改操作没有引入新的错误或导致其他代码产生错误。验收测试:以用户为主,由用户参加设计测试用例,对程序的功能、性能,以及可移植性、兼容性、可维护性、错误的恢复功能等进行确认。主要运用黑盒测试的方法,对系统主要流程、重要功能进行有效性测试,验证所测试的软件是否满足需求规格说明书列出的要求3、开发说不是bug怎么办?将自己的见解告诉开发,不行就把见解和bug提交项目经理决定。4、你的职业规划?巩固基础测试知识,提高理解需求能力。学习自动化测试,并且运用。技术到位后学习带领测试团队。最后争取达到测试经理水平。5、什么测试用例才是合格?能覆盖到所有测试点6、缺陷测试报告组成?缺陷编号、缺陷标题、缺陷描述、缺陷优先程度、缺陷所属模块、缺陷所属版本、缺陷所属开发人员、 输入数据、输出结果、缺陷分析等。C/S模式
  • 京东40条软件测试常考题目总结——强烈建议收藏
    1、开发犯低级错误怎么办?开发首先要规范好编码,出低级错时不要指责,内心指出错误。让他们自己进行测试,反思找出错误。2、你进行过哪些测试,擅长什么?我主要从事web测试,搭建环境,对程序进行集成测试、系统测试、回归测试。还有编写测试用例,使用手册,功能测试文档。单元测试:测试的最早期阶段,焦点在于被测软件的最小的组成部分。集成测试:确保最小单元被(部分)整合后能正常操作的测试执行阶段系统测试:当应用作为整体运行时的测试执行阶段(测试最终的应用)回归测试:修改了旧代码后,重新进行测试以确认修改操作没有引入新的错误或导致其他代码产生错误。验收测试:以用户为主,由用户参加设计测试用例,对程序的功能、性能,以及可移植性、兼容性、可维护性、错误的恢复功能等进行确认。主要运用黑盒测试的方法,对系统主要流程、重要功能进行有效性测试,验证所测试的软件是否满足需求规格说明书列出的要求3、开发说不是bug怎么办?将自己的见解告诉开发,不行就把见解和bug提交项目经理决定。4、你的职业规划?巩固基础测试知识,提高理解需求能力。学习自动化测试,并且运用。技术到位后学习带领测试团队。最后争取达到测试经理水平。5、什么测试用例才是合格?能覆盖到所有测试点6、缺陷测试报告组成?缺陷编号、缺陷标题、缺陷描述、缺陷优先程度、缺陷所属模块、缺陷所属版本、缺陷所属开发人员、 输入数据、输出结果、缺陷分析等。C/S模式
  • 【DB笔试面试694】在Oracle中,什么是oratop工具?
    ♣ 题目 部分在Oracle中,什么是oratop工具? ♣ 答案部分 oratop是Oracle提供的一款轻量级实时监控工具,oratop的最大特点是支持实时轻量级监控。在Oracle 12c的EM Express之前,OEM还是一个重体积的组件。相比之下,oratop完全适合那些想使用数据库实时监控功能,但是又不愿意启动OEM的用户需要。从功能上看,oratop主要的特点有:监控当前的数据库活动;监控数据库性能;识别当前阻塞会话和瓶颈会话。oratop是一个典型的“绿色”软件,不需要安装,只需要给一个运行目录即可。需要注意的是,oratop需要以oracle用户运行,且需要配置环境变量,主要是配置LD_LIBRARY_PATH路径。oratop的运行命令如下所示:1./oratop -i 10 / as sysdba2./oratop -i 10 username/password@tns_alias参数-i表示数据刷新间隔,也就是多长实际更新一下页面数据信息。“/ as sysdba”表示登录本机连接,也可以远程使用oratop连接到其它服务器上去。运行命令后,等待一会就会出现字符界面显示: 1Oracle 11g - orc 16:42:29 up: 5.4h, 1 ins, 0 sn, 0 us, 1.4G mt, 0.4% db 2ID %CPU LOAD %DCU
  • 学生第一次学习排序算法时应该先教什么? [关闭](What should students be taught first when first learning sorting algorithms? [closed])
    问题 就目前而言,这个问题不适合我们的问答形式。 我们希望答案得到事实、参考或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。 如果您认为此问题可以改进并可能重新打开,请访问帮助中心以获取指导。 8 年前关闭。 如果你是一名编程老师,你必须选择一种排序算法来教你的学生,你会选择哪一种? 我只要求一个,因为我只想介绍排序的概念。 应该是冒泡排序还是选择排序? 我注意到这两个是最常教授的。 是否有另一种类型的排序可以更容易理解的方式解释排序? 回答1 我不确定我是否可以成为一名计算机科学老师并且只教一种排序算法。 至少应该教学生至少一种主要排序类型,即交换排序、选择排序、插入排序和归并排序。 除了这些类型中的每一种之外,我还将介绍属于分区排序标题的快速排序。 至于我将涵盖的每种类型的特定种类: 冒泡排序作为交换排序类别的一个例子,因为它是最简单的排序类型之一,而且他们可能已经看过或偶然发现了。 如果他们必须为一些简单的事情自己动手,那么这也是他们最有可能最常使用的类型,因此他们理解它是有意义的。 来自选择排序类别的堆排序。 这可能是 Quicksort 旁边最令人困惑的排序,但是一旦他们了解了它如何设置他们以理解 Quicksort 算法。 将介绍插入排序作为插入排序类别的一个示例,因为它也是一种简单的排序,它们可以得到很多使用。
  • JVM为什么需要预热?(Why does the JVM require warmup?)
    问题 我了解在Java虚拟机(JVM)中,由于Java使用惰性加载过程加载类,因此可能需要进行预热,因此您要确保在启动主事务之前初始化对象。 我是C ++开发人员,不必处理类似的要求。 但是,我无法理解的部分如下: 您应该预热代码的哪一部分? 即使我对代码的某些部分进行了预热,它也会保持多长时间(假设此术语仅意味着您的类对象在内存中保留了多长时间)? 如果每次收到事件都需要创建对象时,它有什么帮助? 考虑一个示例,该应用程序希望通过套接字接收消息,并且交易可以是“新订单”,“修改订单”和“取消订单”或已确认交易。 请注意,该应用程序是关于高频交易(HFT)的,因此性能至关重要。 回答1 您应该预热代码的哪一部分? 通常,您无需执行任何操作。 但是,对于低延迟的应用程序,应预热系统中的关键路径。 您应该有单元测试,所以我建议您在启动时运行它们以预热代码。 即使在代码预热后,也必须确保CPU缓存也保持预热。 在进行阻塞操作(例如,网络IO)长达50微秒后,您会发现性能显着下降。 通常这不是问题,但是如果您大部分时间都试图保持在50微秒以下,那么大多数情况下就会出现问题。 注意:预热可以使Escape Analysis插入并在堆栈中放置一些对象。 这意味着不需要优化这些对象。 最好在优化代码之前先对应用程序进行内存分析。 即使我对代码的某些部分进行了预热,它也会保持多长时间
  • 【DB笔试面试694】在Oracle中,什么是oratop工具?
    ♣ 题目 部分在Oracle中,什么是oratop工具? ♣ 答案部分 oratop是Oracle提供的一款轻量级实时监控工具,oratop的最大特点是支持实时轻量级监控。在Oracle 12c的EM Express之前,OEM还是一个重体积的组件。相比之下,oratop完全适合那些想使用数据库实时监控功能,但是又不愿意启动OEM的用户需要。从功能上看,oratop主要的特点有:监控当前的数据库活动;监控数据库性能;识别当前阻塞会话和瓶颈会话。oratop是一个典型的“绿色”软件,不需要安装,只需要给一个运行目录即可。需要注意的是,oratop需要以oracle用户运行,且需要配置环境变量,主要是配置LD_LIBRARY_PATH路径。oratop的运行命令如下所示:1./oratop -i 10 / as sysdba 2./oratop -i 10 username/password@tns_alias 参数-i表示数据刷新间隔,也就是多长实际更新一下页面数据信息。“/ as sysdba”表示登录本机连接,也可以远程使用oratop连接到其它服务器上去。运行命令后,等待一会就会出现字符界面显示: 1Oracle 11g - orc 16:42:29 up: 5.4h, 1 ins, 0 sn, 0 us, 1.4G mt, 0.4% db 2ID %CPU LOAD %DCU
  • 【DB笔试面试694】在Oracle中,什么是oratop工具?
    ♣ 题目 部分在Oracle中,什么是oratop工具? ♣ 答案部分 oratop是Oracle提供的一款轻量级实时监控工具,oratop的最大特点是支持实时轻量级监控。在Oracle 12c的EM Express之前,OEM还是一个重体积的组件。相比之下,oratop完全适合那些想使用数据库实时监控功能,但是又不愿意启动OEM的用户需要。从功能上看,oratop主要的特点有:监控当前的数据库活动;监控数据库性能;识别当前阻塞会话和瓶颈会话。oratop是一个典型的“绿色”软件,不需要安装,只需要给一个运行目录即可。需要注意的是,oratop需要以oracle用户运行,且需要配置环境变量,主要是配置LD_LIBRARY_PATH路径。oratop的运行命令如下所示:1./oratop -i 10 / as sysdba 2./oratop -i 10 username/password@tns_alias 参数-i表示数据刷新间隔,也就是多长实际更新一下页面数据信息。“/ as sysdba”表示登录本机连接,也可以远程使用oratop连接到其它服务器上去。运行命令后,等待一会就会出现字符界面显示: 1Oracle 11g - orc 16:42:29 up: 5.4h, 1 ins, 0 sn, 0 us, 1.4G mt, 0.4% db 2ID %CPU LOAD %DCU
  • 衡量MPI通信成本的工具(Tools to measure MPI communication costs [closed])
    问题 从目前的情况来看,这个问题不适合我们的问答形式。 我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。 如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我正在使用MPI,我想衡量通信成本,以便可以将它们与“处理”成本进行比较,例如,我需要多少时间才能将列表分散到n个流程中,然后再与之比较时间我需要对其进行排序。 有人知道有什么工具可以衡量这种通信成本吗? (例如散点图) 是否有什么方法可以衡量MPI通信成本,例如可以使用PAPI来分析代码性能? 提前致谢! 回答1 是的,有很多这样的工具。 MPI定义了一个工具接口,该接口允许其他库在您的MPI函数调用中插入自身,并进行计数,计时等。 一个非常小的MPI分析工具是mpiP-它在您的代码中提供了一个很简短的MPI活动摘要。 IPM库非常易于构建,并为您提供了大量的MPI计数和时间,因此提供了一个不错的HTML文件。 您提到了PAPI; IPM还将集成PAPI计数器(如果有)。 我们在我们的中心定期使用此功能,我认为这可以满足您的需求。 如果您已经使用MPI动态库构建了程序,则甚至无需重新编译即可使用它(mpiP具有相同的属性)。 MPICH2随附但可以用任何MPI构建的Jumpshot实际上在时间轴上显示了每个MPI操作花费了多长时间。
  • 单元测试值得吗? [关闭](Is Unit Testing worth the effort? [closed])
    问题 从目前的情况来看,这个问题不适合我们的问答形式。 我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。 如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 9年前关闭。 已锁定。 该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。 它目前不接受新的答案或互动。 我正在努力将单元测试集成到我所工作的团队的开发过程中,并且有些怀疑论者。 有什么好的方法可以使怀疑的开发人员相信团队中单元测试的价值? 在我的特定情况下,我们将在添加功能或修复错误时添加单元测试。 不幸的是,我们的代码库无法使其易于测试。 回答1 每天在我们办公室里都有这样的交流活动: “伙计,我只是喜欢单元测试,我已经能够对某些工作方式进行大量更改,然后能够通过再次对它进行测试来确认我没有破坏任何东西……” 细节每天都在变化,但是情绪却没有变化。 单元测试和测试驱动的开发(TDD)具有许多隐藏的和个人的好处,以及显而易见的好处,您只是在他们自己做之前就无法真正向他人解释。 但是,忽略这一点,这是我的尝试! 单元测试使您可以快速地对代码进行重大更改。 您知道它现在可以正常运行,因为您已经运行了测试,在进行需要进行的更改时,需要使测试重新运行。 这样可以节省时间。 TDD可帮助您了解何时停止编码。 通过测试,您可以确信自己已经做了足够的工作
  • 如何使用linux`perf`工具生成“ CPU外”配置文件(How to use linux `perf` tool to generate “Off-CPU” profile)
    问题 Brendan D. Gregg(DTrace书的作者)有一个有趣的配置文件变体:“ Off-CPU”配置文件(和Off-CPU Flame Graph;幻灯片2013,第112-137页),查看线程或应用程序被阻塞的位置(是不是由CPU执行,而是由于CPU资源不足而等待I / O,页面错误处理程序或调度的): 这段时间揭示了在关闭CPU时哪些代码路径被阻塞并等待,以及确切地等待了多长时间。 这与传统的分析不同,传统的分析通常以给定的时间间隔对线程的活动进行采样,并且(通常)仅在线程正在CPU上执行工作时才检查线程。 他还可以将CPU外配置文件数据和CPU上配置文件组合在一起:http://www.brendangregg.com/FlameGraphs/hotcoldflamegraphs.html Gregg给出的示例是使用dtrace ,它在Linux OS中通常不可用。 但是有一些类似的工具(ktap,systemtap,perf)和perf因为我认为它们的安装范围最广。 通常, perf生成CPU上的配置文件(这些功能在CPU上执行得更多)。 我怎样才能格雷格关闭CPU的例子翻译成perf在Linux的分析工具? PS:LISA13,p124中的幻灯片中有指向CPU脱机火焰图的systemtap变体的链接:“张宜春创建了这些
  • 您最喜欢的分析工具是什么(针对C ++)?(What's your favorite profiling tool (for C++) [closed])
    问题 从目前的情况来看,这个问题不适合我们的问答形式。 我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。 如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 到目前为止,我只使用过Rational Quantify。 我听说过有关英特尔VTune的很棒的事情,但是从未尝试过! 编辑:我主要是在寻找可以检测代码的软件,因为我猜这是获得非常好的结果的唯一方法。 也可以看看: Windows上本机C ++有哪些好的分析器? 回答1 对于linux开发(尽管其中一些工具可能在其他平台上也可以使用)。 这是我所知道的两个大品牌,还有很多其他较小的品牌已经有一段时间没有看到积极的发展了。 瓦尔格朗德 TAU-调整和分析实用程序 回答2 对于Linux:Google Perftools 比valgrind更快(但还不那么细) 不需要代码检测精美的图形输出(-> kcachegrind) 是否进行内存分析,CPU分析,泄漏检查 回答3 恕我直言,使用调试器采样是最好的方法。 您只需要一个IDE或调试器即可停止程序。 在安装探查器之前,它就解决了性能问题。 回答4 我对C ++代码进行性能分析的唯一经验是使用AutomatedQA(现为SmartBear Software)的AQTime。
  • 在Xcode外部对Mac应用程序进行数字签名失败(Failure digitally signing a Mac app outside Xcode)
    问题 我使用Qt5开发了Mac应用程序,因此在Xcode之外。 我希望GateKeeper允许我的应用程序在客户端计算机上运行,​​而不是发出“由于无法确认开发者的身份而无法打开”警告。 我已经成功地对该应用程序进行了数字签名,但GateKeeper仍然带有此投诉。 我有一份Apple开发人员证书(我是Team Agent),我的钥匙串说它是有效的。 我还安装了两个Apple根证书。 我使用命令行实用程序codesign对应用文件夹中的所有二进制文件进行数字签名,此外,我还对应用文件夹本身进行了数字签名。 在所有情况下,codesign的响应都是有用的,并且不显示任何错误。 使用codesign,我可以检查所有二进制文件是否均已签名,是否正在运行 $ codesign --verify --deep --verbose=2 MyApp.app 显示所有二进制文件均已验证。 此外,它报告: MyApp.app:在磁盘上有效 MyApp.app:满足其指定要求 跑步: $ codesign -v --verbose=4 --display MyApp.app 给 可执行文件= / Users / xxx / trunk / yyy / deploy / release / MyApp.app / Contents / MacOS / MyApp 标识符= aaaa.MyApp 格式
  • Stack Overflow:我们是如何做监控的
    作者 | Nick Craver译者 | 谢丽Stack Overflow 团队的年度监控总结,全面且详细什么是监控?我认为,对不同的人,这意味着不同的东西。但是,对于这个概念,我们或多或少有一些一致的看法。当有人说监控时,我会想到:但显然,有些人会想到别的事情。这些人显然是错的,让我们继续。当我读了某个白痴写的一篇 10000 字的博文后,我就不再那么迟钝了。我把监控看作是一个注视你的东西的过程,就像一个保安坐在某处一张堆满摄像机的桌子前一样。有时他们会睡着——这是监控系统宕机。有时他们会因为甜甜圈送到而分心——这是升级停机。有时摄像机在循环播放——看着那个画面,我不知道去哪里,但是可能有人在偷你的东西。还有,你有火警警报器。你不需要人来触发它。同样的道理,当门被打开的时候,那可能连接到警报器上了。也许没有。或者,警报器 1984 年就坏了。我知道你是怎么想的。我的观点是,监控任何应用程序与监控其他任何东西没有太大区别。有些事情你可以自动化。有些事情你做不到。有些东西可以根据阈值告警。有时你会弄错这些阈值(尤其是在节假日)。有时,进一步的自动化设置不太值得,你只是需要使人更容易看明白。这里我要讨论的是我们所做的事情。每个人的情况都不一样。什么是重要的,什么是“值得的”,对每个人来说都不相同。就像生活中的其他事情一样,需要权衡取舍做出许多决定。以下是我们到目前为止所做的决定
  • 如何比较两个(或多个)MSI文件的内容?(How can I compare the content of two (or more) MSI files?)
    问题 我该如何对两个(或多个) MSI文件进行“内容比较”,并查看文件中的实际区别-而不是进行无用的二进制比较? (这显然只会告诉我是否要处理同一文件的副本)。 一些相关的典型问题场景: 我们的构建系统疯狂地吐出了MSI文件,有时我们需要弄清楚不同MSI文件之间存在什么区别(阅读:有所更改,现在部署失败)。 我们从不同位置的同一源编译了MSI文件,其中一些文件无法运行报告System.BadImageFormatException-我们如何调试MSI文件中的差异? (在这里专门针对此错误的答案:应用程序是否依赖于编译该错误的环境?)。 MSI文件可以使用各种工具进行编译,但是对于stackoverflow用户而言,此类文件可能最常使用WiX或Visual Studio Installer项目(免费工具包)创建。 这是一个Q / A风格的问题,主题是比较已编译的MSI文件以确定存在哪些真正的“内容差异”。 回答1 Microsoft Orca :如果已安装Visual Studio,请尝试在“ Program Files (x86)下搜索Orca-x86_en-us.msi ,然后进行安装。 然后在开始菜单中找到Orca。 当前路径: C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x86 适当更改版本号 About
  • 怎样快速分析出CPU瓶颈原因?
    工作中你们是否也碰到了一个我曾有过的困惑: CPU 的性能指标那么多,CPU 性能分析工具也是一抓一大把,在实际的工作场景,我又该观察什么指标、选择哪个性能工具呢?接下来咱们说说在不同场景下,指标工具怎么选,性能瓶颈怎么找。 CPU 性能指标 接下来我们想象CPU 的性能指标都有哪些? 首先最容易想到的应该是 CPU 使用率,这也是实际环境中最常见的一个性能指标。 CPU 使用率描述了非空闲时间占总 CPU 时间的百分比,根据 CPU 上运行任务的不同,又被分为用户 CPU、系统 CPU、等待 I/O CPU、软中断和硬中断等。 用户 CPU 使用率,包括用户态 CPU 使用率(user)和低优先级用户态 CPU 使用率(nice),表示 CPU 在用户态运行的时间百分比。用户 CPU 使用率高,通常说明有应用程序比较繁忙。 系统 CPU 使用率,表示 CPU 在内核态运行的时间百分比(不包括中断)。系统 CPU 使用率高,说明内核比较繁忙。 等待 I/O 的 CPU 使用率,通常也称为 iowait,表示等待 I/O 的时间百分比。iowait 高,通常说明系统与硬件设备的 I/O 交互时间比较长。 软中断和硬中断的 CPU 使用率,分别表示内核调用软中断处理程序、硬中断处理程序的时间百分比。它们的使用率高,通常说明系统发生了大量的中断。 除了上面这些
  • Linux 如何迅速分析定位CPU性能瓶颈
    CPU的性能指标那么多,CPU性能分析工具也是一抓一大把,换成实际的工作场景,我又该观察什么指标、选择哪个性能工具呢? 不要担心,今天我就以多年的性能优化经验,给你总结出一个"又快又准"的瓶颈定位套路,告诉你在不同场景下,指标工具怎么选,性能瓶颈怎么找。 CPU性能指标 描述 CPU的性能指标都有哪些 ? 首先,最容易想到的应该是CPU 使用率,这也是实际环境中最常见的一个性能指标。CPU使用率描述了非空闲时间占总CPU时间的百分比,根据CPU上运行任务的不同,又被分为用户CPU、系统 CPU、等待 I/O CPU、软中断和硬中断等。 ● 用户CPU 使用率,包括用户态 CPU使用率(user)和低优先级用户态 CPU使用率(nice),表示CPU在用户态运行的时间百分比。用户CPU使用率高,通常说明有应用程序比较繁忙。 ● 系统CPU使用率,表示CPU在内核态运行的时间百分比(不包括中断)。系统CPU 使用率高,说明内核比较繁忙。 ● 等待I/O的CPU使用率,通常也称为 iowait,表示等待I/O的时间百分比。iowait高,通常说明系统与硬件设备的I/O 交互时间比较长。 ● 软中断和硬中断的CPU使用率,分别表示内核调用软中断处理程序、硬中断处理程序的时间百分比。它们的使用率高,通常说明系统发生了大量的中断。 ● 除了上面这些,还有在虚拟化环境中会用到的窃取CPU使用率
  • 可以使用分析器,但是为什么不停止该程序呢? [关闭](One could use a profiler, but why not just halt the program? [closed])
    问题 在这里很难说出要问什么。 这个问题是模棱两可,含糊,不完整,过于宽泛或夸张的,因此不能以目前的形式合理地回答。 如需帮助澄清此问题以便可以重新打开,请访问帮助中心。 8年前关闭。 如果某件事使单线程程序花费的时间比原来要长10倍,则可以在其上运行探查器。 您也可以使用“暂停”按钮将其暂停,然后您会确切地看到它在做什么。 即使它比原本的速度慢了10%,但是如果您将其暂停多次,不久之后您就会看到它反复做不必要的事情。 通常,问题是真正不需要的函数调用位于堆栈中间的某个位置。 这不能解决问题,但是可以找到问题。 编辑:异议大多假设您仅抽取1个样本。 如果您是认真的人,请使用10。任何导致浪费百分比的代码行,例如40%,平均都会出现在堆栈上。 瓶颈(在单线程代码中)无法隐藏。 编辑:为了表明我的意思,许多异议的形式是“样本不足,所以您看到的可能完全是虚假的”-关于机会的含糊想法。 但是,如果某种可识别的描述(而不只是在例程中或在例程中处于活动状态)在30%的时间内有效,则在任何给定样本上看到该概率的可能性为30%。 然后假设仅抽取10个样本。 该问题在10个样本中将被发现为二项式分布的次数是0,因此被发现0次的概率为.028。 看到它1次的可能性是.121。 对于2倍,该概率为.233,对于3倍,该概率为.267,此后下降。 由于看到它的次数少于两次的概率为0.028 + .121
  • 您使用什么工具进行静态代码分析? [关闭](What tools do you use for static code analysis? [closed])
    问题 关闭。 这个问题是基于意见的。 它目前不接受答案。 想改善这个问题吗? 更新问题,以便通过编辑这篇文章用事实和引文来回答问题。 6年前关闭。 改进这个问题 这个关于Cyclomatic Complexity的问题让我对静态代码分析有了更多的思考。 分析代码复杂性和一致性有时很有用,我想开始做更多的事情。 您推荐哪些工具(每种语言)进行此类分析? 维基百科有很多工具,但人们以前尝试过哪些工具? 编辑:正如大卫所指出的,当涉及到基于 C/UNIX 的工具时,这并不是一个完全没有问过的问题。 回答1 我一直在为我的 Objective-C iPhone 项目(iOS 应用程序)设置 Hudson 持续集成 (CI) 构建系统,并编译了一系列可用于在构建期间分析我的项目的工具: Clang 静态分析器:免费、最新的独立工具,比 Xcode 4 中包含的 Clang 版本捕获更多的问题。活动项目。 -- 访问 http://clang-analyzer.llvm.org Doxygen :免费的文档生成工具,也生成类依赖关系图。 活动项目——访问 http://www.doxygen.nl HFCCA (无头环复杂度分析器):免费的 Python 脚本来计算代码复杂度,但没有头文件和预处理器。 支持 Hudson/Jenkins 构建的 XML 格式输出。 活跃的项目。 -- 访问
  • 如何测量AngularJS应用的摘要周期的性能?(How Do I Measure the Performance of my AngularJS app's digest Cycle?)
    问题 测量angularjs摘要循环持续时间的简单方法是什么? 有多种方法可以分析摘要循环的性能,但是每种方法都有其自己的pitfal: Chrome事件探查器:太多的细节,无法以一种易于发现的方式破坏摘要周期 Batarang(AngularJS浏览器插件):过多的开销,刷新速度慢,大型应用程序会爆炸。 ...一定有更好的方法吗!! 1? 回答1 这是一个秘密。 在chrome开发工具中,运行cpu配置文件。 停止捕获后,在屏幕底部的“重(自下而上)”旁边是一个向下的三角形。 单击三角形,然后选择“火焰图”。 进入“火焰图”模式后,您可以缩放和平移以查看摘要循环,花费多长时间以及确切地调用了哪些功能。 火焰图对于跟踪页面加载问题,ng-repeat性能问题,摘要循环问题非常有用! 我真的不知道如何在Flame Chart之前进行调试和配置。 这是一个例子: 回答2 以下答案将告诉您$ digest循环的空闲性能,即,当您的watch表达式均未更改时的摘要性能。 如果即使视图未更改,您的应用程序似乎也很慢,这将很有用。 对于更复杂的情况,请参见aet的答案。 在控制台中输入以下内容: angular.element(document).injector().invoke(function($rootScope) { var a = performance.now();