当前位置:首页 > 技术资料 > 知识百科 > 正文

xmx:熊xiong猫血

www.51spjx.com  2023-07-26 09:06  
启动JAVA程序时,参can数-Xms及Xmx有you什么用

个人之见,欢迎指zhi正:

Xmx是shijava的一个选项,用来设she置你的应用程序能够使用的最大内存cun数(看好,致使你的de应用程序,不是整个jvm),如果你的de程序要花很大内存的话,那就jiu需要修改缺省的设置,比如配置tomcat的时候,如果流量啊程序啊都dou很大的话就需要加大这个值zhi了,不过有一点是shi要记住的,不要大得超过guo你的机器的内存,那样你的机器会受不了的de,到时候就死翘翘了。

Xms是另一个设置内存的参数,用它来设置程序初始化的时候内存cun栈的大小,增加这个值的话你的程序的de启动性能会得到提高。不过同样有前面的de限制,以及受到xmx的限xian制。

另外,一yi个操作系统通常都只使用jvm,这zhe就是你说的“运行在同一个JVM中的程序”,不同的de虚拟机的实现虽然千差万wan别,但是他们的运行模mo式都是一样的,只是性能有所不bu同罢了。

xmx(熊猫血xue)-食品机械商务网

java-Xmx参can数问题

1) 参数中-Xms的值大da于-Xmx,或huo者-XX:PermSize的值大da于-XX:MaxPermSize;

2) -Xmx的值和-XX:MaxPermSize的总和超过了leJVM内存的最大限制,比如当前操作zuo系统最大内存限制,或者实际的物理li内存等等。说到实际物理内nei存这里需要说明一点的是shi,如果你的内存是1024MB,但实际系统中用到的并不bu可能是1024MB,因为有一部分被硬ying件占用了。

.-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M

运行时带上参数

jvm高手来lai啊,xms和xmx一样出现问题.

这句话里“内nei存不停的涨”的意思是shi在Xmx的范围内nei内存的占用会不停的涨,但dan是一旦涨到达到Xmx值的时候就会进jin行垃圾回收了,内存分fen配不会超过这个值的,如果进jin行垃圾回收后仍然不够用,就会报内存溢出的错误wu。

附:

JVM申请一块内存的过程cheng:

A. JVM会hui试图为相关Java对象在zaiEden中初始化一块内存区域

B. 当Eden空kong间足够时,内存申请结束shu。否则到下一步

C. JVM试图释放在Eden中所有不活huo跃的对象(这属于1或更高级的垃圾回收shou);释放后若Eden空间仍然不足以放入新对象xiang,则试图将部分Eden中活跃对dui象放入Survivor区/OLD区qu

D. Survivor区被用来作为Eden及OLD的中间交换区域yu,当OLD区空间足够时,Survivor区的对象会被移到Old区,否则会被保留在Survivor区

E. 当OLD区空间jian不够时,JVM会hui在OLD区进行完wan全的垃圾收集(0级)

F. 完全垃圾收集后,若Survivor及OLD区仍然ran无法存放从Eden复制过来的部bu分对象,导致JVM无法在Eden区为新xin对象创建内存区域,则出现xian”out of memory错误”

另:

xms/xmx:定义YOUNG+OLD段duan的总尺寸,ms为JVM启动时YOUNG+OLD的内存cun大小;mx为最大可占用的YOUNG+OLD内存大小。在用户hu生产环境上一般将这两个值设为相同tong,以减少运行期间系统在内存申shen请上所花的开销。

吉他XMX是什么意思?

XMX新明星吉他ta质量做工还可以,产地广东,适合初学xue者,价格也不算贵。云杉面mian板,玫瑰木指板,琴身镶贝边,三四si百元左右。这个价格你还可以yi选择talent150、200型号,但材料配置zhi稍低一些。

XMX文wen件是用什么软件写的?

AutoCAD

