前几天,同事的把生产环境的jdk升级成jdk1.6,因为某个工程的需要。1.6 向下兼容1.5,我也就没说什么。
他为了方便,把生产环境的整台机子环境变量直接改成jdk1.6.而不是他工程用的那个tomcat.升级后没发现几个tomcat报错。以为就正常了。
第二天,刚好周六周日。支撑把电话过来说,前个tomcat会报错,上去看一下报。java.lang.OutOfMemoryError: Java heap space 。当时没想这些,叫他重启一下,观察两天,这两天,异常还是会报。
周一回来上班还是会报,就把那个tomcat的内存改大点。
JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true " 也就解决问题了。
第二天,发现另一个tomcat也出现了问题。定时发彩信,原来运行好好的,现在发彩信会报错。java.lang.RuntimeException: Unsupported attachment type "com.sun.xml.internal.messaging.saaj.soap.AttachmentPartImpl" only supporting "javax.activation.DataHandler".在测试环境试一下,没问题啊,找一下看有没有重复的包,也没有。
想了想,生产环境跟测试环境就jdk不一样。可以是因为上次同事升级生产环境的jdk引起的。
所以把那个tomcat的改回1.5.问题就解决了。
修改Tomcat的JDK目录
打开tomcat/bin/catalina.bat,找到如下语句:
rem $Id: catalina.bat 656834 2008-05-15 21:04:04Z markt $
rem ---------------------------------------------------------------------------
rem JSSE_HOME (Optional) May point at your Java Secure Sockets Extension
......
......
rem
rem $Id: catalina.bat 355227 2005-12-08 21:44:16Z keith $
rem ---------------------------------------------------------------------------
后面加一句
set JAVA_HOME=C:\Program Files\Java\jdk1.5.0_10
注意:其中最后一条语句是JDK的路径,该值根据你的JDK安装情况而定。
联想到上一件报内存不足的事,肯定也是因为jdk升级导致的问题。可以是jdk1.6所需要的内存多吧。
这次事件后,知道了凡事做事要慎重。