当前位置:首页 > TAG信息列表 > 怎样添加jvm启动参数如何获取JVM的dump文件?

怎样添加jvm启动参数如何获取JVM的dump文件?

怎样添加jvm启动参数 如何获取JVM的dump文件?

如何获取jvm的dump文件?

资源jvm的dump文件的两种

1.jvm启动时增强两个参数:

#出现oome时化合堆dump:

怎样添加jvm启动参数 如何获取JVM的dump文件?

-xx:heapdumponoutofmemoryerror

#生成沉淀堆文件地址:

-xx:heapdumppath/home/liuke/jvmlogs/

2.才发现程序异常前实际想执行指令,就能生成当前jvm的dmp文件,6214是指jvm的进程号

jmap-dump:formatb,fileservicedump.dat6214

而第一种是一种之后,要耐心的等待当前jvm直接出现问题后才能生成dmp文件,实时性不高,第二种在执行时,jvm是暂停服务的,所以对线上的运行会产生影响。所以个人建议第一种。

如何正确学会java虚拟机调优?

一点小经验皆有可能:

1)堆

运行时数据区域,所有类实例和数组的内存均从此处分配。java虚拟机启动时时创建角色。对象的堆内存由称作垃圾回收器的自动出现内存管理系统回收。

堆由两部分分成:

其中edenfromspacetospace也叫年长代(young),oldspace叫旧生代.

其中有s1,s0(在jdk的从网上下载工具输出中会看见),四个指的是survivorspace,存放每次来垃圾回收后能够存活的对象.

oldgeneration,比较多存放应用程序中生命周期长的存活对象

垃圾回收要注意是对younggeneration块和oldgeneration块内存接受回收,yg用来放新才能产生的对象,当经过几次回收都还没回收掉的对象往og中移动,

对yg接受垃圾回收又叫做minorgc,对og垃圾回收叫majorgc,几块内存回收井水不犯河水

2)非堆内存

jvm具有一个由所有线程互相访问的方法区。方法区属于非堆内存。它储存每个类结构,如运行时常数池、字段和方法数据,包括方法和构造方法的代码。它是在java虚拟机启动后时创建角色的。

以外方法区外,java虚拟机利用肯定是需要主要用于内部处理或优化的内存,这种内存也非堆内存。的或,jit编译器要内存来存储文件从java虚拟机代码可以转换而来的本机代码,使额外低性能。

permanentgeneration(图中的permanentspace)贮存jvm自己的反射对象,诸如类对象和方法对象

3)回收算法和过程

jvm常规一种分代回收(generationalcollection)的策略,用较高的频率对年长的对象(younggeneration)通过扫描和工厂回收,这种叫作minorcollection,而对老对象(oldgeneration)的检查回收频率要低比较多,一般称ti国际邀请赛collection。那样的话就不必须每次gc都将内存中所有对象都去检查一遍。

当一个url被ftp连接时,内存申请过程不胜感激:

a.jvm会企图为咨询java对象在eden中重新初始化一块内存区域

b.当eden空间足够时,内存可以申请结束了。不然的话到接下来

c.jvm借着释放出在eden中所有不亢奋状态的对象(这属于1或更低级的垃圾回收),释放后若eden空间仍旧绝对无法放进去新对象,则企图将部分eden中亢奋状态对象放入survivor区d.survivor区被利用作为eden及old的中间同样区域,当old区空间足够时,survivor区的对象会被移到old区,否则会被可以保留在survivor区

e.当old区空间够不够时,jvm会在old区进行几乎的垃圾收集(0级)

f.几乎垃圾收集后,若survivor及old区依旧难以存放从eden不能复制进来的部分对象,会造成jvm根本无法在eden区为新对象创建角色内存区域,则再次出现”outofmemory错误”

对象衰老的过程