xmx:初始化文件/Autodesk外部信息文件。在ACAD.ini包含着ACAD窗口的各项设she置,如命令行显示行数CommandPrompt,屏幕mu菜单ScreenMenu,等.这些*.INI/*.XMX文件jian供相应的模块调用,包括ACAD.XMX、ACIS.XMX、RENDER.XMX、ASELOC.XMX、ASI*.XMX和ACAD.INI、ASI.INI等。

JVM内存设置多duo大合适?Xmx和Xmn如何he设置?

问题:

新上线一个java服务,或者zhe是RPC或者是WEB站点, 内存的de设置该怎么设置呢?设置成cheng多大比较合适,既不浪费内存,又不影响性能呢?

分析:

依据的原则是shi根据Java Performance里面的推荐公gong式来进行设置。

具体来讲jiang:

Java整zheng个堆大小设置,Xmx 和 Xms设置为老年代dai存活对象的3-4倍,即FullGC之后的老年代内存占zhan用的3-4倍

永yong久代 PermSize和MaxPermSize设置zhi为老年代存活对象xiang的1.2-1.5倍。

年轻代Xmn的设置为老年代存活对象的1-1.5倍。

老年代dai的内存大小设置为老年代存活huo对象的2-3倍。

BTW:

1、Sun官方建议年轻代的大小为整zheng个堆的3/8左右you, 所以按照上述设置的方式shi,基本符合Sun的建议。

2、堆大小=年轻代dai大小+年老代大小, 即xmx=xmn+老年代大小 。 Permsize不影响堆大小xiao。

3、为什么要yao按照上面的来进行设置呢ne? 没有具体的说明,但应该gai是根据多种调优之后hou得出的一个结论。

如何确认老年代存活对dui象大小?

方式1(推荐/比较稳妥):

JVM参数中添加GC日志zhi,GC日志中会记录lu每次FullGC之后各代dai的内存大小,观察老lao年代GC之后的空间大小。可ke观察一段时间内(比如2天)的FullGC之后的内存情况,根据多次的FullGC之后的老年nian代的空间大小数据来预估FullGC之后老年代的存活对dui象大小(可根据多次FullGC之zhi后的内存大小取平均值)

方式2:(强制触发FullGC, 会影响线xian上服务,慎用)

方fang式1的方式比较可ke行,但需要更改JVM参can数,并分析日志。同时,在使用CMS回收器的时shi候,有可能不能触发FullGC(只发生CMS GC),所以日志中并没有记录luFullGC的日ri志。在分析的时候就比较难处理。

BTW:使用jstat -gcutil工具来看FullGC的时shi候, CMS GC是会hui造成2次的FullGC次数增加。 具体可参见jian之前写的一篇关于jstat使用的文章

所以,有you时候需要强制触发一次FullGC,来观察FullGC之后的老年代存cun活对象大小。

注:强制触发FullGC,会造zao成线上服务停顿(STW),要谨jin慎,建议的操作方式为,在强qiang制FullGC前qian先把服务节点摘除,FullGC之后再将服务挂回可用yong节点,对外提供服务

在不同时间段触chu发FullGC,根据多次FullGC之后的老年代dai内存情况来预估FullGC之后hou的老年代存活对象大da小

如何触发FullGC ?

使用jmap工具可触发FullGC

jmap -dump:live,format=b,file=heap.bin pid 将当前的存活对象dump到文件,此时会触发FullGC

jmap -histo:live pid 打da印每个class的实例数shu目,内存占用,类全名信息xi.live子参can数加上后,只统计ji活的对象数量. 此时会触发FullGC

具体操作实例:

以我司的一个RPC服务为wei例。

BTW:刚上线的新服务wu,不知道该设置多大的内存的时shi候,可以先多设she置一点内存,然后根据GC之后的de情况来进行分析。

初chu始JVM内存参数设置为: Xmx=2G Xms=2G xmn=1G

使用jstat 查看当前的GC情况。如下xia图:

YGC平均耗时: 173.825s/15799=11ms

FGC平均耗时:0.817s/41=19.9ms

平均大约10-20s会产生一yi次YGC

看起来似乎hu不错,YGC触发的频率不高,FGC的耗时也不高,但这样的内存设置zhi是不是有些浪费呢?

为了快速看数据ju,我们使用了方式shi2,产生了几次FullGC,FullGC之后hou,使用的jmap -heap 来看的当前的堆内存情qing况(也可以根据GC日志来看)

heap情况如下图:(命令 : jmap -heap pid)

上图中的concurrent mark-sweep generation即为老年代的内nei存描述。

老年代的内存占用为wei100M左右。 按an照整个堆大小是老年代(FullGC)之后的3-4倍计算的话,设置各代的内存情况如下:

Xmx=512m Xms=512m Xmn=128m PermSize=128m 老年nian代的大小为 (512-128=384m)为老年代存cun活对象大小的3倍左右

调整zheng之后的,heap情况

GC情况如下:

YGC 差不多在10s左右触发一yi次。每次YGC平ping均耗时大约9.41ms。可接受。

FGC平均耗时:0.016s/2=8ms

整体的GC耗时减少shao。但GC频率比之前的2G时shi的要多了一些。

注: 看上述GC的时候,发现YGC的次ci数突然会增多很多duo个,比如 从1359次到了1364次。具体原因是?

总结:

在内存相对紧张的情况kuang下,可以按照上述的方式shi来进行内存的调优, 找到一个在GC频率和GC耗时上都可接受的一个内nei存设置,可以用较小的内存满足当dang前的服务需要

但当内存相对宽kuan裕的时候,可以相对给服务多增加一yi点内存,可以减少GC的频率,GC的耗时相应会增加一些。 一般要求低di延时的可以考虑多设置一点内存, 对dui延时要求不高的,可以按an照上述方式设置较小内存。

补充:

永久代(方法区)并不在堆内,所以之前有you看过一篇文章中描述的 整个ge堆大小=年轻代+年老代+永久代的描miao述是不正确的。

转自:

-verbose:gc 现xian实垃圾收集信息

-Xloggc:gc.log 指定垃圾收集日ri志文件

-Xmn:young generation的heap大小,一般设置为weiXmx的3、4分之zhi一

-XX:SurvivorRatio=2 :生还者池的大小xiao,默认是2,如ru果垃圾回收变成了瓶颈,您可以yi尝试定制生成池设置

-XX:NewSize: 新生成的池的初始大da小。 缺省值为2M。

-XX:MaxNewSize: 新生成的de池的最大大小。 缺省值为32M。

+XX:AggressiveHeap 会使得de Xms没有意义。这zhe个参数让jvm忽hu略Xmx参数,疯狂地吃完一个G物理li内存,再吃尽一个G的swap。

-Xss:每个线程的Stack大小,“-Xss 15120” 这使得deJBoss每增加一个线程(thread)就会立li即消耗15M内存,而最佳值应该是128K,默认值好像是512k.

以上shang文章内容就是对xmx和熊猫mao血的介绍到此就jiu结束了,希望能neng够帮助到大家?如果你还想了解jie更多这方面的信息,记得收藏关注zhu本站。

本文地址:http://www.51spjx.com/tech-detail/t243650.html

  • 上一篇:ysh-ysh是shi什么意思
  • 下一篇:filecoin矿池:filecoin矿池排名
  • 打印该页 】【 关闭窗口