首页 > 编程语言 >Java应用调优

Java应用调优

时间:2023-04-12 23:44:56浏览次数:33  
标签:HotSpotAgent java jvm sun 0.00 53f0 调优 应用 Java

针对 Java 应用,性能诊断工具主要分为两层:OS 层面Java 应用层面(包括应用代码诊断和 GC 诊断);

1. OS诊断(关注CPU、内存和IO三方面):

  • Load Average top命令

    • 按照经验,若数值小于 0.7*CPU 个数,则系统工作正常;若超过这个值,甚至达到 CPU 核数的四五倍,则系统的负载就明显偏高;
      • CPU 使用率 top命令
      • 上下文切换次数(Context Switch) vmstat
      • 内存 free -m
      • IO(磁盘 iostat / 网络 )
        image

2. Java应用:

  • jstack + top -Hp pid (看运行时间较长的java线程)

  • GC诊断 jstat jmap

    printf "%x\n" 21488 ==> 53f0
    
    [xdpp@cdh6-slave4 ~]$ jstack -l 53f0
    Attaching to remote server 53f0, please wait...
    Error attaching to remote server: java.rmi.UnknownHostException: Unknown host: 53f0; nested exception is:
    	java.net.UnknownHostException: 53f0
    sun.jvm.hotspot.debugger.DebuggerException: java.rmi.UnknownHostException: Unknown host: 53f0; nested exception is:
    	java.net.UnknownHostException: 53f0
    	at sun.jvm.hotspot.RMIHelper.lookup(RMIHelper.java:115)
    	at sun.jvm.hotspot.HotSpotAgent.connectRemoteDebugger(HotSpotAgent.java:517)
    	at sun.jvm.hotspot.HotSpotAgent.setupDebugger(HotSpotAgent.java:374)
    	at sun.jvm.hotspot.HotSpotAgent.go(HotSpotAgent.java:304)
    	at sun.jvm.hotspot.HotSpotAgent.attach(HotSpotAgent.java:183)
    	at sun.jvm.hotspot.tools.Tool.start(Tool.java:196
    
    jstat –gcxxx -t pid    # 打印 GC 详细信息
    [xd@cdh6-slave4 ~]$ jstat -gcutil -t 21488 4000
    Timestamp         S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
          1125664.7   0.00   3.82  29.87   0.00  94.03  91.20      3    0.265     2    0.204    0.469
          1125668.7   0.00   3.82  29.87   0.00  94.03  91.20      3    0.265     2    0.204    0.469
          1125672.7   0.00   3.82  29.87   0.00  94.03  91.20      3    0.265     2    0.204    0.469
          1125676.8   0.00   3.82  29.87   0.00  94.03  91.20      3    0.265     2    0.204    0.469
          1125680.8   0.00   3.82  29.87   0.00  94.03  91.20      3    0.265     2    0.204    0.469
    
    jmap –heap pid         # 打印 Java 进程堆信息
    

标签:HotSpotAgent,java,jvm,sun,0.00,53f0,调优,应用,Java
From: https://www.cnblogs.com/anyu967/p/17311894.html

相关文章

  • 链表应用 II
    目录链表应用II应用2:Leetcode.25题目分析代码实现链表应用II应用2:Leetcode.25题目25.K个一组翻转链表输入:\(head=[1,2,3,4,5]\),\(k=2\)输出:\([2,1,4,3,5]\)分析这里,我们以前面题目中的用例,来说明算法的步骤。为了避免讨论边界条件,这里,我们使用一个\(dummy\)......
  • AWS上DevOps实验(三)--- 使用Terraform创建Web应用基础架构
    从本文档起,作者计划在AWS上做一系列DevOps/IaC相关实验,本文是第三篇,使用Terraform创建Web应用基础架构。本次实验架构图本次实验架构图如下:Terraform代码本次代码可以从下载代码结构如下:文档如下:$lltotal52-rw-r--r--1ec2-userec2-user3201Mar603:22appser......
  • Java面向对象习题接口篇
    题目一:按如下要求编写Java程序:(1)定义接口A,里面包含值为3.14的常量PI和抽象方法doublearea()。(2)定义接口B,里面包含抽象方法voidsetColor(Stringc)。(3)定义接口C,该接口继承了接口A和B,里面包含抽象方法voidvolume()。(4)定义圆柱体类Cylinder实现接口C,该类中包含三个成员变量:底......
  • java学习日记20230411-Vector
    VectorVector底层也是一个对象数组;Vector是线程同步的,即线程安全,Vector类的操作方法带有synchronized在开发中需要线程同步安全的,考虑使用VectorpublicclassVector01{//Vector线程安全publicstaticvoidmain(String[]args){Vector<Object>objects......
  • 多线程应用案例
    需求解析一个Excel中多个sheet的数据,那么此时就可以考虑使用多线程,每个线程解析一个sheet中的数据,然后等待所有的sheet数据解析完成后,再把数据入库在这个需求中,要实现主线程等待所有现场完成shee数据解析操作,第一种方案:采用join()方法publicclassMyJoinTest{publicstaticvoid......
  • java学习日记20230411-ArrayList
    ArraylList注意事项ArrayList可以加入null,并且多个;ArrayList是由数组来实现数据存储的ArrayList基本等同于Vector,处理ArrayList是线程不安全(执行效率高),在多线程情况下,不建议使用ArrayLIst  ArrayList示例publicclassArrayList01{publicstaticvoidmain(Stri......
  • Java并发编程的艺术
    回复并发编程的艺术即可获取《Java并发编程的艺术》正是为了解决这个问题而写的。书中采用循序渐进的讲解方式,从并发编程的底层实现机制入手,逐步介绍了在设计Java并发程序时各种重要的技术、设计模式与应用,同时辅以丰富的示例代码,使得开发人员能够更快地领悟Java并发编程的要领,围绕......
  • java -- 二维数组
    基本概念在Java中二维数组被看作数组的数组,即二维数组为一个特殊的一维数组,其每个元素又是一个一维数组。Java并不直接支持二维数组,但是允许定义数组元素是一维数组的一维数组,以达到同样的效果。创建及初始化//创建方式和数组相似第一个中括号表示行,第二个中括号表示列//......
  • mybatis全局变量 (mybatis.configuration.variables) 的应用
    mybatis.configuration.variables是一个可自定义的全局变量:在application.yml中定义:mybatis:mapper-locations:classpath:mapper/*.xmltype-aliases-package:com.example.entityconfiguration:variables:dbtype:mysqlmapper.xml中的使用:<!--更新......
  • java多线程 - 狂神
    多线程实现方法第一种方法:Thread自定义线程类继承Thread类重写run()方法,编写线程执行体创建线程对象,调用start()方法启动线程注意:线程不一定立即执行,由CPU安排调度继承Thread类创建多线程packagecom.waves.dxcdemo;​importjava.text.DateFormat;importja......