matlab关键路径代码_如何识别关键代码路径

matlab关键路径代码

在回答“如何识别关键代码路径?”问题之前 让我回答另一个相关的问题:“为什么要标识关键代码路径?”

有两个答案:

  1. 性能优化
  2. 准确的烟雾测试

性能优化

在大多数应用程序中,我们已经观察到少于5%的应用程序代码占90%以上的代码执行。 因此,如果您可以优化这5%的代码,则可以显着提高整个应用程序的性能。 这是最好的投资回报率。 您可以节省大量时间而不分析其余95%的代码。

准确的测试套件

您可以编写针对性强的单元测试,以练习关键的代码路径并使您的应用程序防弹。 实际上,这些测试可以充当应用程序的冒烟测试。 它可以集成到您的CI / CD管道中。 这种准确的测试套件可减少总体测试执行时间 。 它还可以减少后端系统中的测试数据设置时间。

现在让我们回到最初的问题:如何确定关键代码路径? 这是线程转储派上用场的地方。

线程转储

线程转储是给定时刻应用程序中正在运行的所有线程的快照。 它包含有关每个线程的详细信息,包括其堆栈跟踪。 以下是在线程转储中为“ InvoiceGeneratedQC-A99-6”线程提供的信息。

《matlab关键路径代码_如何识别关键代码路径》

图1:线程的堆栈跟踪

上述堆栈跟踪告诉您“ InvoiceGeneratedQC-A99-6”线程的代码执行路径。 该线程已按顺序(1 – 9)执行了9种方法,如图1所示。

线程首先执行java.lang.Thread.run()方法,然后继续执行java.util.concurrent.ThreadPoolExecutor $ Worker.run()方法,然后继续执行其他方法,直到com.buggycompany.rt .util.ItinerarySegmentProcessor.setConnectingFlight()。

如果多个线程执行相同的代码执行路径,则该代码路径将成为您的关键路径 。 您可以将所有线程的堆栈跟踪分组,将它们组合在一起形成一个单一的调用堆栈树,然后您就可以确定关键的代码执行路径。

调用堆栈树

诸如fastthread.io之类的工具可以将所有线程的堆栈跟踪分组,并生成一个调用堆栈树。 您可以在此树上下钻并向上浏览以查看关键代码路径。 以下是“ fastThread.io”生成的示例调用堆栈树。 欢迎您到这里查看实时报告中调用堆栈树

《matlab关键路径代码_如何识别关键代码路径》

图2:调用栈树

您可以继续向下钻取以查看代码执行路径。 图3在“呼叫堆栈树”图中显示了特定分支的深入版本。

《matlab关键路径代码_如何识别关键代码路径》

图3:深入的调用堆栈树

调用堆栈树向您显示已执行的代码的类名称,方法名称和行以及已执行该代码行的多个线程。

《matlab关键路径代码_如何识别关键代码路径》

图4:来自调用堆栈树的单个元素

从“调用堆栈树”中的上述元素,可以确定buggyCompanyCallable.java中的call()方法由9个线程执行。 由于有9个线程正在执行此方法,因此可以将其归类为关键代码路径。

请注意,调用堆栈树将包含Java,外部框架和库中的代码,因为您的应用程序也会执行这些代码。 在编写重点测试或优化关键代码路径的性能时,您可以忽略该外部代码或将其设置为低优先级,因为您对其的控制极少。

在测试环境中镜像生产流量非常困难(如果不是不可能的话)。 当您需要确定生产中的关键代码执行路径时,理想的是从生产环境而不是测试或其他较低级的环境中捕获线程转储。

在高峰时间段捕获线程转储是理想的。 在这里您可以观察到应用程序代码练习的最大可能性。

由于线程转储是特定时间点的快照,因此理想的是捕获至少3-5个线程转储,以查看一些代码执行路径的可能性。 有多个捕获线程转储的选项。

使用您最喜欢的选项捕获线程转储。

翻译自: https://jaxenter.com/identify-critical-code-path-150940.html

matlab关键路径代码

    原文作者:diluan6799
    原文地址: https://blog.csdn.net/diluan6799/article/details/107261420
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