近期安装了Geoserver,在测试的的时候发现在Arm架构的环境的地图有锯齿,而在x86下的能正常显示。我刚开始装的时候以为是Arm架构的锅导致的。虽然通过设置stlye来掩饰锯齿,但是也不可能没个地图都配置一下吧,让Arm背了一段时间的锅后在昨天的通宵研究中好像发现是什么原因导致的了。
为了验证是不是架构导致的我由原来的容器化部署改成直接运行,然后发现竟然没有锯齿了,所以Arm表示这个锅他不背。竟然不是架构的问题我就发现有锯齿的部署方式的“JVM可用的字体”不能正常显示是黑坨坨的,我在之前以为就是这样的,看到没有锯齿的才知道。到了这一步我以为是字体的问题了,就各种安装字体然后刷新缓存这类的,搞到了凌晨4、5点了还是不行没有办法只好睡觉先。
在睡觉前还是发现了一些端倪的,能显示的那个由于没有特意配置jdk还是系统默认的openjdk而不能正常显示的是我特意使用的Oracle JDK,所以好像发现了问题所在。后续我又看到了Java Rendering Engine有所不同。不能显示的JVM版本:Oracle Corporation: 1.8.0_281 (Java HotSpot(TM) 64-Bit Server VM)
、Java Rendering Engine:sun.dc.DuctusRenderingEngine
,而能显示的Java Rendering Engine:org.marlin.pisces.MarlinRenderingEngine
。在这里好像误入歧途了,我一开始不行替换JDK发行版,准备更改Java Rendering Engine来解决的问题,技术不行无法这样解决。
后来拉取一个openjdk的tomcat测试能正常使用(JVM版本:Oracle Corporation: 1.8.0_232 (OpenJDK 64-Bit Server VM)
、Java Rendering Engine:sun.java2d.pisces.PiscesRenderingEngine
),没办法就把Geoserver工程拷贝到替换过JDK发行版的节点上面测试发现不能正常使用。
经过这一波发现与tomcat版本无关,与字体无关好像和JDK发行版有关(可能是Java Rendering Engine的区别),因为根据官方文档容器化部署要“启用 Marlin 栅格化”
-Xbootclasspath/a:$MARLIN_JAR -Dsun.java2d.renderer=org.marlin.pisces.MarlinRenderingEngine
虽然我可能配置错误了导致不能正常引用到而失败了就切换JDK发行版算了。
好像找不到Linux / AArch64稳定版的openjdk1.8的二进制文件(官网只有Early-Access Releases版本)下载,于是我直接YUM安装打包镜像了。
JVM版本:Red Hat, Inc.: 1.8.0_292 (OpenJDK 64-Bit Server VM)
、Java Rendering Engine:sun.java2d.pisces.PiscesRenderingEngine
openjdk version "1.8.0_292" OpenJDK Runtime Environment (build 1.8.0_292-b10) OpenJDK 64-Bit Server VM (build 25.292-b10, mixed mode)
和
java version "1.8.0_281" Java(TM) SE Runtime Environment (build 1.8.0_281-b09) Java HotSpot(TM) 64-Bit Server VM (build 25.281-b09, mixed mode)
的区别?官网建议JDK8或者JDK11可是我还是使用了JDK8没有使用11,还有就是使用Jetty好还是Tomcat好呢?解决不了无差点就打算放弃使用容器化(k8s)部署了。
ChiuYut
2021年6月27日