jStat

类加载机制与JVM调优命令

折月煮酒 提交于 2020-02-22 16:11:43
一、类加载过程 类加载: 类加载器将.class字节码文件加载进Java虚拟机的内存中 。 加载 :在硬盘上查找并通过IO读入字节码文件 连接 :执行校验、准备、解析(可选)步骤 校验 :校验字节码文件的正确性 准备 :给类的静态变量分配内存,并赋予默认值 解析 :类加载器载入类所引用的其他所有类 初始化 :对类的静态变量初始化为指定的值,执行静态代码块 二、类加载器种类 引导类加载器 :负责加载JRE的核心类库,如JRE目标下的rt.jar、charsets.jar等 扩展类加载器 :负责加载JRE扩展目录ext中的jar类包 系统类加载器 :负责加载ClassPath路径下的类包 自定义类加载器 :负责加载用户自定义路径下的类包 例子:定义一个TestJDKClassLoader类。 运行结果: 分析:第一个为null(其实就是引导类加载器,引导类加载器是用C和C++写的,不在JDK中,根本不知道它的名字,类似于native方法),第二个为扩展类加载器,第三、四个为系统类加载器。 三、类加载机制 全盘负责委托机制:当一个ClassLoader加载一个类时,除非显示的使用另一个ClassLoader,否则该类所依赖和引用的类也由这个ClassLoader载入 双亲委派机制 :指先委托父类加载器寻找目标类,在找不到的情况下再从自己的路径中查找并载入目标类 双亲委派模式的优势:

jvm 命令使用调优 通过jstat、jmap对java程序进行性能调优

不问归期 提交于 2020-02-16 11:39:58
转载: http://blog.csdn.net/jerry024/article/details/8507589 转载: https://blog.csdn.net/zhaozheng7758/article/details/8623530 通过jstat、jmap对java程序进行性能调优 2013年01月16日 12:54:12 jerry在魔都 阅读数 1207 第一次写技术博客,本文记录了我对服务器cpu占用率100%问题的排查过程和最终结果,算是一篇学习日志。 本人属于学习中的菜鸟码农,如有什么理解上的偏差的,还请各路大神指正。 关键词: jstat , jmap, heap, GC, smartupload, 内存泄漏 1. 背景 硬件供应商多次反映,在tomcat启动一段时间后,经常出现cpu占用率100%,且重启前一直保持在100%的情况。在重启后cpu占用率回落,但是一段时间后再次出现问题。 下图为cpu占用率100%时使用top命令的截图,可以看到java进程的cpu占用率几经几乎达到了400%(服务器为4核cpu) <1> 2.问题定位 2.1问题猜测 对于cpu占用率100%的情况,产生以下两种猜测: a. 程序长时间占用系统IO,导致CPU占用率100% b.程序存在严重内存泄露,导致jvm频繁执行full GC,从而使cpu占用率提高,造成服务器假死

Jvm 系列(四):Jvm 调优-命令篇

狂风中的少年 提交于 2020-02-09 01:25:48
运用jvm自带的命令可以方便的在生产监控和打印堆栈的日志信息帮忙我们来定位问题!虽然jvm调优成熟的工具已经有很多:jconsole、大名鼎鼎的VisualVM,IBM的Memory Analyzer等等,但是在生产环境出现问题的时候,一方面工具的使用会有所限制,另一方面喜欢装X的我们,总喜欢在出现问题的时候在终端输入一些命令来解决。所有的工具几乎都是依赖于jdk的接口和底层的这些命令,研究这些命令的使用也让我们更能了解jvm构成和特性。 Sun JDK监控和故障处理命令有jps jstat jmap jhat jstack jinfo下面做一一介绍 jps JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程。 命令格式 jps [options] [hostid] option参数 -l : 输出主类全名或jar路径 -q : 只输出LVMID -m : 输出JVM启动时传递给main()的参数 -v : 输出JVM启动时显示指定的JVM参数 其中[option]、[hostid]参数也可以不写。 示例 $ jps -l -m 28920 org.apache.catalina.startup.Bootstrap start 11589 org.apache.catalina.startup.Bootstrap start 25816

jvm生产环境的内存监控与调优-第二章

主宰稳场 提交于 2020-01-27 16:38:17
1、专门查看java 进程的工具 jps 官网链接: jps官方文档 输入命令:jps -l kjctar@kjctar - virtual - machine : ~ / Downloads / apache - tomcat - 8.5 .50 / bin$ jps - l 5376 org . apache . catalina . startup . Bootstrap (第一个数字是pid 第二个是java进程名,这里是tomcat) 7801 sun . tools . jps . Jps (jps命令的进程) 2、查看java进程运行时参数命令jstat 官网链接: jstat官方文档 输入命令: jstat -gc 5376 1000 10 (查看gc的内存状态 1000ms查一次 查询10次) kjctar@kjctar - virtual - machine : ~ / Downloads / apache - tomcat - 8.5 .50 / bin$ jstat - gc 5376 1000 10 S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 2560.0 2560.0 0.0 2544.0 31744.0 16132.0 42496.0 8638.6 15104.0

JVM调优

