最近连续遇到了两个关于JDK不同版本引发的问题。
案例一:
早上接到客户反馈,说有些用户的影响系统不能查看图片。由于影像系统查看图片需要使用APPLET,如果没有JRE那么是不能查看图片的。并且说可能是由于机器装了多个版本的JDK引起的。感觉这个问题不难解决。把客户机器上的所有JAVA环境都卸载干净,重新安装一个新的JDK就可以解决。不过实际的解决过程并没有想象的那么简单。
先把客户机器上的JDK都卸载干净,安上一个新JDK1.5。但安装JDK后,设置好环境变量。在命令行运行java,javac,java -version, javaws 一切正常。但使用影像系统打开图片时,applet能弹出来。但是一直等待在java lodaing的界面。什么原因呢,
影像系统的应用有问题?但其他人的机器打开影像系统是可以正常显示图片的。说明影像系统没有问题。问题出在客户端的机器上。究竟
是什么原因呢?考虑了如下几个原因:
1.防火墙的问题。但内网之间相互访问,是没有做限制的。
2.IE设置问题。所有机器的IE版本,设置都一样,排除。
3.applet问题。打开applet的控制台,但看不到任何信息。
4.停掉所有的杀毒软件,重启操作系统,IE的安全级别降低等等其它方法都不能解决问题。
连续在两台机器上都重复了上述操作,但依然没有解决问题。想了一会实在是没办法了,只好跟客户说等等。回去在我自己的机器上试试。卸载掉自己机器的java环境,安装一个和客户一模一样的JDK。同样的问题出现了,但在访问影像系统时,仍然提示没有JRE环境。奇怪我明明是新安装的JDK为什么会出现这样的问题呢?仔细看了提示信息,终于明白是为什么了。
原来给客户装的JDK是1.5.0_07版本的,但影像系统使用的JDK是1.5.0_17版本的.影像系统检查到客户端的JDK版本比要求的JDK版本低,会提示客户端自动去sun的官网下载1.5.0.17版的JDK.但由公司限定了客户的那批机器不能访问外网,(我的机器能访问外网所以我的机器能出现提示,但客户的机器出现不了提示)也就是不能去下载1.5.0.17版本的JDK.没有匹配的JRE版本,影像系统是打不开的。知道了问题的原因,给客户安装一个匹配版本的JDK问题终于解决了。
其实这个问题跟开发也是有一定关系的。发现客户端的JRE环境有问题,为什么不在应用服务器上放一个JRE让客户端自动去下载呢。为什么一定要去sun的网上下呢?如果不能上外网,怎么办?
案例二、
一个新上线的系统,测试的性能还可以。但上线后,反映超级慢,将近比测试环境慢5倍左右。这个系统的压力并不大,平时并发量不到20个。系统配置很高,正常情况系比目前多100倍的压力都没问题。经过排查程序,数据库,操作系统配置等问题后。最终还是由于开发和生产使用的JDK版本版本不一致导致的。
还有使用32位的JDK,与64位JDK引起的性能差异。等一系列由于开发,测试,生产JDK版本不一致。或小版本不一致导致的性能问题。这些问题很隐蔽,排查起来比较困难。总之写这篇文章的目的是希望大家在开发过程中能够重视JDK的版本。保持开发,测试,生产环境中JDK版本的一致性。上线前的压力测试,最好能在生产环境上测试。以免由于环境不同,导致的性能问题。
查看JDK版本的方法:
C:/Users/Liangwei>java -version
java version "1.5.0_07"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_07-b03)
Java HotSpot(TM) Client VM (build 1.5.0_07-b03, mixed mode, sharing)