关于JVM不得不知道的一些基础点_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
2
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3970 | 回复: 1   主题: 关于JVM不得不知道的一些基础点        下一篇 
yunpeng.xian
注册用户
等级:少校
经验:993
发帖:34
精华:0
注册:1970-1-1
状态:离线
发送短消息息给yunpeng.xian 加好友    发送短消息息给yunpeng.xian 发消息
发表于: IP:您无权察看 2014-8-14 18:06:25 | [全部帖] [楼主帖] 楼主

首先各个版本的JDK的JVM的参数是不一样的,我在刚开始就吃了这个亏,基本上1.4以后的JVM参数差不多,各位在查GC参数时注意:

下面一个网址可以看一下,如果不想去看JDK文档的http://blog.csdn.net/zsuguangh/article/details/6429667

我在输出日志的时候,一个朋友提供了两种途径:

北京联动北方科技有限公司

北京联动北方科技有限公司

上面两种我还没来的及实验,料想应该都差不多吧,而我用的是下面的方法:

北京联动北方科技有限公司

将参数设在:echo JAVA Memory arguments: %MEM_ARGS%之前这样你就可以看到你的设置在管理服务器启动时的命令界面里了

下面摘抄的一段关于基本参数的意思:

-Xms 设定一开始的Heap Size(堆大小)
-Xmx 设定Heap Size的最大值
-XX:NewSize 调整JVM的Young Generation 的size大小
-XX:MaxNewSize 调整JVM的Young Generation 的size最大值
-Xmn  Young Generation的size,NewSize 和 MaxNewSize设定为一样。
-XX:NewRatio 控制Young generation的比例,如-XX:NewRatio=3表示Young generation与Old generation的比例为1:3,即Young generation佔1/4,Old generation佔3/4。
如果将Heap Size设的越大,GC的週期就会拉长,而且每次GC的时间也会越长。

PermGen space


-XX:PermSize 这一部分是用於存放Class和Meta的讯息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程式运行期间对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web伺服器对JSP进行pre compile的时候。
整个记忆体配置会像这样

-XX:+DisableExplicitGC 加了这个参数会停止掉WLS或是程式内直接呼叫GC,减少不必要的GC,将GC交由JVM去执行。
Garbage Collection描述:
Garbage Collection分多种等级,0级就是全部的垃圾回收(Full GC),会回收Old generation中的垃圾;1级或以上为部分垃圾回收,只会回收Young中的垃圾,会发生OutOfMemory通常是產生於Old generation或Perm段垃圾回收后,仍然没有记忆体空间来存放新的Java 物件的情况。
当一个URL被访问时,记忆体的配置过程如下:
A. JVM会试图为Java的相关对象在Eden中初始化一块记忆体空间
B. 当Eden空间足够时,记忆体配置结束。否则到下一步
C. JVM会试图释放在Eden中所有不活跃的对象(这是属於1或更高级的垃圾回收);释放后若Eden空间仍然不足以放入新对象,则会试图将部分Eden中活跃的对象放入Survivor区/OLD区
D. Survivor区被用来作为Eden及OLD的中间交换区域,当OLD区空间足够,Survivor区的对象会被移到Old区,否则被保留在Survivor区
E. 当OLD区空间不足时,JVM会在OLD区进行完全的垃圾收集(0级)
F. 完全垃圾收集后,若Survivor及OLD区仍然无法存放从Eden复製过来的部分对象,就会导致JVM无法在Eden区为新的对象配置出记忆体区块,產生"out of memory的错误"
但千万不要完全按照上面的,版本不同会有一些不同的地方,建议最好查JDK文档

并且对于日志分析工具gcviewer-1.32请注意也有限制并不是每个版本的都可以分析,下面是它支持的格式。

Supported verbose:gc formats are:
- Oracle JDK 1.8 (experimental support) -Xloggc: [-XX:+PrintGCDetails] [-XX:+PrintGCDateStamps]
- Sun / Oracle JDK 1.7 with option -Xloggc: [-XX:+PrintGCDetails] [-XX:+PrintGCDateStamps]
- Sun / Oracle JDK 1.6 with option -Xloggc: [-XX:+PrintGCDetails] [-XX:+PrintGCDateStamps]
- Sun JDK 1.4/1.5 with the option -Xloggc: [-XX:+PrintGCDetails]
- Sun JDK 1.2.2/1.3.1/1.4 with the option -verbose:gc
- IBM JDK 1.3.1/1.3.0/1.2.2 with the option -verbose:gc
- IBM iSeries Classic JVM 1.4.2 with option -verbose:gc
- HP-UX JDK 1.2/1.3/1.4.x with the option -Xverbosegc
- BEA JRockit 1.4.2/1.5/1.6 with the option -verbose:memory [-Xverbose:gcpause,gcreport] [-Xverbosetimestamp]
Best results are achieved with: -Xloggc: -XX:+PrintGCDetails -XX:+PrintGCDateStamps


下面是我的分析结果 可惜我看不懂:

北京联动北方科技有限公司




赞(0)    操作        顶端 
koei
版主
等级:大校
经验:4186
发帖:7
精华:0
注册:2011-7-21
状态:离线
发送短消息息给koei 加好友    发送短消息息给koei 发消息
发表于: IP:您无权察看 2014-8-18 10:03:22 | [全部帖] [楼主帖] 2  楼

主要是归为两大系列:源自Sun的按代的做法,和IBM的按簇的做法。。。



赞(0)    操作        顶端 
总帖数
2
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论