younggeneration的内存,由一块eden(伊甸园,很好玩)和四块survivorspace(1.4文档中被称semi-space)构成。新创建家族的对象的内存都分区分配自eden。三块survivorspace总有会一块是空闲的,使用较多copyingcollection的目标空间。minorcollection的过程应该是将eden和在用survivorspace中的活对象copy到闲时survivorspace中。说白survivor,也就是大部分对象在伊甸园出生后,完全没有活但是三次gc。对象在younggeneration里奇遇了是有次数的minorcollection后,年纪大了,是会被移到oldgeneration中,称为tenuring。(有无仅当survivorspace不足的时候才会将老对象tenuring?目前资料中还没有找到描述)

剩下的内存空间不足会不触发gc,如eden空间够不够了还要进行minorcollection,oldgeneration空间够不够要进行faceitcollection,permanentgeneration空间不继会引发cleargc。

4接下来的这部分回答的是tomcat或者其他服务器直接出现万分感谢错误时的分析:

1、简单是:javaheapspace

请解释:

heapsize设置里

jvm堆的设置是指java程序运行过程中jvm是可以调配在用的内存空间的设置.jvm在正常启动的时候会自动启动系统设置heapsize的值,其精灵召唤空间(即-xms)是物理内存的1/64,最大空间(-xmx)是物理内存的1/4。是可以用来jvm提供的-xmn-xms-xmx等选项可参与设置中。heapsize的大小是younggeneration和tenuredgeneraion之和。

提示:在jvm中如果98%的时间是主要是用于gc且后用的heapsize不足以2%的时候将抛出此异常信息。

提示:heapsize的最千万不能将近用些物理内存的80%,象的要将-xms和-xmx选项设置为是一样的,而-xmn为1/4的-xmx值。

解决方法:

手动启动系统设置heapsize

如何修改tomcat_,在“echousingcatalina_base:$catalina_base”上面加入200以内行:

java代码

setjava_opts%java_opts%-server-xms800m-xmx800m-xx:maxnewsize256m

setjava_opts%java_opts%-server-xms800m-xmx800m-xx:maxnewsize256m

或可以修改

在“echousingcatalina_base:$catalina_base”上面加入200以内行:

java_opts$java_opts-server-xms800m-xmx800m-xx:maxnewsize256m

2、主要是:permgenspace

原因:

permgenspace的全称是permanentgenerationspace,是指内存的永久保存区域,这块内存比较多是被jvm贮放class和meta信息的,class在被loader时可能会被弄到permgenspace中,它和存放类实例(instance)的heap区域有所不同,gc(garbagecollection)不会在主程序运行期对permgenspace参与清理,所以才假如你的应用中有很class的话,就很可能会出现permgenspace错误,这种错误较常见在web服务器对jsp并且precompile的时候。如果没有你的webapp下都我用大量的第三方jar,其大小将近了jvm设置成的大小(4m)那你都会产生此错误信息了。

解决方法:

1.不自动设置里maxpermsize大小

可以修改tomcat_(linux下为),在java代码

“echousingcatalina_base:$catalina_base”上面加入200以内行:

setjava_opts%java_opts%-server-xx:permsize128m-xx:maxpermsize512m

“echousingcatalina_base:$catalina_base”上面加入到以上行:

setjava_opts%java_opts%-server-xx:permsize128m-xx:maxpermsize512m

下为:

java代码

java_opts$java_opts-server-xx:permsize128m-xx:maxpermsize512m

java_opts$java_opts-server-xx:permsize128m-xx:maxpermsize512m

jvm的默认设置

堆(heap)(newsgeneration和oldgeneraion之和)的设置

叶绿里分配的内存由-xms更改,默认是物理内存的1/64但大于1g。

大分配的内存由-xmx指定你,默认是物理内存的1/4但大于01g。

设置为空余堆内存大于140%时,jvm就会大小改变堆等到-xmx的大的限制,可以由-xx:minheapfreeratio指定。

设置成空闲区域堆内存大于70%时,jvm会增加堆待到-xms的最大值限制,可以不由-xx:maxheapfreeratio重新指定。

服务器像是设置-xms、-xmx大小关系以尽量的避免在有时候gc后按照堆的大小,因为上面的两个参数真没什么用。

-xmn设置里younggeneration的heap大小

