一个关于jvm堆溢出引发的思考

2023-11-20

在本地测试无误的程序,放上正式服时,出现了堆溢出,本地是Windows系统下的,服务器是linux系统,后来经过测试发现是我在本地跑程序时,在eclipse中添加了如下参数:


此处先解释下上面各参数的的含义:
-Xms512m 堆的最小值 
-Xmx1024m 堆的最大值 
另外jvm垃圾回收采用分代搜集的方法,把堆分为三个部 分,新域,旧域和永久域。Jvm生成的所有新对象放在新域中。一旦对象经历了一定数量的垃圾收集循环后,便获得使用期并进入旧域。在永久域中jvm则存储 class和method对象。就配置而言,永久域是一个独立域并且不认为是堆的一部分 
-XX:MaxPermSize=512 设置永久域的最大值, 
-XX:ReservedCodeCacheSiz e=64m  缓存,可以自己改,超过也溢出,不过,溢出也无所谓,忽略即可
我猜想是不是因为tomcat没有设置上述参数导致的;因为一开始我都是依赖eclipse来启动tomcat的,所以tomcat在启动时就会去加载eclipse中配置的环境,而正式服服务器启动是脱离ide的,所以并没有这些参数设置?
为了验证我的猜想;
我特地去我本地拿tomcat跑程序,不依赖eclipse去启动,此时本地tomcat并未设置上述参数;结果如下:

果然本地的tomcat不依赖eclipse也出现了堆溢出
找到tomcat的配置文件:tomcat的安装目录下的bin下面

此处解释下,为什么会有2个Catalina文件,后缀名为.bat的是windows下的配置文件,后缀名为.sh的为Linux下的配置文件,话不多说
打开Catalina.bat文件,找到如下位置:

JAVA_OPTS:java相关运行参数
此处应该是配置了tomcat默认的JAVA_OPTS参数
在此处前面添加:(具体添加位置我还没有弄清楚,我是加在此处也有效,就暂时加在这了)
set JAVA_OPTS=%JAVA_OPTS% -Xms512m -Xmx1024m -XX:MaxPermSize=512m -XX:ReservedCodeCacheSize=64m

添加完成后,保存,重新启动tomcat:结果ok了


ok,下面我来讲下如何在Linux环境下,配置tomcat的Java运行环境:
首先同样的找到,tomcat的安装目录下的bin,然后打开 Catalina.sh文件;
找到如下位置:

在此处添加:
JAVA_OPTS="-Xms512m -Xmx1024m -XX:ReservedCodeCacheSize=64m -XX:MaxPermSize=512m"
保存,ok!!!
以上参数的具体大小,和需要配置的参数,根据自己的实际情况更改

下面我将附上jvm参数大全:







本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一个关于jvm堆溢出引发的思考 的相关文章

  • Neo4j cpu 卡在 GC 上

    突然间 工作了一个月后 CPU 几乎没有使用 1 到 5 之间 neo4j 服务器在垃圾收集时 cpu 占用率达到 100 我在 ubuntu 4 处理器服务器上运行 neo4j entherprise 2 0 3 未嵌入 这是我的 neo
  • 如何找出一个对象有多少个引用? [复制]

    这个问题在这里已经有答案了 是否可以和 或容易地找出任意对象有多少个传入引用 也就是说 有多少对象引用它 提前致谢 简短的回答是 你自己数一下 StackOverflow 的另一个问题有一些有用的答案和资源 是否可以获得对象引用计数 htt
  • 目标 applet 或 JVM 进程突然退出

    我收到消息Target applet or JVM process exited abruptly有时 它不会连续出现 所以我无法在 Java 控制台关闭之前跟踪日志 我尝试使用增加堆大小
  • invokedynamic 什么时候真正有用(除了惰性常量之外)?

    TL DR 请提供一段用一些众所周知的动态语言 例如 JavaScript 编写的代码 以及该代码在使用 invokedynamic 的 Java 字节码中的样子 并解释为什么使用 invokedynamic 是一个进步 背景 我在 goo
  • Java VM 突然退出且没有明显原因

    我的 Java 程序突然退出 没有抛出任何异常 也没有正常完成 这是一个问题 我正在写一个程序来解决欧拉计划 http projecteuler net s 这就是我得到的 private static final int INITIAL
  • getResourceAsStream(file) 在哪里搜索文件?

    我很困惑getResourceAsStream 我的包结构如下 src net floodlightcontroller invoked getResourceAsStream here resources floodlightdefaul
  • 从 Intellij 在远程主机上部署/运行 jvm 应用程序

    是否可以在 intellij 的远程服务器上部署 运行 出于测试目的 独立的 Java 应用程序 我并不是要连接到已经运行的 JVM 而是要从 intellij 在远程主机上启动一个新的 JVM 就像它在我的本地计算机上运行一样 目前没有内
  • 将 JVM 字节码往返于文本表示的故障安全方法

    我正在寻找一种在 JVM 类文件和文本表示之间往返的故障安全方法 一项严格的要求是 只要文本表示形式保持不变 生成的往返 JVM 类文件在功能上与原始 JVM 类文件完全相同 此外 文本表示必须是人类可读和可编辑的 应该可以对文本表示进行小
  • Java 调试器:是否可以有选择地挂起线程?

    在我过去作为 C C 程序员的生活中 在某些平台和调试器组合上可以选择性地挂起线程 到达断点后 可以发出命令 或单击 GUI 中的内容 来冻结 解除冻结 挂起 唤醒 线程 在执行进一步的步骤 下一步 运行 继续命令时 挂起的线程将不会执行任
  • 如何查看JVM中JIT编译的代码?

    有什么方法可以查看 JVM 中 JIT 生成的本机代码吗 一般用法 正如其他答案所解释的 您可以使用以下 JVM 选项运行 XX UnlockDiagnosticVMOptions XX PrintAssembly 根据特定方法进行过滤 您
  • HotSpot使用的Mark-Compact算法是什么?

    当阅读 Mark Compact 章节时垃圾收集手册 https rads stackoverflow com amzn click com 1420082795 提出了一系列替代方案 但其中大多数看起来很旧 理论上 例如 2 指压缩和 L
  • 为什么 MetaSpace 大小是已用 MetaSpace 的两倍?

    我写了一个程序来模拟MetaSpace OOM 但我发现MetaSpace Size几乎总是两倍大Used MetaSpace Why 我用标志运行我的程序 XX MaxMetaspaceSize 50m 程序抛出OOM时Used Meta
  • 监控 Java 应用程序上的锁争用

    我正在尝试创建一个小基准 在 Groovy 中 以显示几个同步方法上的高线程争用 当监控自愿上下文切换时 应该会出现高争用 在 Linux 中 这可以通过 pidstat 来实现 程序如下 class Res private int n s
  • Java 类:匿名类、嵌套类、私有类

    有人能解释一下Java中匿名类 嵌套类和私有类之间的区别吗 我想知道与每个相关的运行时成本以及每个编译器的方法 这样我就可以掌握哪个最适合用于例如性能 编译器优化的潜力 内存使用以及其他 Java 编码人员的普遍可接受性 我所说的匿名类是指
  • 在进行堆转储后,如何在发生 OutOfMemoryError 时重新启动 JVM?

    我知道关于 XX HeapDumpOnOutOfMemoryError https stackoverflow com q 542979 260805JVM 参数 我也知道 XX OnOutOfMemoryError cmd args cm
  • Java:为什么它使用固定数量的内存?或者它如何管理内存?

    JVM 似乎使用了一些固定数量的内存 至少我经常看到参数 Xmx 对于最大尺寸 和 Xms 对于初始大小 这表明 我感觉 Java 应用程序不能很好地处理内存 我注意到一些事情 即使一些非常小的示例演示应用程序也会加载大量内存 也许这是因为
  • UseCompressedOops JVM 标志有什么作用以及何时应该使用它?

    HotSpot JVM 标志是什么 XX UseCompressedOops我应该做什么以及什么时候使用它 在 64 位 Java 实例上使用它 与不使用它 时 我会看到什么样的性能和内存使用差异 去年大多数 HotSpot JVM 都默认
  • Java 中清除嵌套 Map 的好方法

    public class MyCache AbstractMap
  • Java 语言中不可用的字节码功能

    当前 Java 6 是否有一些事情可以在 Java 字节码中完成而在 Java 语言中无法完成 我知道两者都是图灵完备的 所以将 可以做 理解为 可以做得更快 更好 或者只是以不同的方式 我正在考虑额外的字节码 例如invokedynami
  • Kotlin 未解决的参考:CLI 上 gradle 的 println

    放一个printlnkotlin 函数返回之前的语句会崩溃 堆栈跟踪 thufir dur NetBeansProjects kotlin thufir dur NetBeansProjects kotlin gradle clean bu

随机推荐