当前位置: 首页 > 知识库问答 >
问题:

当不支持-XX: PrintFlagsFinal时,如何找到默认的MaxPermSize?

施喜
2023-03-14

我正在使用一个系统,在这个系统中,许多作为Java应用程序实现的作业可以同时启动。每个作业在一个单独的JVM中运行。

其中一些工作需要比其他工作更大的永久发电机。然而,由于操作系统内存有限,允许所有作业使用最大值是不可行的。

因此,我想为每个作业指定-XX: MaxPermSize。目前,作业在没有任何-XX: MaxPermSize参数的情况下运行,因此它们必须使用默认值。但是如何找出默认值是什么?

我已经在非服务器类机器上看到了Xmx、Xms和MaxPermSize的默认值,其中公认的答案是运行<code>java-XX:PrintFlagsFinal</code>,它应该输出默认值。但是,我运行的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

共有1个答案

魏宏邈
2023-03-14

不同区域的默认值将取决于:

  • 正在使用的收集器(如果您使用 CLI 参数显式指定它,这将取决于 Java 版本)。
  • 使用 CLI 参数指定的堆的大小等。GC将根据某些比率分配空间。
  • 在计算机上安装(或可能可用)RAM。

如何找到:

  • 从GC日志文件(-Xloggc:gc.log)中,我希望至少在完整的GC日志中,GC会报告Perm Gen大小。请参阅底部的示例。您可以获取具有代表性的gc日志文件,并从中找到最大烫发生成大小,并据此决定。
  • 其他参数,如PrintFlagsFinal等(特定于Java版本)

我来看看1.6的选项,看看能不能找到什么东西,更新帖子,否则是时候升级了。:-)

以下是来自不同GC(Metaspace,CMS Perm)的3个例子

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]
 类似资料:
  • 问题内容: 我正在远程Windows XP的Java 6 VM上运行Java应用程序,可以在其上运行jvisualvm.exe来自动连接到正在运行的应用程序。 现在,我需要从本地计算机连接该应用程序,但是我不知道远程计算机的JMX端口号。在哪里可以找到它?或者,是否必须使用某些VM参数重新启动该应用程序以指定端口号? 看完问题“ 如何在服务器中查找JMX端口”后,我在远程计算机上执行了命令 但一无

  • 我试图格式化一个即时到字符串使用新的Java8日期和时间API和以下模式: 使用上面的代码,我得到一个异常,它抱怨一个不支持的字段:

  • 我有一个VUE2项目,我编写了一个简单的函数来翻译日期中的月份,我想将它导入到我的一个组件中,但是我得到了一个错误: 在“@/utils/date-translation”中找不到导出“default”(导入为“translate date”) src文件夹中的相对文件路径是正确的,我导出的函数如下所示: 然后我将其导入到组件中,如下所示: 我做错了什么?

  • 设置: 我的web应用程序有OpenAM OpenDJ与联合服务器交互,以便通过SAML2提供SSO服务。授权访问我的应用程序的用户列表是OpenDJ的一部分。 工作原理- 当用户第一次启动链接并且应用程序确定他尚未登录时,用户将被重定向到IDP URL进行身份验证。IDP通过消费者URL提供SAML2响应。在收到SAML2响应时,我的应用程序会确定用户是否是我的LDAP的一部分,从而允许他访问,

  • 问题内容: 我在应用程序中看到,解析的XML文件中的xinclude在Java XSLT转换中不起作用。 但是,尽管我这样做: 我没有将变压器工厂专门设置为返回“ null”。 我的问题:默认的Java(1.6或6)是否支持xinclude,还是必须添加替代的XSLT解析器(如Apache Xerces)? 问题答案: 根据规范,自Java 1.5(5)以来一直提供支持。我相信XInclude支持

  • 问题内容: 当没有从查询获得的数据时,我想显示默认消息。 例如让我们进行查询 从id = 100的雇员中选择empname 如果没有数据与该搜索匹配,我希望得到结果,或者应该显示所需的结果。 因此,我应该如何编写SQL查询来实现这一目标。 我正在使用Oracle 10g。 问题答案: 你有包裹到另一个或没有行会被退回。没有行的地方就不会有值。