专注Java教育14年 全国咨询/投诉热线:444-1124-454
星辉LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 JVM内存设置

JVM内存设置

更新时间:2021-11-19 10:01:18 来源:星辉 浏览934次

默认内存设置

StreamBase Studio 和 StreamBase Server 的 Java VM 内存设置以不同方式独立定义,如本页后面部分所述。Studio 和 Server 的默认设置略有不同。此表中的设置适用于在 Windows 和 UNIX 系统上运行的 64 位服务器:

Java VM 内存设置 默认 StreamBase Studio 设置 默认 StreamBase 服务器设置
-Xms 256m 1克
-Xmx 768m 2克

在-XX:MaxPermSize使用时设置不再使用的Java 8,而忽略此设置了JDK 8 StreamBase版本7.6.0及更高版本捆绑在一起。

此外,默认的 JVM 设置包括-XX:+UseCompressdOops.

在大多数情况下,您只需要关注 StreamBase Server 的 JVM 设置,将在以下部分进行讨论。要在 Studio 中编辑非常大的应用程序,您可能需要单独增加 Studio 的内存占用,如StreamBase Studio 的 JVM 内存中所述。

重要的如果您对上表中服务器的任何 JVM 内存参数进行显式设置,则所有 StreamBase 服务器默认设置都将被禁用且不再适用。因此,例如,如果您明确设置 ,-Xmx4g则 的默认设置将-Xms不再适用。最简单的解决方案是始终同时设置这两个设置中的任何一个。

您可以通过多种方式进行显式 JVM 设置以覆盖默认值:在服务器配置文件中、在命令行中使用-J选项、使用STREAMBASE_JVM_ARGS环境变量或在自定义启动脚本中。此注释适用于您可能设置 JVM 内存设置的所有方式。

内存资源的本机代码竞争

请记住,在一个 Java VM 中运行的 StreamBase Studio 在具有自己的内存限制的单独 JVM 进程中启动 StreamBase Server。仅增加 Studio 的内存设置无助于服务器加载大型应用程序;事实上,它可能会妨碍它。

从某种意义上说,Studio 和 Server 必须在内存受限的系统上争夺内存资源。因此,仅将 Studio 的 JVM 内存设置增加到支持类型检查和编辑大型应用程序的可接受响应时间的最小数量。例如,在用于编辑大型 StreamBase 应用程序的 8 GB 64 位系统上,您最多可以为 Studio 分配 2 GB,其余用于服务器启动。

Server启动过程中由native代码分配的任何内存都是在JVM启动之前分配的。因此,本机代码服务器组件分配的内存在 JVM 堆之外,并与 Studio 和服务器竞争整体内存资源。

本机代码内存分配包括由sbd启动器的本机代码部分分配的任何内存,以及由本机代码运算符和适配器分配的内存,以及.so由运算符或适配器调用的本机代码 DLL 或文件分配的内存。例如,sbd启动器的本机代码部分分配一些内存用作基于磁盘的查询表的缓存。如果将服务器配置文件disk-querytable-cache的元素的参数调大,则分配的内存在服务器的JVM堆中不可用。

需要重申的是,Studio 是为应用程序的创作、测试和调试而设计的,但并非旨在托管 StreamBase 服务器的高性能运行或服务器运行的基准测试。

StreamBase 服务器的 JVM 内存

如果您在没有配置文件的情况下启动 StreamBase Server,它将使用上表中显示的内部默认设置启动。您可以在服务器配置文件中调整 StreamBase Server 的 JVM 内存设置。

当您在 Studio 中生成默认 StreamBase Server 配置文件并选择包含默认内容时,或者当您使用sbd –s生成默认配置文件时,新文件包含元素的以下建议设置:

<java-vm>
  <param name="jvm-args" value="
    -XX:+使用G1GC
    -XX:MaxGCPauseMillis=500 "/>
</java-vm>

垃圾收集策略设置中描述了默认的 GC 设置。

通过为上表中的-X设置添加条目,增加服务器下次启动时可用的内存。对于中型应用程序,请使用如下设置:

-Xms1g -Xmx2g

对于大型应用程序,请使用以下设置:

-Xms2g -Xmx4g

StreamBase Studio 的 JVM 内存

