修改JVM的参数、Jstat、Jstack、gclog
---恢复内容开始---
1. jetty 修改JVM的参数
- deploy/bin/env.sh
在上面的环境变量脚本中进行修改;如果分配给JVM的内存是4g
这个里面的JAVA_OPTS 的配置项就是用来给JVM 进行配置的;
- Xms:初始Head 内存的大小,应用使用的最小内存
- Xmx:Heap 内存的最大值
- -XX:NewSize=1024m -XX:MaxNewSize=1024m:新生代内存的大小,一般分配NewSize是Xms的 1/4 ---1/8
- -XX:PermSize=160m -XX:MaxPermSize=160m :永生代内存的大小,一般是用来加载 静态文件的,只要比最大的静态文件多个10--20% 的bufffer 即可
- -XX:+UseParallelGC :GC的方式选择并行方式,GC 时消耗性能比较少
- -Xloggc:/home/.../logs/gc.log #启动gclog ,会把JVM 每次gc的信息打印到gc.log 里面
其他还有很多变量;java的内存分为 young old perf 当三个内存来回切换频繁是,会多长GC 就是垃圾回收;会影响我们的性能。
2. JVM 参数详解:
http://singleant.iteye.com/blog/1308842
http://aixiangct.blog.163.com/blog/static/915224612010101833230342/
JVM 参数设置经验:
http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html
3. JVM 信息查看工具命令
jstat 查看 GC 的信息 【选项:-gcutil】 查看gc的信息
- sudo -u admin jstat -gcutil 6245 3000
- S0 S1 E O P YGC YGCT FGC FGCT GCT
- 0.00 21.03 33.28 6.66 62.39 31 0.987 0 0.000 0.987
- 0.00 13.06 91.34 7.53 62.63 39 1.094 0 0.000 1.094
- 0.00 13.06 98.36 7.53 62.63 39 1.094 0 0.000 1.094
- 11.05 0.00 6.25 7.59 62.65 40 1.104 0 0.000 1.104
- 11.05 0.00 11.10 7.59 62.65 40 1.104 0 0.000 1.104
- #s0 s1:是内存的2个交换区,如果内存从E(eden 区)转移到O(old 区)时需要借助S0 S1 2个中间交换区转移。
- # E eden :新生代区,java代码中新new的类占用的内存;
- # O old :老生代区,当新生代区(E)内存占用100时会把E里面的数据迁移到O;当O里面的数据占用内存超过90%时会出发FullGC;在JVM FullGC 期间,java的服务停止服务(大概持续1s的时间);此时如果收到外部的请求会超时:rt
- # P 永久(永生)生代:一般用来加载一些静态数据,java进程启动时会一次性加载,加载之后基本就不变化了。
- # YGC :年轻代(新生代) 进行GC,新生代GC 及时回收内存,代价比较小也比较频繁
- # YGCT:年轻待GC 累加的时间之和(服务重启归0)
- # FGC: 全堆范围内进行GC ,包括YGC 和OGC,每次FGC时java服务暂停,这样代价比较大
- # GCT: 所有的gc的占用的时间
jmap 查看堆 heap的内存使用情况
- sudo -u admin jmap -heap 6245
- Attaching to process ID 6245, please wait...
- Debugger attached successfully.
- Server compiler detected.
- JVM version is 20.0-b11
- using thread-local object allocation.
- Parallel GC with 8 thread(s)
- Heap Configuration: #JVM 的配置:JAVA_OPTS=" -server
- MinHeapFreeRatio = 40
- MaxHeapFreeRatio = 70
- MaxHeapSize = 5368709120 (5120.0MB)#整个堆内存的大小 -Xms5g -Xmx5g
- NewSize = 1073741824 (1024.0MB)#新生代内存的大小 -XX:NewSize=1024m -XX:MaxNewSize=256m
- MaxNewSize = 1073741824 (1024.0MB)
- OldSize = 5439488 (5.1875MB)#老生代的内存大小
- NewRatio = 2
- SurvivorRatio = 2
- PermSize = 167772160 (160.0MB)#持久生代 永生代 -XX:PermSize=160m -XX:MaxPermSize=160m
- MaxPermSize = 167772160 (160.0MB)
- Heap Usage:
- PS Young Generation
- Eden Space:
- capacity = 1045364736 (996.9375MB) #NewSize= S0 + S1 + E
- used = 289950536 (276.5183792114258MB)
- free = 755414200 (720.4191207885742MB)
- 27.7367818154524% used
- From Space: #S0 S1
- capacity = 14548992 (13.875MB)
- used = 6190208 (5.9034423828125MB)
- free = 8358784 (7.9715576171875MB)
- 42.54733248873874% used
- To Space:
- capacity = 13828096 (13.1875MB)
- used = 0 (0.0MB)
- free = 13828096 (13.1875MB)
- 0.0% used
- PS Old Generation
- capacity = 4294967296 (4096.0MB) #老生代的内存大小 = total heap 大小 - Newsize 大小
- used = 369568008 (352.44751739501953MB)
- free = 3925399288 (3743.5524826049805MB)
- 8.604675717651844% used
- PS Perm Generation
- capacity = 167772160 (160.0MB) #永生代大小
- used = 105796384 (100.89529418945312MB)
- free = 61975776 (59.104705810546875MB)
- 63.0595588684082% used
用jstack dump 线程的信息,看当时线程有没有问题;
进程查找所有的线程:top -H -p 进程pid会打印出此进程所有的线程;然后在dump 线程的栈信息
- sudo -u admin jstack 6245 > stack.log
- #"DubboClientHandler-172.22.6.25:20880-thread-155"
- #daemon prio=10 tid=0x00000000576de800 nid=0x687a waiting on condition [0x000000
- 0054f81000]
gclog的分析:
- #前提是在JVM 配置中加入Xloggc的配置:
- -XX:+UseParallelGC -Xloggc:/home/.../.../gc.log
- cat gc.log
- #java进程启动到现在的时间(s) GC的类别 GC的减少内存的结果 这次GC 花的时间
- 62802.998: [GC 3152988K->2129998K(5231808K), 0.0241120 secs]
- 62846.660: [GC 3156430K->2133046K(5232896K), 0.0223710 secs]
- 62877.147: [GC 3161142K->2134765K(5232384K), 0.0197390 secs]
- #下面这行的含义:
- #62802.998: [GC 3152988K->2129998K(5231808K), 0.0241120 secs]
- #62802.998: #这次gc 从java进程启动到现在执行的时间,单位是秒
- #GC:GC的种类,代表是YGC 如果Full GC 说明是FGC
- #3152988K:这次GC 之前整个堆内存(Heap 占用大小)
- #2129998K:这次GC 之后整个堆内存(Heap 占用大小)
- #也就是这次GC 的效果是释放了(3152988K - 2129998K)内存
- #(5231808K) :代表整个JVM 最大的堆内存 Xmx
- #0.0241120 secs: 此次GC 耗费的时间;如果Full GC 则在这个耗费时间里面java 服务暂停服务
- 原文链接:https://blog.csdn.net/caoshuming_500/article/details/21472997
---恢复内容结束---
修改JVM的参数、Jstat、Jstack、gclog的更多相关文章
- 修改jvm xms参数
http://hi.baidu.com/200770842223/item/9358aad4f3194e1a20e2501b http://www.cnblogs.com/mingforyou/arc ...
- Eclipse jvm启动参数在哪设置
学习并转载自https://jingyan.baidu.com/article/624e7459653ca534e8ba5a26.html Java是一门非常受欢迎的编程语言,Java的开发人员多数使 ...
- NetBeansRCP-添加/修改NetBeans的JVM启动参数
NetBeans运行的速度实在是不敢恭维.还好机器配置还可以,修改其JVM启动参数命令行,以期运行的更加顺畅. 那么如何修改NetBeans IDE的JVM参数呢? 1.到NetBeans IDE的安 ...
- 使用maven时,如何修改JVM的配置参数;maven命令执行时到底消耗多少内存?
maven是使用java启动的,因此依赖JVM,那么如何修改JVM参数? MAVEN_OPTS 在系统的环境变量中,设置MAVEN_OPTS,用以存放JVM的参数,具体设置的步骤,参数示例如下: MA ...
- 一文学会JVM配置参数与工具使用
经过前面的各种分析,我们知道了关于JVM很多的知识,比如版本信息,类加载,堆,方法区,垃圾回收等,但是总觉得心里不踏实,原因是没看到实际的一些东西. 所以这在本文,咱们就好好来聊一聊关于怎么将这些内容 ...
- 深入理解JVM虚拟机10:JVM常用参数以及调优实践
转自http://www.rowkey.me/blog/2016/11/02/java-profile/?hmsr=toutiao.io&utm_medium=toutiao.io&u ...
- IntelliJ IDEA设置JVM运行参数
2015十一月 28 原 IntelliJ IDEA设置JVM运行参数 分类:JavaSE (11566) (1) 打开 IDEA 安装目录,看到有一个 bin 目录,其中有两个 vmoptions ...
- jvm相关参数
官方地址:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html#BEHHGFAE 一.查看jvm运行参数 1.查看 ...
- 性能测试三十六:内存溢出和JVM常见参数及JVM参数调优
堆内存溢出: 此种溢出,加内存只能缓解问题,不能根除问题,需优化代码堆内存中存在大量对象,这些对象都有被引用,当所有对象占用空间达到堆内存的最大值,就会出现内存溢出OutOfMemory:Java h ...
随机推荐
- 091 Decode Ways 解码方法
包含 A-Z 的字母的消息通过以下规则编码:'A' -> 1'B' -> 2...'Z' -> 26给定一个包含数字的编码消息,请确定解码方法的总数.例如,给定消息为 "1 ...
- python_12(并发编程)
第1章 进程 1.1 队列Queue 1.2 Queue方法 1.2.1 q.get([block [,timeout]]) 1.2.2 q.get_nowait() 1.2.3 q.put(item ...
- Linux查看某个端口是否启动
查看命令 netstat -an | 执行结果: [root@test ~]# netstat -an | tcp 0.0.0.0:* LISTEN 有tcp 这一行返回说明已开放
- django-Haystack库
本文参考自Haystack官方文档:https://django-haystack.readthedocs.io/en/master/tutorial.html#configuration 简介 Ha ...
- Java环境安装与Eclipse安装
1.jdk下载安装 2.Eclipse下载安装 遇到的问题: 出现问题原因可能有两个:1)没有配置环境变量 2)jdk和eclipse安装的版本不一致,都是64位或者都是32位. 本人出现错误的原因: ...
- .Net 遍历目录下第一层的子文件夹和子文件夹里的文件
今天再完成一道任务的时候需要遍历得到所有txt文件,搜索很久终于得到了一个很方便的方法. foreach (string o in Directory.GetDirectories(@"D: ...
- ES-windos环境搭建(3)-kibana
简介 Kibana是一个为ElasticSearch 提供的数据分析的 Web 接口.可使用它对日志进行高效的搜索.可视化.分析等各种操作. 下载 打开elasticseach官网,单击downloa ...
- 面向对象-类-成员变量-局部变量-this
1.能够理解面向对象的思想 面向对象是基于面向过程的编程思想,强调的是对象,由对象去调用功能.它是一种更符合人类习惯的编程思想,可以将复杂的事情简单化,将我们的角色从执行者变成了指挥者. 2. ...
- MySQL存储过程(批量生成论坛中发帖、回帖、主题等数据)
USE 数据库名称1;DROP PROCEDURE IF EXISTS 数据库名称1.存储过程名称;delimiter $$CREATE PROCEDURE 数据库名称1.存储过程名称(in v_co ...
- VMware网络适配器设置
VMware网络连接主要有三种方式,分别是桥接,NAT和Host-only. 桥接:直接使用的是真实机的物理网卡(有线网卡,无线网卡),会占用局域网中的一个IP,因此在设置虚拟机IP时要避免与同网段的 ...