`
wj_126mail
  • 浏览: 130147 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java profile

 
阅读更多
以前做过profile,但是从来没有仔细研究过,最近在一次调优之中,对performance有了很深的认识。详细来研究一下。对于java的profile,可以分为简单的profile和run time的profile。

1.简单的profile:

可以制定目标,看看程序到底慢在哪里。一般不会涉及到程序逻辑的调优与架构的更改。目的就是在真实的应用deploy的时候,对jvm参数进行调优。这里主要可以调的就是gc,使用那个gc算法,以及对gc算法进行具体的优化。对于server端的程序而言,一般都是需要高吞吐率,这样一般都会使用并行gc,在这里需要限制gc线程个数,因为默认的话,会启动n-1个线程,这样可能造成竞争与资源浪费。具体调成几个,需要根据应用以及硬件环境来看。第二个需要调heap的大小,这个一般调调就可以了,比较重要的是,根据per request的机制,或者应用的场景,需要对young generation或者old generation进行调优,一般来讲我们都不希望发生full gc,或者出现young generation分配不了,而频繁的进行PSYoung,我发现这个时候,基本上就会lock住相应的heap part,而应用基本上处于停止状态。对于young generation停止的状况,需要对young的初始大小进行优化,观察应用,适当的调整-XX:NewSize,使得初始值足够使用,这样就不会发生停顿现象。

2.run time profile

这里主要针对程序速度慢来说的,也就是response time。主要原理就是找hot spot,哪里是hot spot就改哪里。也比较有可能的是1.有lock contention导致cpu利用率居高不下,这是可以考虑lock free,或者缩短lock的时间。2.大量临时对象,导致剧烈的gc。这个可能需要看去调gc,或者可以使用对象池之类的技术。

实际上java的profile是基于agent的,参考:

http://java.sun.com/developer/technicalArticles/Programming/HPROF.html

可以针对cpu, heap, monitor进行profile。
java -Xrunhprof:help

Option Name and Value  Description                    Default
---------------------  -----------                    -------
heap=dump|sites|all    heap profiling                 all
cpu=samples|times|old  CPU usage                      off
monitor=y|n            monitor contention             n
format=a|b             text(txt) or binary output     a
file=<file>            write data to file             java.hprof[{.txt}]
net=<host>:<port>      send data over a socket        off
depth=<size>           stack trace depth              4
interval=<ms>          sample interval in ms          10
cutoff=<value>         output cutoff point            0.0001
lineno=y|n             line number in traces?         y
thread=y|n             thread in traces?              n
doe=y|n                dump on exit?                  y
msa=y|n                Solaris micro state accounting n
force=y|n              force output to <file>         y
verbose=y|n            print messages about dumps     y

Obsolete Options
----------------
gc_okay=y|n

Examples
--------
  - Get sample cpu information every 20 millisec, with a stack depth of 3:
      java -agentlib:hprof=cpu=samples,interval=20,depth=3 classname
  - Get heap usage information based on the allocation sites:
      java -agentlib:hprof=heap=sites classname

Notes
-----
  - The option format=b cannot be used with monitor=y.
  - The option format=b cannot be used with cpu=old|times.
  - Use of the -Xrunhprof interface can still be used, e.g.
       java -Xrunhprof:[help]|[<option>=<value>, ...]
    will behave exactly the same as:
       java -agentlib:hprof=[help]|[<option>=<value>, ...]

Warnings
--------
  - This is demonstration code for the JVMTI interface and use of BCI,
    it is not an official product or formal part of the JDK.
  - The -Xrunhprof interface will be removed in a future release.
  - The option format=b is considered experimental, this format may change
    in a future release.



看了之后,对profile有了一些认识:

1.cpu=samples,基本上主要用这个,他并不是你调用了多少次方法的samples,而是当前stack的active frame上进行查找的,所以说基本上这个在前面的,可以认为时间比较长。

2.具体的可以通过cpu=times来verify一下,看看到底是不是时间很长。

3.在查看是哪个对象分配了内存的时候,觉得通过heap=sites,thread=y很方便。

4.monitor=y可以看lock的竞争,ms只能看synchronized块,也就是monitor enter,而concurrent包中的Lock目前还不能。估计只能通过人肉了。

目前只研究到这么多。

转自:http://hi.baidu.com/jeffeyliu/blog/item/535ec3afd2b150edfaed5055.html
分享到:
评论

相关推荐

    yourkit java profile

    yourkit java profile,查看jvm的工具,图形化,功能强大

    profile_java

    ### 二、Profile Java 相关知识点 #### 1. Profile 在 Java 中的应用 在 Java 应用程序中,配置文件 (Profile) 是一种常见的用于存储应用程序设置和参数的文件。它们通常用于定义不同的环境配置(如开发、测试或...

    java @Profile注解详解

    Java @Profile注解详解 Java @Profile注解是Spring框架提供的一种根据当前环境动态激活和切换一系列组件的功能。通过使用@Profile注解,我们可以指定组件在哪个环境的情况下才能被注册到容器中,不指定,任何环境下...

    yourkit java profiler 2015 注册码

    yourkit java profiler 2015 注册码 实测可进行正常安装 服务器进程内存分析不可多得的工具

    YourKit Java Profiler 2017 破解版本

    YourKit Java Profiler 2017 破解版本,仅供学习交流,如需商用,请到官方网站下载正版软件

    SuperMap Objects Java 剖面分析

    iObjects Java提供ProfileService类来执行这个任务: ```java ProfileService profileService = new ProfileService(url); ProfileParameters params = new ProfileParameters(); params.setDataSourceName(layer....

    facebook rest api java简单实现

    这篇博客“facebook rest api java简单实现”可能详细讲解了如何在Java环境中设置和使用这些库来执行API请求。 首先,我们需要理解REST(Representational State Transfer)的基本概念,它是Web服务的一种设计风格...

    ubuntu 切换java版本profile文件

    `.profile`文件是Unix/Linux系统中的一个个人配置文件,它定义了用户的环境变量,包括PATH变量,这对于切换Java版本至关重要。这篇内容将详细介绍如何利用`.profile`文件在Ubuntu中切换Java版本。 首先,我们解压缩...

    基于Android的Java MIDP应用方案研究.pdf

    2. Java MIDP:Java MIDP(Mobile Information Device Profile)是一种Java Profile,用于开发移动设备上的应用程序。 3. J2ME(Java 2 Platform, Micro Edition):J2ME是一种Java平台,用于开发移动设备上的应用...

    104-5-11_JAVA環境變數設定.doc

    - 在StarUML中,为了能够处理Java文件,需要在“Model”菜单下的“Profiles”中插入“Java Profile”。 6. **反向工程与流程图生成**: - 在设计界面的空白处右键选择“JAVA” -&gt; “Reverse Engineer”,将Java源...

    JPA学习总结(二)--JPAOneToOne双向关联

    在Java世界中,Java Persistence API (JPA) 是一种用于管理关系数据库的对象关系映射(ORM)工具。本文主要探讨的是JPA中的`@OneToOne`注解,它用于建立两个实体之间的一对一关联关系。在实际开发中,这种关联关系...

    StarUML指导手册

    确保包含“JAVA Profile”,因为它定义了与Java语言相关的UML元素和约束。 6. **保存工程**: 为了防止意外丢失信息,应及时保存工程,通过“File”菜单的“Save”选项,选择合适的保存位置。 7. **创建图表**: ...

    startuml使用指导手册

    - 通过"Model/Profile..."菜单选择所需的Profile,比如"JAVA Profile",以确保遵循Java编程规范。 5. **保存工程** - 为了防止意外丢失信息,应尽早保存工程,通过"File/Save"选择保存位置。 6. **创建类图** -...

    StarUML使用说明_指导手册范本.doc

    Profile定义了工程的规则和约定,确保包含了“JAVA Profile”,以便符合Java编程规范。 **保存工程** 为了防止意外丢失工作,建议在开始建模前立即保存工程。在“File”菜单中选择“Save”,选择保存位置。 **创建...

    Star UML指导手册

    在“Model/Profile...”菜单中,应包含“JAVA Profile”,以保证与Java语言的兼容性。在保存工程时,为了避免意外丢失工作,建议用户经常使用“File/Save”功能保存进度。 在设计图表的过程中,用户可以从左侧的...

    j2me api 英文版

    - **Personal Java Profile (PJP)**:针对更复杂的设备,增加了更多的Java SE功能。 - **Connected Device Configuration (CDC)**:针对内存和处理能力更大的设备,支持更完整的Java SE API。 **4. MIDlet Suite** ...

    startUml Uml基础知识指导

    在StarUML中,通过“Model/Profile...”设置所需的Profile,如“JAVA Profile”,以便遵循Java编程语言的规范。 8. **工程管理**:在开始建模之前,需要创建新工程。在StarUML中,选择“Empty Project”作为初始...

    StarUML使用说明-指导手册.doc

    一定要包含"JAVA Profile"这一工程。 保存工程 立即就保存工程,这样在出现问题的时候,你就不会丧失信息。从“File”菜单,选择“Save”,并选择一个地方以保存工程。 创造图表 现在,开场真正创造图表,从默认...

Global site tag (gtag.js) - Google Analytics