-xx:minheapfreeratio与-xx:maxheapfreeratio设置闲时内存占总内存的比例范围,这两个参数会影响不大gc的频率和单次gc的耗时。-xx:newratio确定young与oldgeneration的比例。younggeneration空间越大,minorcollection频率越低,可是sillygeneration空间小了,又很有可能倒致faceitcollection频率提高。-xx:newsize和-xx:maxnewsize再指定你了younggeneration的缺省大小和最大大小。

非堆内存的设置

默认分配为64m

-xx:permsize设置中小于分配空间,-xx:maxpermsize可以设置最大分配空间。好象把这两个数值设为不同,以减少去申请内存空间的时间。

再讲解时和笔记下,jdk下的一些去相关看内存管理工具的使用:

栏里点jvm内存状态:

jstat-gcutilpid100020

发现异常的例子

jstat-gcutilpid100020

s0s1eopygcygctfgcfgctgct

0.000.0099.9982.5153.1124091.205101177250.3937251.598

0.000.0083.4282.5553.1024091.205101187252.6507253.855

0.000.0056.0682.4653.1024101.205101207254.4677255.672

0.000.0032.1182.5553.1024111.205101217256.6737257.877

0.000.0099.9982.5553.1024121.205101237257.0267258.231

0.000.0076.0082.5053.1024121.205101247259.2417260.446

这个数据显示cleargc不稳定不可能发生。

正常了情况的例子

s0s1eopygcygctfgcfgctgct

0.000.000.2455.3999.601710.6671339393.364394.031

0.000.000.2455.3999.601710.6671339393.364394.031

0.000.000.2455.3999.601710.6671339393.364394.031

0.000.000.2455.3999.601710.6671339393.364394.031

0.000.000.2455.3999.601710.6671339393.364394.031

0.000.000.2455.3999.601710.6671339393.364394.031

参数含义:

s0:heap上的survivorspace0段已在用空间的百分比

s1:heap上的survivorspace1段已不使用空间的百分比

e:heap上的edenspace段已不使用空间的百分比

o:heap上的oldspace段已可以使用空间的百分比

p:permspace已不使用空间的百分比

ygc:从程序启动到采样时发生了什么younggc的次数

ygct:younggc所是用时间(单位秒)

fgc:从程序启动到采样时发生了什么endlessgc的次数

fgct:cleargc所带的时间(单位秒)

gct:作用于垃圾回收的总时间(单位秒)

2dump出内存

2.1找出要dump的线程pid

在linux下,在用ps–aux

2.2dump出内存使用详情

也可以命令:

jmap-dump:filea.hprofpid

例如:jmap-heap2343,可以清晰的看到

attachingtoprocessid2343,pleasewait...

debuggerattachedsuccessfully.

servercompilerdetected.

jvmversionisn't11.0-b16

usingthread-localobjectallocation.

parallelgcwith8thread(s)

heapconfiguration:

minheapfreeratio40

maxheapfreeratio70maxheapsize4294967296(4096.0mb)

newsize2686976(2.5625mb)

maxnewsize-65536(-0.0625mb)

oldsize5439488(5.1875mb)

newratio2(yg,og大小比为1:2)

survivorratio8

permsize21757952(20.75mb)

maxpermsize268435456(256.0mb)

heapusage:

psyounggeneration

edenspace:

capacity1260060672(1201.6875mb)

needed64868288(61.86322021484375mb)

fun1195192384(1139.8242797851562mb)

5.148028935546367%employed

aroundspace:

capacity85524480(81.5625mb)

used59457648(56.70323181152344mb)

free26066832(24.859268188476562mb)

69.52120375359195%needed

didspace:capacity85852160(81.875mb)

needed0(0.0mb)

cool85852160(81.875mb)

0.0%utilized

~~~~~~~~~~~~~~~~~~~~~~~~~~这三块为上面所说的yg大小和建议使用情况

psoldgenerationcapacity2291138560(2185.0mb)

used1747845928(1666.8757705688477mb)

fit543292632(518.1242294311523mb)

76.28722062099989%utilized

~~~~~~~~~~~~~~~~~~~~~~~~~~og大小和不使用情况

pspermgenerationcapacity108265472(103.25mb)

needed107650712(102.6637191772461mb)