南楼画角 提交于 2020-01-25 00:43:36
#查看pid,提取Bootstrap的ID jps #查看class加载统计 jstat -class $pid #查看编译统计 jstat -compiler $pid #查看gc统计 YGC为年轻代垃圾回收次数 YGCT为年轻代垃圾回收消耗时间 GCT为垃圾回收消耗总时间 jstat -gc $pid #查看内存使用情况 jmap -heap $pid #查看内存中活跃对象数量及大小 jmap -histo:live $pid | more 来源: CSDN 作者: 壹只小提莫 链接: https://blog.csdn.net/yaowanliang/article/details/103834075

一道面试题引发的对 Java 内存模型的一点疑问

情到浓时终转凉″ 提交于 2020-01-15 12:42:34
一道面试题引发的对Java内存模型的一点疑问 问题描述 如上图所示程序,按道理,子线程会通过 num++ 操作破坏 while 循环的条件,从而终止循环,执行最后的输出操作。但在我的多次运行中,偶尔会出现 while 循环一直不结束的场合。像我截图一样,程序一直不终止,JDK7、JDK8 均已试验,均能偶然触发。 回复 [西湖の风] :变量前加个 volatile。 [csyangchsh] :volatile 使用读写屏障强制刷新缓存,如果不加就由 CPU 决定何时刷新。 [sofkyle] :由 CPU 决定何时刷新,那么可以认为,终会有一个时机会去刷新,但是while卡在那一直不刷新。 [你假笨] :和 jit 也是有一定关系的,-Xint 设定解释执行,也可以只关闭 OSR 看看,-XX:-UseOnStackReplacement。 JVM STW 里的 no vm operation 是怎么发生的 问题描述 我们线上应用提供的服务接口突然超时(dubbo服务接口调用耗时最大限制1s),发现gc.log在对应的时间进入了STW,耗时1.526s查看对应的vm.log发现在相对饮的时间有一个no vm operation提示,请教下:no vm operation,这个类型vm具体在做什么操作啊?如何优化? 回复 [你假笨]: safepoint并不是一定要发生了某个VM

JVM相关

被刻印的时光 ゝ 提交于 2020-01-10 17:44:38
jstat jstat -gcutil jstat -gcutil 28589 10000 30 #各分区情况,注意YGCT是否较大 jstat -gc 28589 1s 1 查看MU,可见永久带(变量)占用多大内存 Refer to http://blog.csdn.net/zhaozheng7758/article/details/8623549 Javap 字节码查看 javap -c xxx.class dump jmap -dump:format=b,file=dumpFileName.hprof PID jmap -dump:live,format=b,file=dumpFileName.hprof PID 通过MAT工具进行分析 jps jps #查看服务进程号 jmap jmap -histo:live 8697|head -n 23 jmap -histo:live 28589 >> /var/tmp/jmap17.txt #java对象分析 jmap -heap 18181 > heap$(date +%y%m%d%k%M%S).txt,保存heap(堆)信息 性能参考 Minor GC执行时间(小于50ms) Minor GC执行不频繁(大概10秒一次) Full GC执行时间(小于1s) Full GC执行不频繁(10分钟一次) 目标 GC的时间足够的小

JVM监控命令详解

荒凉一梦 提交于 2020-01-10 14:48:20
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> JVM监控命令基本就是 jps、jstack、jmap、jhat、jstat 几个命令的使用就可以了 JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat等小巧的工具,本博客希望能起抛砖引玉之用,让大家能开始对JVM性能调优的常用工具有所了解。 现实企业级Java开发中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 ...... 这些问题在日常开发中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源),但能够理解并解决这些问题是Java程序员进阶的必备要求。本文将对一些常用的JVM性能调优监控工具进行介绍,希望能起抛砖引玉之用。本文参考了网上很多资料,难以一一列举,在此对这些资料的作者表示感谢!关于JVM性能调优相关的资料,请参考文末。 A、 jps(Java Virtual Machine Process Status Tool) jps主要用来输出JVM中运行的进程状态信息。语法格式如下: jps [options] [hostid]

[第三篇]JVM 信息查看

眉间皱痕 提交于 2020-01-07 15:46:12
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1. jps 打印所有java 进程 JACDONG-M-D1FJ:~ jacdong$ jps 28454 Jps 68554 OracleIdeLauncher 19436 2.jinfo -flags java 进程号 -- 查看jvm 参数 3.jinfo -sysprops java 进程号 -- 查看java 系统参数 4.jstat -class 进程号 -- 查看jvm 内存使用情况 JACDONG-M-D1FJ:~ jacdong$ jstat -class 29778 Loaded Bytes Unloaded Bytes Time 23128 46569.0 8 7.2 20.99 5.jstat -gc 进程号 -- 查看jvm gc 情况 JACDONG-M-D1FJ:~ jacdong$ jstat -gc 29778 S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 96768.0 72704.0 0.0 72495.1 228352.0 82966.2 173568.0 110433.3 158616.0 141782.2 21504.0 17087.3 35 0.606 7 0.854 1.460

JVM

孤街醉人 提交于 2019-12-30 18:42:18
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> jstat命令查看jvm的GC情况 (以Linux为例) 来源: oschina 链接: https://my.oschina.net/yunjie/blog/3151018