【异常】碰到的两个连续出现的异常

背景

        在测试环境的系统,一个功能突然无法使用了,于是开始翻找日志,加上做实时的测试,在日志中发现了如下的错误:

Invalid use of BasicClientConnManager: connection still allocated  

    然后下面的信息略过,在网上查了查,发现是http连接出现的问题,多发生于rest调用还有httpclient接收请求时候的连接没有释放,所以,我决定在本地调试一下httputil,看看里面是不是有其他的问题导致了这个错误的发生。

连接:https://blog.csdn.net/earthhour/article/details/43406409

        然而,当我在本地用debug方式启动了之后,在调用的时候却又出现了另外一个问题:

java.lang.NoClassDefFoundError

    然后在网上查了查,发现其原因更加的离谱,为java虚拟机在运行的时候不能找到合适的类,然后出现了无法继续运行的问题,因为之前没有遇到过,所以一头雾水,但是是因为找不到合适的类,所以我在webroot下面找到了lib文件夹,然后查看引入的jar包,发现了之前做实验的时候有没有删除的版本的jar包:


由于发送http请求的工具jar包重复了,所以在编辑后可能出现找不到正确jar包的时候。

由于原来用的是旧版本的jar包,所以把新版本的jar包删除之后,两个错误就同时消失了。


询因

        因为在做实验的时候,添加完成jar包之后,在debug下并没有出现此错误,所以我就忽略了重复功能jar包的依赖不可能性,因为在编译的时候也没有出现异常情况,所以觉得根本没有问题。但是在运行时候就出现了猫腻。

详细查询之后发现了如下的文章:https://www.cnblogs.com/xyhz0310/p/6803950.html

然后了解了其实还有一种异常是:ClassNotFoundException

看似和上述的第二个错误一样,但是差别是很大的,

    1、NoClassDefFoundError是在编译完成之后,运行中java虚拟机在classpath下没有找到需要的类名的时候包的错。

    2、ClassNotFoundException是在编译时候,我们的编译器没有在classpath中发现需要的类名包的错。


发现


        由于第一个问题没有真正发现根源,就解决了,所以在网上找了一下原因,也做了一下猜测————

   1、由于功能jar包有重复,所以可能在建立http连接的时候创建用的是一个jar包的类方法,释放的时候可能用的是另外一个jar包的方法,由于没有释放干净(版本问题),所以就出错了。

   2、可能由于并发的请求有点多造成引用或者调用jar包的问题。

   3、可能和jvm对于jar包的加载机制和类的加载机制有关,加载了新的jar包,而调用jar包的方式都是适用于旧版的。

看了看jvm的类加载机制,感觉受益匪浅,虽然没有了解到想要解决的问题。

http://www.importnew.com/18548.html

猜你喜欢

转载自blog.csdn.net/tr1912/article/details/80027358

相关文章