go614760(0.5862808227539062mb)

99.43217353728436%needed

jstat

jstat是vm的状态监控工具,监控的内容有类加载、运行程序时代码编译及gc。

使用时,需另外查看进程的进程id,和所选参数。以下具体点能介绍各个参数的意义。

jstat-classpid:会显示运行程序class的数量,及所占空间等信息。

jstat-compilerpid:不显示vm实时编译的数量等信息。

jstat-gcpid:是可以会显示gc的信息,打开系统gc的次数,及时间。其中结果五项,三个是younggc的次数,younggc的时间,cleargc的次数,endlessgc的时间,gc的总时间。

jstat-gccapacity:可以没显示,vm内存中三代(young,old,perm)对象的使用和电脑资源大小,如:pgcmn不显示的是最大值perm的内存在用量,pgcmx没显示的是perm的内存最大不使用量,pgc是当前新生成的perm内存占用量,pc是但前perm内存占用量。其他的是可以参照这个以此类推,oc是old内纯的占用量。

jstat-gcnewpid:next对象的信息。

jstat-gcnewcapacitypid:future对象的信息及电脑资源量。

jstat-gcoldpid:old对象的信息。

jstat-gcoldcapacitypid:old对象的信息非盈利组织会计占用量。

jstat-gcpermcapacitypid:perm对象的信息非盈利组织会计电脑资源量。

jstat-utilpid:统计gc信息统计。

jstat-printcompilationpid:当前vm负责执行的信息。

除此之外以上一个参数外,还也可以同样的而且两个数字,如:jstat-printcompilation30242506是每250毫秒不打印四次,最少打印6次,还可以另外-h3每三行会显示一下标题。

例子:

jstat-gcutilpid100020

s0s1eopygcygctfgcfgctgct

47.490.0064.8246.0847.69208222058.6316822.7342081.365

0.0037.9138.5746.1347.69208232058.6916822.7342081.425这里突然发生了两次yggc,也就是minorgc,前后历时0.06s

46.690.0015.1946.1847.69208242058.7766822.7342081.510

46.690.0074.5946.1847.69208242058.7766822.7342081.510

0.0040.2919.9546.2447.69208252058.8486822.7342081.582

majorgc来算时间:22.734/680.334秒

minorgc来算时间:2058.691/208230.099秒

内存对象jvm大小空间


昌博号 伯乐云

  • 关注微信关注微信

猜你喜欢

热门标签

pdf怎么转换成word免费软件 手机屏摔碎了裂缝发黑 小米怎么关闭自动调节亮度小米手机关闭自动亮度调节方法介绍 银行的宣传短片怎么制作银行宣传片制作 支付宝申请收款码在哪里 口碑收款码和支付宝收款码一样吗 cad最快的标注方法 java判断三角形类型 微信照片删除了还能恢复吗 如何制作条形图对比多个数据 微信账号密码在哪里看 如何解除微信公众号绑定的邮箱 win7系统安装日期在哪里看 手机wps怎么写会议记录公司上会议题标准格式? spring框架教程菜鸟怎么才能学好java?介绍 怎么关闭iphone上的mac复制苹果电脑桌面文件怎么复制?介绍 三星s4手表 怎么看电脑os系统哪个版本os系统怎么查看版本?介绍 怎样才能让步进电机转起来kh01步进控制器怎么设置电动机速度? c语言编程怎么换行 只留文字?介绍 华为手机怎么覆盖安装软件华为怎么把图片悬浮在软件上? 如何在word文档中插入尾注引用同一篇文献脚注怎么合并? layui默认样式怎么设置layui数据表格为什么只显示一行?介绍 鸿蒙系统怎么用手机打开空调鸿蒙系统怎么连接美的空调? 咋样查看支付宝里的个人收款余额支付宝收款码收的款账单能查到余额中查不到?介绍 电脑如何居中打印照片a4打印合同怎么排版? ppt艺术字怎么为嵌入型ppt艺术字文字效果转换怎么设置?介绍 手机克隆后app安装包在哪呢手机克隆怎么找?介绍 是什么原因?

微信公众号