`
小滔哥
  • 浏览: 58663 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

使用perf 分析优化java应用。

 
阅读更多

      Perf 是用来进行软件性能分析的工具。它随 Linux 内核代码一同发布和维护,由内核社区维护和发展。

这里推荐两篇介绍 perf 的文章

    英文原版的介绍

      https://perf.wiki.kernel.org/index.php/Tutorial

    中文的使用介绍

      http://www.ibm.com/developerworks/cn/linux/l-cn-perf1/index.html

      http://www.ibm.com/developerworks/cn/linux/l-cn-perf2/index.html

 

    以上的介绍,都是分析直接运行在操作系统层面的应用,对于 java 这类运行在虚拟机里的应用, perf 再强大也无能为力。不过幸运的是,我们团队的高人对 perf 打了 patch ,为了区别于perf, 我们 先称它为 tperf 吧,对 jdk 也打了 patch ,这样就能够使用 tperf 来分析 java 的应用了。下面介绍一下如果用 tPerf 分析 java 应用。

 

  • 1.       准备

要求 kernel 版本在 2.6.32 及以上, jdk taobao-jdk 6u32 及以上

  • 2.       运行实例

在运行 java 时,需要添加两个选项 -agentpath:/xxx/libjvmti_perf.so.0.0 -XX:+UseOprofile, agentpath 是修改后 perf 工具中 agent 库。

然后 sudo perf top 即可看到实时的分析结果数据。

gcbench 为例,运行结果如下。

-------------------------------------------------------------------------------

   PerfTop:    1083 irqs/sec  kernel: 8.8%  exact:  0.0% [1000Hz cycles],  (all, 16 CPUs)

-------------------------------------------------------------------------------

 

             samples  pcnt function                      DSO

             _______ _____ _____________________________ ______________________

 

             4102.00 38.1% LGCBench;Populate(ILNode;)V    hs-vm-3612-1 (deleted)

             3562.00 33.1% LGCBench;MakeTree(I)LNode;     hs-vm-3612-1 (deleted)

              880.00  8.2% PSMarkSweepDecorator::precomp libjvm.so

              716.00  6.7% instanceKlass::oop_adjust_poi libjvm.so

              487.00  4.5% instanceKlass::oop_follow_con libjvm.so

              208.00  1.9% intel_idle                    [kernel.kallsyms]

               182.00  1.7% PSMarkSweepDecorator::adjust_ libjvm.so

              161.00  1.5% MarkSweep::follow_stack()     libjvm.so

              119.00  1.1% PSMarkSweepDecorator::compact libjvm.so

               55.00  0.5% __GI_memmove                  /lib64/libc-2.5.so

               43.00  0.4% CardTableExtension::scavenge_ libjvm.so

               42.00  0.4% SpinPause                     libjvm.so

               31.00  0.3% _wordcopy_fwd_aligned         /lib64/libc-2.5.so

               27.00  0.3% clear_page_c                  [kernel.kallsyms]

               23.00  0.2% StealTask::do_it(GCTaskManage libjvm.so

通过结果我们可以看到,里面既有 java 方法,又有 c 的方法。排在前两位的就是 java 方法,这个 java 工程师比较喜欢了,可以从这里入手尝试去优化 java 应用。

 

  • 3.       讨论

       目前来看, tperf 可以帮助 java 工程师解决一些问题,但是 tperf 本身也存在一些问题,目前对 top 的支持较好,对 record 的支持还是存在问题的,我就用 record 搞挂过几次机器。期待后续我们团队大牛对 tperf 的改进吧。

分享到:
评论

相关推荐

    perf4j perf4j perf4j

    Perf4J是一款轻量级的Java性能度量和监控工具,主要设计用于提供应用程序的性能剖析和计时。这个工具允许开发者轻松地在代码中插入性能计时器,然后收集和报告这些...通过合理的使用,可以显著提高Java应用的运行效率。

    perf tools jre2

    标题“perf tools jre2”指的是使用perf性能分析工具针对Java运行环境(JRE)的第二个版本进行优化和调试的相关内容。perf是Linux系统中一个强大的性能分析工具,它可以用来剖析程序的性能瓶颈,帮助开发者优化代码...

    Perf4j整合Logback

    Perf4j的引入可以有效地帮助我们跟踪和优化应用程序的性能,特别是在大型系统中,对于定位性能瓶颈具有重要意义。 在Logback中整合Perf4j,主要涉及以下几个关键组件: 1. **Slf4...

    perf tools p0

    综上所述,"perf tools p0"是一个针对性能优化的工具集,可能包含了用于系统性能分析、数据库日志记录、Java运行环境、插件扩展、配置管理以及可能与Eclipse相关的组件。这些工具可以帮助开发者和系统管理员识别性能...

    perf tools jre1

    标题“perf tools jre1”和描述中的关键词“perf”暗示了这可能与Java...在实际使用中,配合Linux的perf工具,可以对Java应用程序进行硬件级别的性能分析,获取CPU、内存等资源的使用情况,从而提升软件的运行效率。

    perf tools p3

    "perf tools p3" 是一个专注于性能分析的工具集,主要应用于Linux系统,它提供了丰富的功能来帮助开发者和系统管理员深入理解程序...用户可以通过这个工具,深入理解Java应用程序的性能表现,优化代码,提升系统效率。

    perf4j性能监控1

    通过集成各种日志框架,如 Log4J 和 Commons Logging,Perf4J 可以将性能数据记录到日志文件中,以便后续分析和优化。 1. **Perf4J 概要** - Perf4J 主要用于衡量代码执行的效率,通过使用 `StopWatch` 对象来追踪...

    linux下查看java进程下线程占用cpu情况

    例如,`jps` 可以显示运行的Java应用程序的进程ID。 3. **`top` 命令**: - `top` 提供了一个实时的视图,显示了系统资源的使用情况,包括CPU和内存。通过`top`,你可以看到哪个Java进程占用了最多的CPU。 4. **`...

    perf:多实例&性能相关模块

    总的来说,"perf:多实例&性能相关模块"涵盖了Java开发中关于性能优化和多实例管理的重要知识点,涉及并发编程、内存管理、工具使用等多个层面,对于提升Java应用的性能和可扩展性具有重要意义。开发者需要深入了解...

    Emerald_Perf

    理解这些区域的工作原理和垃圾收集机制,如新生代、老年代、Minor GC和Full GC,是优化Java应用的基础。 2. **垃圾收集器**:Java提供了多种垃圾收集器,如Serial、Parallel、CMS(Concurrent Mark Sweep)和G1...

    内存优化传家 内存优化传家

    使用性能分析工具(如gprof、perf等)监控内存使用情况,找出内存瓶颈,优化程序设计。 十、编程实践建议 1. 尽量减少全局变量和大对象的使用,避免长时间占用内存。 2. 及时释放不再使用的内存,避免内存泄漏。 3....

    jmh-perf-tests:各种JMH性能测试

    《JMH性能测试详解:深度探索Hibernate项目的微基准实验》 在Java开发领域,性能测试是确保代码高效...通过深入理解JMH和其在Hibernate项目中的应用,我们可以更好地提升Java应用的运行效率,从而提高整体系统的性能。

    WAS_Perf_Tunning_sw5561show.pdf

    - **应用场景**:适用于快速识别瓶颈和优化系统配置。 - **示例**:使用性能顾问分析日志文件,获取具体的调优建议。 ### 总结 通过以上分析,我们可以看出"WAS_Perf_Tunning_sw5561show.pdf"是一份专注于IBM ...

    WebSphere CPU高分析工具

    WebSphere是IBM提供的一个企业级Java应用服务器,用于运行和管理Java应用程序和服务。当WAS的CPU使用率持续高位时,可能会影响系统的稳定性和效率,因此需要进行深入分析找出问题根源。 描述中提到的“WAS CPU高...

    JAVA的字符串拼接[参照].pdf

    本文主要探讨了在Java中几种不同的字符串拼接方法的性能差异,包括使用操作符`+`、`String.concat()`、`StringBuffer.append()`和`StringBuilder.append()`。以下是对这些方法的详细分析: 1. **字符串拼接操作符 ...

    sonar-runner-dist-2.4

    根据提供的文件信息,以下是从标题、描述、标签以及部分内容中提取和整理的相关知识点: ### 关于sonar-runner-dist-2.4 ...以上工具各有特色,可以根据具体需求选择合适的工具来进行 Java 应用程序的性能分析和优化。

    指导演练,了解Java web服务的性能方面.zip

    在本指导演练中,我们将深入探讨Java Web服务的性能方面,旨在帮助开发者和运维人员优化他们的应用程序,提高系统效率和响应速度。Java Web服务通常基于Servlet、JSP、Spring MVC等框架,它们在处理HTTP请求、数据...

    perf_exp:使用不同机制从多个来源获取数据的实验

    8. **垃圾收集分析**: Java的自动内存管理依赖于垃圾收集器,分析其行为对优化内存使用和减少延迟至关重要。 9. **代码覆盖率工具**: 为了确保性能测试覆盖了所有关键路径,开发者可能会使用JaCoCo或Cobertura等...

Global site tag (gtag.js) - Google Analytics