经过前面的各种分析,我们知道了关于JVM很多的知识,比如版本信息,类加载,堆,方法区,垃圾回收等,但是总觉得心里不踏实,原因是没看到实际的一些东西。

所以这在本文,咱们就好好来聊一聊关于怎么将这些内容进行直观地展示在我们面前,包括怎么进行相应的一些设置。OK,let's go!

8.1 JVM参数

8.1.1 标准参数

-version

-help

-server

-cp

8.1.2 -X参数

非标准参数,也就是在JDK各个版本中可能会变动

-Xint     解释执行

-Xcomp    第一次使用就编译成本地代码

-Xmixed   混合模式,JVM自己来决定

8.1.3 -XX参数

使用得最多的参数类型

非标准化参数,相对不稳定,主要用于JVM调优和Debug

a.Boolean类型

格式:-XX:[+-]<name>            +或-表示启用或者禁用name属性

比如:-XX:+UseConcMarkSweepGC   表示启用CMS类型的垃圾回收器

-XX:+UseG1GC              表示启用G1类型的垃圾回收器

b.非Boolean类型

格式:-XX<name>=<value>表示name属性的值是value

比如:-XX:MaxGCPauseMillis=500

想要设置的话,得先知道默认JVM中参数相关的信息

下面这个针对的是java这个进程

java -XX:+PrintFlagsFinal -version > flags.txt

如果要查看一个运行中的JVM相关参数的信息,可以使用jinfo,不过要先知道Java进程的ID。

比如启动一个tomcat,它的PID为2908,如下图过程所示。

如果想通过jinf o查看更多

设置参数的常见方式

* 开发工具中设置比如IDEA,eclipse

* 运行jar包的时候:java  -XX:+UseG1GC xxx.jar

* web容器比如tomcat,可以在脚本中的进行设置

* 通过jinfo实时调整某个java进程的参数(参数只有被标记为manageable的flags可以被实时修改)

8.1.4 其他参数

-Xms1000等价于-XX:InitialHeapSize=1000

-Xmx1000等价于-XX:MaxHeapSize=1000

-Xss100等价于-XX:ThreadStackSize=100

所以这块也相当于是-XX类型的参数

8.1.5 说明

一般要设置参数,可以先查看一下当前参数是什么,值得注意的是"="表示默认值,":="表示被用户或JVM修改后的值。

8.1.6 单位换算

1Byte(字节)=8bit(位)

1KB=1024Byte(字节)

1MB=1024KB

1GB=1024MB

1TB=1024GB

8.1.7 常用参数含义

8.2 常用命令

官网Search

<https://docs.oracle.com/apps/search/search.jspcategory=java&q=>

8.2.1 jps

查看java进程

The jps command lists the instrumented Java HotSpot VMs on the target system. The command is limited to reporting information on JVMs for which it has the access permissions.

8.2.2 jinfo

实时查看和调整JVM配置参数

The jinfo command prints Java configuration information for a specified Java process or core file or a remote debug server. The configuration information includes Java system properties and Java Virtual Machine (JVM) command-line flags.

查看用法

jinfo -flag name PID     查看某个java进程的name属性的值

比如:

jinfo -flag MaxHeapSize PID

jinfo -flag UseG1GC PID

调整用法

参数只有被标记为manageable的flags可以被实时修改

jinfo -flag [+|-] PID

jinfo -flag <name>=<value> PID

查看曾经赋过值的一些参数

jinfo -flags PID

8.2.3 jstat

查看虚拟机性能统计信息

The jstat command displays performance statistics for an instrumented Java HotSpot VM. The target JVM is identified by its virtual machine identifier, or vmid option.

查看类装载信息

jstat -class PID 1000 10      查看某个java进程的类装载信息,每1000毫秒输出一次,共输出10次

比如:

jstat -class PID 1000 10

查看垃圾收集信息

jstat -gc PID 1000 10

8.2.4 jstack

查看线程堆栈信息