一般情况下,StreamBase 用户不需要为运行 Studio 调整Java虚拟机内存设置。当 Studio 在同一台机器上运行或调试应用程序时,它会将 StreamBase Server 作为具有自己内存设置的单独 Java 进程启动。

当 Studio 启动应用程序时,它会接受位于应用程序项目文件夹根目录下的名为服务器配置文件中的设置sbd.sbconf。(Studio 不使用其他名称的配置文件,或放置在其他文件夹中的配置文件。)因此,sbd.sbconf只要有足够的系统内存(包括虚拟内存)以支持启动。

对于那些编辑具有数百个组件和许多子模块的非常大的 StreamBase 应用程序的人来说,存在一个例外。在这种情况下,更大的 Studio 内存设置可以改善类型检查时间和系统响应时间。

通过STREAMBASE_STUDIO_VMARGS为 Studio 启动的环境设置环境变量来调整 Studio 的 JVM 内存设置。

STREAMBASE_STUDIO_VMARGS=-Xms1024M -Xmx2048M

验证您的机器是否有足够的系统内存来支持同时编辑和启动大型应用程序。64 位 Windows 和 Linux 系统应该有 4 GB 以利用大型 JVM 设置,建议使用更多。

更改 Studio JVM 内存设置时请遵循以下规则:

您可以使用STREAMBASE_STUDIO_VMARGS环境变量来设置 Studio 的 Java 属性及其 JVM 内存设置,请记住在向变量添加属性设置时始终指定内存设置。这可能意味着重新指定默认设置。

该-XX:MaxPermSize设置被 StreamBase 提供的 JDK 8 忽略。

-Xmx逐步提高设置,停下来测试结果。尝试一次将 512M 添加到该-Xmx值,然后运行 ​​Studio 以测试其响应能力:

-Xms512M

-Xmx1024M

接下来,尝试:

-Xms1024M

-Xmx1536M

等等。

在安装了 8 GB RAM 的 64 位系统上运行 64 位 Studio 以编辑大型应用程序时,请考虑以下设置:

-XX:+打印编译

诊断设置和工具

您可以配置 StreamBase Studio 以显示其自己的 Java 堆内存使用情况。运行Window → Preferences,选择顶层General页面,然后选中Show heap status复选框。此后,Studio 在状态栏的最右侧(位于 Studio 窗口的右下角)显示当前和最大保留堆内存使用情况。

要对 StreamBase Server 的内存使用情况进行诊断和故障排除,请考虑在jvm-args参数中添加这些附加设置。除非特别覆盖,否则这些设置会导致向服务器控制台(或 Studio 中的控制台视图)报告其他信息。

要查看有关 Java 即时 (JIT) 编译器 (HotSpot) 的信息,请尝试添加:

STREAMBASE_STUDIO_VMARGS=-Xms1024M -Xmx4096M

如果 JVM 使用过多内存,或者花费太多时间执行垃圾收集,请尝试添加此参数以获取更具体的信息:

-详细:gc

有了这个参数,JVM 会定期生成输出,告诉您 Java 堆大小有多大以及在垃圾收集上花费了多少时间。Java 8 的垃圾收集子系统比早期版本有了很大改进,因此对于捆绑 JDK 8 的 StreamBase 版本 7.6.0 及更高版本,此设置可能不太必要。

如果为 StreamBase 运算符执行生成的代码不是最佳的,请尝试添加-Xprof到 JVM 参数集。再次运行您的应用程序,然后将生成的信息发送给您的 TIBCO StreamBase 代表。

您还可以使用 StreamBase 提供的或作为其 Java 安装的一部分包含的以下工具来检查内存使用情况。这些工具按照应用程序级别到 Java 对象级别检查的顺序列出。

使用StreamBase Manager或StreamBase Monitor查看应用程序级内存使用模式和实时队列大小。

使用 StreamBase分析来查看操作员和队列随时间的变化。

使用 Java JConsole 实用程序查看 JVM 级内存使用模式、实时对象和线程。

使用 Java jmap实用程序可以随时查看堆上的 Java 对象。也可以使用Eclipse插件MAT(Memory Analyzer Tool)将jmap的输出以图形的形式展示出来。

使用 Java jstack实用程序可以随时查看哪些Java线程在工作。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>