Java进程消耗的内存不仅仅是简单的最大堆大小。在这里,我们将看到如何根据我们在JVM的启动参数中提供的参数来确定预期的本机内存大小。
可以按照以下步骤计算应用程序使用的内存:
1.我们将通过修改股票启动脚本为weblogic管理服务器设置适当的值。导航到域的主目录:
%WLS_HOME%/ user_projects / domains / my_domain /
根据需要用相关域替换my_domain。
2.通过运行startWeblogic.cmd脚本启动管理服务器。
3.在bin文件夹中,打开setDomainEnv.cmd文件。我们将在短期内编辑文件,但是首先我们将研究我们希望设置的值。
4.我们将最大和最小Java堆大小设置为相同的值。这会将堆内存大小设置为预定义的静态值,因此它不能增长或缩小。
-Xms1024m –Xmx1024m
5.向1,024 MB堆中添加预定义的永久代内存大小,我们将其设置为128 MB。现在,我们的总容量为1,152 MB。
-XX:PermSize = 128m -XX:MaxPermSize = 128m
6.使用将JIT代码缓存大小设置为16 MB。这使我们总共有1,168 MB。
-XX:ReservedCodeCacheSize = 16m
7.将线程堆栈大小设置为已知值。我们将使用128 KB作为起始值。Weblogic大量使用线程来满足您的业务逻辑请求。因此,我们不能只是将此值添加到我们的运行内存计数中
-Xss128k
8.为了计算JVM中的线程使用的内存总量,我们需要确定WebLogic管理服务器进程中的线程数。我们可以使用jconsole应用程序执行此操作,该应用程序将与管理服务器在同一台计算机上启动(因此我们不必设置任何远程访问策略)。在%MIDDLEWARE_HOME%/ your_hotspot_jdk_ version / bin目录中,打开jconsole.exe。
当jconsole运行时,通过从列表中选择进程并单击Connect将其附加到管理服务器。
在jconsole中,选择mbean选项卡,然后打开java.lang文件夹和Threading包。选择属性’; 您将看到ThreadCount属性=43;
我们将其乘以新的“线程堆栈大小”值(128 KB),得到的值为5.504 MB。这使我们总共可以运行1,173 MB。
9.最后,对文件进行更改并运行程序。这是我们在setSoaSuiteDomainEnv.cmd文件中所做的完整更改:
设置JAVA_OPTIONS =%JAVA_OPTIONS%
设置DEFAULT_MEM_ARGS = -Xms1024m -Xmx1024m -Xss128k设置PORT_MEM_ARGS = -Xms1024m -Xmx1024m -Xss128k
@REM此部分仅在非JRockit VM上运行
如果“%JAVA_VENDOR%” ==“ Oracle”转到OracleJVM
设置DEFAULT_MEM_ARGS =%DEFAULT_MEM_ARGS%-XX:PermSize = 128m
-XX:MaxPermSize = 128m -XX:ReservedCodeCacheSize = 16m
设置PORT_MEM_ARGS =%PORT_MEM_ARGS%-XX:PermSize = 128m
-XX:MaxPermSize = 128m -XX:ReservedCodeCacheSize = 16m
Java进程使用的内存比仅对象内存堆空间更多。在内部,内存布局如下图所示:
不幸的是,很难确切地确定操作系统如何原生地处理Java进程的内存。但是,有些选项可用于控制JVM的内存分配。
Java进程的总本机内存大小是通过将以下各项相加得出的:
1.最大对象堆大小(Xmx):用于保存Java对象的内存区域。
- PermGen内存大小(XX:MaxPermSize):存储Java类模板的内存区域。
3.线程堆栈大小(乘以运行时线程数)(XX:ThreadStackSize或Xss):这可配置最大线程调用堆栈深度。
- JIT代码缓存大小(XX:ReservedCodeCacheSize):这是为JVM响应代码路径而执行的优化保留的内存区域。
5.本机内存:来自JVM本身的本机内存,以及正在使用的所有本机库(在Internet上查找JNI)。
现在,我们可以更接近地估算Java进程的总内存大小。这将使我们能够根据物理或虚拟主机上的可用本机内存来调整JVM的大小。
从上面可以看到,我们的最终本机内存计算比最大堆空间高出近150 MB,如果您尝试将JVM共同放置在主机上,这并不是一个小小的改变。您可以使用Windows上的Process Explorer,Linux上的top命令或Solaris上的ps和prstat命令等工具监视本机内存。




