gpt4 book ai didi

java - 关于Java应用程序的内存使用

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:32:00 26 4
gpt4 key购买 nike

我对 Java Web 应用程序的内存使用有疑问..

在任务管理器中,Tomcat服务似乎占用了8,677,544,000字节的内存

在jvisualvm中,部署在那个tomcat下的java应用的内存使用情况如下

Heap: 
Used: 2,304,233,184 B
Size: 8,589,934,592 B
Max: 10,737,418,240 B

Permgen:
Used: 80,272,056 B
Size: 536,870,912 B
Max: 536,870,912 B

Tomcat的Service.bat文件中的内存参数:

-Xms8192m;-Xmx10240m;-XX:PermSize=512m;-XX:MaxPermSize=512m

现在,我的问题是,无论我设置什么 MaxHeapFreeRatio,可用空间都不会缩小,即使已用空间有时会缩小。

任何人都可以告诉我为什么会这样..有没有办法缩小可用空间以便系统上运行的其他进程可以利用它?

我使用的是最新版本的 JDK 1.7 和 Tomcat 7。

最佳答案

使用参数 -Xms8192m,您告诉 Tomcat(好吧,JVM)在启动时分配至少 8 GiB 的堆空间。

JVisualVM 统计数据支持这一点,但也告诉您应用程序使用了大约 2 GiB。

将启动值降低到较低的值(从 2 GiB 开始)。请注意,如果应用程序需要更多堆空间,您已经告诉它您最多可以使用 10 GiB -Xmx10240m,因此可能也值得将此值也调低(可能减至 4 GiB)。

显然,如果您开始出现 OOME,则需要增加这些值,直到应用程序有足够的空间可以愉快地运行(假设没有内存泄漏等)。

另外,请注意,进程大小将始终大于堆大小,因为它还包括永久生成空间 (-XX:MaxPermSize=512m) 和 JVM 本身的内部内存/库.


基本示例:

-Xms512m;-Xmx1536m;-XX:PermSize=64m;-XX:MaxPermSize=256m

此处的最小值为 512 MiB 堆,64 MiB perm gen,因此最小操作系统进程大小约为 600 - 650 MiB。

随着应用程序分配更多空间直至达到最大值(1.5 GiB 堆,256 MiB perm gen),我预计进程大小将达到约 2 GiB。

现在,如果我们使用您的值:

-Xms8192m;-Xmx10240m;-XX:PermSize=512m;-XX:MaxPermSize=512m

此处的最小值为 8 GiB 堆,512 MiB perm gen,因此最小操作系统进程大小约为 8.6 GiB - 与您所看到的差不多。

使用最大值,进程大小将达到近 11 GiB。

关于java - 关于Java应用程序的内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12753919/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com