我正在使用一个系统,可以同时启动许多作为Java应用程序实现的作业。每个作业都在一个单独的JVM中运行。
其中一些工作需要比其他工作更大的permgen。但是,由于操作系统内存有限,因此不允许所有作业使用最大值。
因此,我想为每项工作指定-XX:MaxPermSize
。目前,作业运行时没有任何-XX:MaxPermSize
参数,因此它们必须使用默认值。但是如何找出默认值是什么?
我见过Default values for Xmx, Xms, MaxPermSize on non-server-class machines,其中接受的答案是运行 java -XX:+PrintFlagsFinal
,它应输出默认值。但是,运行的JVM版本不支持该参数(无法识别的VM选项' + PrintFlagsFinal' )。目前不支持更新到更新的JVM。
那么我找到默认值的选择是什么?
系统信息:
> java -version
Java(TM) SE Runtime Environment (build 1.6.0_14-b08)
Java HotSpot(TM) 64-Bit Server VM (build 14.0-b16, mixed mode)
> cat /etc/issue
Welcome to SUSE Linux Enterprise Server 11 SP2 (x86_64) - Kernel \r (\l).
> uname -r
3.0.101-0.7.17-default
答案 0 :(得分:1)
各个地区的默认值取决于:
如何找到:
-Xloggc:gc.log
),我预计至少在完整GC日志中,GC会报告Perm Gen大小。见底部的例子。你可以拿一个代表性的gc日志文件,从中找到最大的perm gen大小,然后根据它来决定。我将查看1.6选项以查看是否可以找到某些内容并更新帖子,否则是时候升级了。 : - )
以下是来自不同GC的3个示例(Metaspace,CMS Perm& PSPermGen是您正在寻找的):
2014-11-14T08:43:53.197-0500: 782.973: [Full GC (Ergonomics) [PSYoungGen: 54477K->0K(917504K)] [ParOldGen: 1042738K->367416K(1048576K)] 1097216K->367416K(1966080K), [Metaspace: 46416K->46389K(1091584K)], 0.4689827 secs] [Times: user=3.52 sys=0.07, real=0.47 secs]
2014-10-29T06:14:56.491-0400: 6.754: [Full GC2014-10-29T06:14:56.491-0400: 6.754: [CMS: 96098K->113997K(5242880K), 0.7076870 secs] 735545K->113997K(6186624K), [CMS Perm : 13505K->13500K(51200K)], 0.7078280 secs] [Times: user=0.69 sys=0.01, real=0.71 secs]
2014-10-29T21:13:33.140-0500: 2644.411: [Full GC [PSYoungGen: 2379K->0K(695296K)] [ParOldGen: 1397977K->665667K(1398272K)] 1400357K->665667K(2093568K) [PSPermGen: 106995K->106326K(262144K)], 1.2151010 secs] [Times: user=6.83 sys=0.09, real=1.22 secs]