The jstack command prints Java stack traces of Java threads for a specified Java process, core file, or remote debug server.

用法

jstack PID

8.2.5 jmap

生成堆转储快照

The jmap command prints shared object memory maps or heap memory details of a specified process, core file, or remote debug server.

打印出堆内存相关信息

jmap -heap PID

dump出堆内存相关信息

jmap -dump:format=b,file=heap.hprof PID

关于dump下来的文件

一般dump下来的文件直接看有些费力,可以结合MAT工具来分析。

`一般在开发中,JVM参数可以加上下面两句,这样内存溢出时,会自动dump出该文件`

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heap.hprof

8.3 常用工具

8.3.1 jconsole

JConsole工具是JDK自带的可视化监控工具。查看java应用程序的运行概况、监控堆信息、永久区使用情况、类加载情况等。

8.3.2 jvisualvm

(1)可以监控本地的java进程的CPU,类,线程等

(2)也可以监控远端java进程,比如监控远端tomcat

如果是连接远端tomcat[也可以是任意Java进程],比如部署在阿里云服务器上的tomcat,可以按照以下步骤

(1)在visualvm中选中“远程”,右击“添加”>

(2)主机名上写服务器的ip地址,比如39.100.39.63

(3)右击该主机,添加“JMX”,也就是通过JMX技术具体监控远端服务器哪个Java进程

(4)要想让服务器上的tomcat被连接,需要改一下Catalina.sh这个文件

