tomcat - 当我设置 -Xmx1024M 时,htop 报告 Tomcat 8.5 消耗了 4GB

标签 tomcat htop

我已通过在 setenv.sh 中设置以下内容,将我的 Tomcat 实例配置为不使用超过 1GB 的 RAM:

$ cat /opt/tomcat8.5/bin/setenv.sh 
#!/bin/sh

export JAVA_OPTS="-Djava.awt.headless=true -server -Xms48m -Xmx1024M -XX:MaxPermSize=512m"

确实,运行中的 Tomcat 实例似乎考虑到了这一点:

$ ps aux | grep -i tomcat-juli.jar | grep -v grep | awk '{print $2}'
26105
$ sudo jinfo 26105 | grep VM\ flagsNon-default VM flags: -XX:CICompilerCount=3 -XX:InitialHeapSize=50331648 -XX:MaxHeapSize=1073741824 -XX:MaxNewSize=357564416 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=16777216 -XX:OldSize=33554432 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC 

并且通过使用 Java VisualVM 附加到正在运行的实例,我看到了一张与上述兼容的图片:

enter image description here

为什么 htop 报告我的 Tomcat 消耗了我 8 GB 内存的一半?

enter image description here

最佳答案

限制堆大小(-Xmx1024M)只限制Java堆的大小。 JVM 可以自由使用尽可能多的“ native ”内存,因为它认为这是运行自身所必需的。

不属于 Java 堆的东西:

  1. 永久代
  2. 线程栈
  3. JIT编译的本地代码

看看Java native memory usage了解如何深入了解在 Java 堆之外使用了哪些内存。

请注意,如果你愿意给你的 JVM 一个完整的 gig 或 RAM,你最好设置 -Xms == -Xmx,否则你只会浪费CPU 会每隔一段时间循环调整内存大小,直到堆达到其最大大小。

关于tomcat - 当我设置 -Xmx1024M 时,htop 报告 Tomcat 8.5 消耗了 4GB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41172326/

相关文章:

Tomcat 返回 403 - 禁止错误

tomcat - 在远程服务器上部署 war + conf( cargo ?)

html - 如何操纵其他网站数据?

linux - htop如何收集linux中的系统信息

ruby - 如何获取系统上正在运行的进程列表并按各种参数对它们进行排序

使用UTF-8字符将SVG转换为PNG的Java代码

apache - 配置 Tomcat 以利用浏览器缓存?

linux - 如何从/proc/meminfo 计算系统内存使用量(如 htop)

java - Htop 显示具有不同 pid 的多个 java 进程