参考文献1
例如:
C:UsersAdministrator>jmap -heap 3444 开启JVM日志打印
VM options:
-verbose:gc -XX:+PrintGCDetails 设置JVM初始化内存为20M
VM options:
-Xms20M 设置JVM最大内存为20M
VM options:
-Xmx20M 设置JVM年轻带内存大小为10M
VM options:
-Xmn10M 设置JVM大对象分配区域判断条件
VM options:
-XX: PretenureSizeThreshold 1024 设置内存异常是保存内存快照
-XX:+HeapDumponOutOfMemoryError -XX:HeapDumpPath:/data/heap/error
JVM虚拟机工具-JPS
JPS是什么?
jps (JVM Process Status Tool)是其中的典型jvm工具。除了名字像 UNIX 的 ps 命令之外,它的功能也和 ps 命令类似:可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class, main()函数所在的类)名称以及这些进程的本地虚拟机唯- ID (Local Virtual Machine Identifier, LVMID),虽然功能比较单一,但它是使用频率最高的 JDK 命令行工具
实战使用
jps -l 输出主类的全名,如果进程执行的是Jar包则输出Jar路径jps -v 输出虚拟机进程启动时JVM参数 JVM虚拟机工具-jstat
jstat是什么
Jstat (JVM Statistics Monitoring Tool)是用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程-虚拟机进程中的类装载、内存、垃圾收集、JIT 编译等运行数据,在没有 GU 图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具
jstat命令使用
jstat -gc 2764 250 20 //2764表示进程id ,250表示250毫秒打印一次 ,20表示一共打印20次 S0C:第一个幸存区的大小 S1C:第二个幸存区的大小 S0U:第一个幸存区的使用大小 S1U:第二个幸存区的使用大小 EC:伊甸园区的大小 EU:伊甸园区的使用大小 OC:老年代大小 OU:老年代使用大小 MC:方法区大小 MU:方法区使用大小 CCSC:压缩类空间大小 CCSU:压缩类空间使用大小 YGC:年轻代垃圾回收次数 YGCT:年轻代垃圾回收消耗时间 FGC:老年代垃圾回收次数 FGCT:老年代垃圾回收消耗时间 GCT:垃圾回收消耗总时间
JVM虚拟机工具-jinfo
jinfo是什么?
jinfo (Configuration Info for Java)的作用是实时地查看和调整虚拟机各项参数。使用 jps 命令的-v 参数可以查看虚拟机启动时显式指定的参数列表,但如果想知道未被显式指定的参数的系统默认值,除了去找资料外,就只能使用 info 的-flag 选项进行查询了
jinfo命令使用
jinfo pidjinfo -flag CMSInititingOccupancyFraction 1444
JVM虚拟机工具-jmap
jmap是什么?
Jmap (Memory Map for Java)命令用于生成堆转储快照。如果不使用 jmap 命令,要想获取 Java 堆转储快照,还有一些比较“暴力”的手段:-XX: +HeapDumponOutOfMemoryError 参数,可以让虚拟机在 OOM 异常出现之后自动生成 dump 文件,用于系统复盘环节和 info 命令一样,jmap 有不少功能在 Windows 平台下都是受限的,除了生成 dump 文件的- dump 选项和用于查看每个类的实例、空间占用统计的-histo选项在所有操作系统都提供之外,其余选项都只能在Linux/Solaris 下使用。
jmap常用命令使用
//生成 Java 堆转储快照。格式为:-dump: format=b, file= Filenamewindows: jmap -dump:format=b,file=d:a.bin 1234mac: jmap -dump:format=b,file=/Users/daniel/deskTop
histo more分页去查看
显示堆中对象统计信息,包括类、实例数量、合计容量
B :byte
C : char
I :Int
JVM虚拟机工具-jhatjhat是什么?
Sun JDK 提供 jhat (JVM Heap Analysis Tool)命令常与 jmap 搭配使用,
来分析 jmap 生成的堆 转储快照。jhat内置了一个微型的HTTP/HTML服务器,生成dump文件的分析结果后,可以在浏览器中查看 特点:
jhat分析工作是一个耗时而且消耗硬件资源的过程jhat 的分析功能相对来说比较简陋 JVM虚拟机工具-jstack
Jstack是什么?
Jstack (Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照(-般称为 threaddump 或者 javacore 文件)
线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等都是导致线程长时间停顿的常见原因。线程出现停顿的时候通过 jstack 来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做些什么事情,或者等待着什么资源
Jstack怎么做
常用命令jstack -l 3500jstack -F 当正常输出的请求不被响应时,强制输出线程堆栈 Force经典面试题之 【jstack怎么进行死锁问题定位?】
线上程序一般不能kill进程pid的方式直接关闭
shutdownHook :在关闭之前执行的任务 JVM虚拟机工具-jconsole
参考文献
https://blog.csdn.net/chenxing109/article/details/85319815
远程连接springboot项目
Dockerfile
#VERSION 0.0.1#Author: xiaozhang #基础镜像,使用alpine操作系统,openjkd使用8u201FROM openjdk:8-jdk-alpine#作者MAINTAINER xiaozhang <754521437@qq.com>#系统编码ENV LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS="-Xms800m -Xmx800m -XX:+PrintGCDetails -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxNewSize=512m -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.rmi.port=9999 -Djava.rmi.server.hostname=192.168.0.10 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"#声明一个挂载点,容器内此路径会对应宿主机的某个文件夹VOLUME /tmp#应用构建成功后的jar文件被复制到镜像内,名字也改成了app.jarADD target/eureka-server.jar app.jar#启动容器时的进程ENTRYPOINT java ${JAVA_OPTS} -jar /app.jar#暴露8080端口EXPOSE 8761EXPOSE 9999
远程连接说明-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 (远程访问端口)-Dcom.sun.management.jmxremote.rmi.port=9999 (远程访问端口)-Djava.rmi.server.hostname=192.168.0.10 (主机外网ip)-Dcom.sun.management.jmxremote.local.only=false-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false* 容器启动命令```docker run -d -p 8761:8761 -p 9999:9999 --name group_es_web_1 eureka-server:1.0.0```
JVM虚拟机工具-VisualVM
VisualVM是什么?
VisualVM是一个集成命令行JDK工具和轻量级分析功能的可视化工具
VisualVM怎么用?
在IDEA安装VisualVM插件,File-> Setting-> Plugins -> Browers Repositrories 搜索VisualVM Launcher安装并重启IDEA
配置VisualVM,Ctrl + Alt + S > Other Settings > VisualVM Launcher
VisualVM executable: E:/Java/jdk1.8.0_131/bin/jvisualvm.exe
JVM虚拟机工具-IBM HeapAnalyzer官方地址
IBMHeapAnalyzer可以分析heapdump、phd、hax等文件IBMHeapAnalyzer是一个非常重要的JAVA程序bug分析工具。它可以帮助我们分析哪些原因可能导致了程序的内存溢出
JVM常见的问题简介:互联网项目常见JVM问题讲述
为什么访问量大就越容易出问题
判断一个用户是否在白名单 List.contain(用户) true,》Set.contain(用户) 通过hash比较》布隆过滤器结论==》用户量大和用户量小的项目遇到的问题和解决方案也就不一样 案例1,关于死锁问题
解决方案==》jstack -m命令查看帮我们检测是否有死锁,或者jconsole、jvisualVM也能检查new Thread的时候最好带上名称 案例2,堆内存泄漏问题
现象:出现OOM或者Full GC,heap使用率明显上升,经常达到XmxFull GC出现的正常频率是大概一天一到两次解决方案==》jmap dump下内存/heap dump on OOM/heap dump on FullGC+jhat本地分析/mat(eclipse),或者jconsole、jvisualVM也能检查
案例3,堆外内存泄漏
现象:heap使用率很低,但是出现了OOM或者Full GC
解决方案==》可以用btrace跟踪DirectByteBuffer的构造函数来定位
名词-布隆过滤器