最近在项目中解决了一个很奇怪的 Bug.
项目中使用 IBM Websphere 5.0.2.7, JDK 1.3.1, 每天都有一次服务器 JVM 崩溃,非常奇怪。
同样的代码,同样的数据库数据,在开发环境下面就很好。
经过两天的调试和增加大量的 log (使用 log4j),逐步逼近问题的根源。为了防止 JVM 崩溃的时候, log4j 还有 log 放在缓冲内存中没有写到文件,还花了很多时间才搞定。
结果发现是以下代码导致,变量名我换掉了,这里只是示例:
addToList(new long[] { long1, long2, long3, long4}, contList);
这是一个数组初始化代码,编译无误,应该是符合 JDK 1.3 的语法的。执行次数在 10 次左右还没有问题,次数多了就会导致服务器 JVM 崩溃。修改成如下格式:
long[] data = new long[4];
data[0] = long1;
data[1] = long2;
data[2] = long3;
data[3] = long4;
addToList(data, contList);
然后问题就解决了。非常莫名其妙的问题。有趣的 bug.