`注意下面的8998不要和服务器上其他端口冲突`> ```

JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote

-Djava.rmi.server.hostname=39.100.39.63

-Dcom.sun.management.jmxremote.port=8998

-Dcom.sun.management.jmxremote.ssl=false

-Dcom.sun.management.jmxremote.authenticate=true

-Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access

-Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password"

(5)在../conf文件中添加两个文件jmxremote.access和jmxremote.password

jmxremote.access

guest readonly

manager readwrite

jmxremote.password

guest guest

manager manager>

`授予权限`:`chmod 600 *jmxremot*`

(6)将连接服务器地址改为公网ip地址

hostname -i   查看输出情况

172.26.225.240 172.17.0.1

vim /etc/hosts

172.26.255.240 39.100.39.63

(7)查看8998监听情况,可以发现多开了几个端口

lsof -i:8998    得到PID

netstat -antup | grep PID

(8)设置上述端口对应的阿里云安全策略和防火墙策略

(9)启动tomcat,可以查看一下日志情况

(6)在刚才的JMX中输入8998端口,并且输入用户名和密码则登录成功

8.3.3 内存分析MAT

8.3.4  GC日志分析工具

要想分析日志的信息,得先拿到GC日志文件才行,所以得先配置一下,根据前面的参数,下面的配置很容易看懂

XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps

-Xloggc:$CATALINA_HOME/logs/gc.log

在线

http://gceasy.io

GCViewer

一文学会JVM配置参数与工具使用的更多相关文章

  1. 一文学会JVM性能优化

    实战性能优化 1 重新认知JVM 之前我们画过一张图,是从Class文件到类装载器,再到运行时数据区的过程,现在咱们把这张图不妨丰富完善一下,展示了JVM的大体物理结构图. 执行引擎:用于执行JVM字 ...

  2. 常用JVM配置参数

    常用JVM配置参数 Trace跟踪参数 堆的分配参数 栈的分配参数 Trace跟踪参数 1.打开GC的日志,如果在程序的运行过程中,系统发生了GC,就会打印相关的信息. -verbose:gc -XX ...

  3. JVM虚拟机(1)---常用JVM配置参数

    常用JVM配置参数 常用JVM配置参数主要有:Trace跟踪参数.堆的分配参数.栈的分配参数. 一.Trace跟踪参数 跟踪参数用于跟踪监控JVM,对于开发人员来讲用于JVM调优以及故障排查的. 1. ...

  4. JVM配置参数详解

    记录一下jvm中的一些配置参数,这些肯定不全的,希望你们能留个言,补全一下,谢谢啦! -XX: MaxDirectMemorySize--->设置直接内存,不设置与Java堆内存最大值一致 -X ...

  5. JVM配置参数详解(目前不够完善)

    最近看了有关虚拟机的书籍,发现有很多虚拟机配置参数不知道,特来记录一下, -XX: MaxDirectMemorySize--->设置直接内存,不设置与Java堆内存最大值一致 -XX:Perm ...

  6. JVM 配置参数 -D,-X,-XX 的区别

    转载请注明出处: 最近在安全护网行动,需要针对服务进行不断的安全加固,如 对服务的 log4j 的安全配置进行防护,对 fastjson 的漏洞进行安全加固等,最快的防护方法就是通过在服务启动的时候, ...

  7. 有关JVM配置参数含义

    1.参数的含义-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M-vmargs 说明后面是VM的参数,所以后面的其实都是JV ...

  8. JVM配置参数

    .堆内存相关的JVM参数 —Xms 初始堆大小 —Xmx 最大堆大小 —Xss 线程栈大小 —XX:MinHeapFreeRatio 设置堆空间最小空闲比例 —XX:MaxHeapFreeRatio ...

  9. Java虚拟机详解03----常用JVM配置参数

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

随机推荐

  1. 通过 Drone Rest API 获取构建记录日志

    Drone是一款CICD工具,提供rest API,简单介绍下如何使用API 获取构建日志. 获取token 登录进入drone,点头像,在菜单里选择token 复制token即可 API 介绍 Dr ...

  2. EXT grid单元格点击时判断当前行是否可编辑

    var c_gridColumns = new Ext.grid.ColumnModel({ columns: [//列模式 c_sm, { header: "内码", dataI ...

  3. 利用百度AI快速开发出一款“问答机器人”并接入小程序

    先看实现效果: 利用百度UNIT预置的智能问答技能和微信小程序,实现语音问答机器人.这里主要介绍小程序功能开发实现过程,分享主要功能实现的子程序模块,都是干货! 想了解UNIT预置技能调用,请参看我之 ...

  4. conda pip 安装 dgl 并运行demo 出现:Segmentation fault (core dumped) 错误

    安装dgl 并运行的时候,出现了如上错误,很是郁闷:使用 gdb python; run train.py 进行调试,发现是torch的问题:我猜测估计是torch 安装的版本过于新:于是重新安装 1 ...

  5. Android组件体系之视图绘制

    一.View组件View组件有几个重要的方法需要关注,也是自定义View经常需要重写的方法. 1.measure作用是测量View组件的尺寸.对应的方法是onMeasure,测量View的宽和高.Vi ...

  6. 基于STM32的无损压缩算法miniLZO移植,压缩率很高,20KB随机数压缩到638字节,耗时275us

    说明: 1.miniLZO是采用C编写的无损压缩库. 2.提供了快速压缩和超快速解压缩能力. 3.比较耗内存,需要64KB内存用于压缩,对于H7这种大内存的,非常合适.或者有外置SRAM/SDRAM的 ...

  7. 没想到Spring Boot居然这么耗内存,有点惊讶

    Spring Boot总体来说,搭建还是比较容易的,特别是Spring Cloud全家桶,简称亲民微服务,但在发展趋势中,容器化技术已经成熟,面对巨耗内存的Spring Boot,小公司表示用不起.如 ...

  8. C# Thread 线程

    Thread  创建和控制线程,设置其优先级并获取其状态 Thread构造函数接收一个无参数或带一个object类型参数的委托 { Console.WriteLine("), DateTim ...

  9. Ant Design 错误记录

    Ant Design 错误记录 一: 标签页Tabs 1:设置activeKey或defaultActiveKey,绑定默认值不起作用: =>    需要同时设置activeKey和defaul ...

  10. MyBatis映射文件 相关操作

    一.MyBatis映射文件 1.简介 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行 ...