包含标签 jvm 的文章

OpenJDK厂商选型:从Oracle JDK到BellSoft Liberica,那些容易被忽略的差异点

前言

JDK 8 时代「装个 JDK」没得选,Oracle JDK 一把梭。2019 年 Oracle 改了授权之后,生产环境陆续迁到 OpenJDK 系的发行版上。但「都是 OpenJDK」不等于完全一样,加密策略、字体这些细节差异,我是迁完之后在生产上才碰到的,记录下。

1、Oracle JDK 和 OpenJDK 什么关系

  • 2006 到 2019:Sun/Oracle 开源了 OpenJDK,但 Oracle JDK(商业授权)和它并存,细节上有一些差距
  • 2019 年 1 月:Oracle 宣布 JDK 8u211 之后以及 JDK 11 起商用要收费,这是大家迁 OpenJDK 的分水岭
  • 现在:Oracle JDK 17+ 又恢复免费(NFTC 协议),但条款写明下个 LTS 发布后旧 LTS 可能转回收费,企业不太敢把命脉押在这种条款上

代码层面 Oracle JDK 和 OpenJDK 已经高度同源,差异不到 1%。选型的差异主要在:谁构建、谁维护、免费支持多久。

……

阅读全文

JDK 8到21迁移指南:参数变化、GC演进与虚拟线程实战

前言

手上一批老服务还跑在 JDK 8 上,Oracle 的免费更新早就停了,趁着最近有空把几个服务迁到 21 试了试,过程不算复杂,但坑主要在两个地方:老参数会直接启动失败,还有依赖库的字节码兼容。把迁移过程和注意事项记录下,方便后来者。

站内 tomcat-jvm 那篇有 JDK21 的参数对照,oom 那篇有 OOM 新旧形态对照,这篇侧重怎么迁。

……

阅读全文

jvm的大dump文件分析

前言

参考dump文件的大小,如果超过6G、8G 一般我们本地电脑无法打开,可以找大容量的linux服务器,配置对应启动的jvm 内存后可以参考下面的步骤

1、下载linux版本的mat

1
wget http://eclipse.stu.edu.tw/mat/1.9.0/rcp/MemoryAnalyzer-1.9.0.20190605-linux.gtk.x86_64.zip

2、解压zip包

unzip MemoryAnalyzer-1.9.0.20190605-linux.gtk.x86_64.zip

3、修改linux mat的堆内存大小(看自己下载的堆的大小,默认mat的堆支持1g)

1
vi MemoryAnalyzer.ini
1
2
3
4
5
6
-startup
plugins/org.eclipse.equinox.launcher_1.5.0.v20180512-1130.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.700.v20180518-1200
-vmargs
-Xmx10240m

4、执行分析脚本

1
./ParseHeapDump.sh [hprof文件] org.eclipse.mat.api:suspects org.eclipse.mat.api:overview org.eclipse.mat.api:top_components

可能因为 jdk 版本不一致导致启动失败,可以调整 jdk 为1.8.*

1
2
3
export JAVA_HOME=/opt/soft/jdk/jdk1.8.0_66/
export PATH=$JAVA_HOME/bin:$PATH
"$(dirname -- "$0")"/MemoryAnalyzer -consolelog -application org.eclipse.mat.api.parse "$@"

5、等待分析结果

……

阅读全文

tomcat环境及线程池、JDK配置详解

前言

生产环境中 tomcat 的 JVM 和线程池设置不好,很容易出现内存溢出或被流量打垮。这篇整理 tomcat 的三块核心配置:JVM 内存参数(catalina.sh)、线程池(server.xml)、JNDI 数据源(context.xml),以及常见内存溢出的原因和解决方法。

一、常见的三种 Java 内存溢出

1. JVM Heap(堆)溢出

1
java.lang.OutOfMemoryError: Java heap space

JVM 启动时会自动设置 Heap 的值:初始空间(-Xms)是物理内存的 1/64,最大空间(-Xmx)不可超过物理内存。Heap 的大小是 Young Generation 和 Tenured Generation 之和。在 JVM 中如果 98% 的时间用于 GC 且可用的 Heap size 不足 2%,将抛出此异常。

……

阅读全文

最近文章

分类

标签

其它