java异常大全(哈哈)

大部分问题可以从百度查,一些不好查的可以到https://stackoverflow.com/去查

 

1:Exception in thread “main” java.lang.OutOfMemoryError: GC overhead limit exceeded

一、解释:
JDK6新增错误类型。当GC为释放很小空间占用大量时间时抛出。
一般是因为堆太小。导致异常的原因:没有足够的内存。
二、解决方案:
1、查看系统是否有使用大内存的代码或死循环。
2、可以添加JVM的启动参数来限制使用内存:-XX:-UseGCOverheadLimit

 2:java.util.regex.PatternSyntaxException: Unclosed character class near index 0

cc.replaceAll("\\[","").replaceAll("\\]", "")     解决

 

使用str.split("[")时,出现java.util.regex.PatternSyntaxException: Unclosed character class near index [ ^的问题

解决办法为在[加上\\转义

 3:Unable to set localhost. This prevents creation of a GUID. Cause was: cloud: cloud

        java.net.UnknownHostException: cloud: cloud

问题是因为DNS无法解析此域名所导致的,做如下修改解决:

#vi /etc/hosts

添加

127.0.0.1 cloud

 4:BeanCreationException

spring mvc+mybatis刚开始报找不到类,检查发现都没问题,考虑到类是由mybatis的生成的,可能 问题出在这里,于是把注解(@Autowired(required=false)),后报

org.xml.sax.SAXParseException: The content of elements must consist of well-form于是检查xml文件中是否存在不合法的字符,然后使用<![CDATA[]]>括起

问题出现在<
<select id="getBillingAlarmByBillingId" resultType="com.chinacache.entity.AlarmSearch"
parameterType="com.chinacache.entity.AlarmSearch">
select * from alarm_records t ,alarm_billingbandwidth c
where t.config_id=c.id and c.billingcode=#{billingcode} and
alarm_time>=to_date('#{startTime}','yyyy-mm-dd hh24:mi:ss') and
alarm_time<![CDATA[<]]>=to_date('#{endTime}','yyyy-mm-dd hh24:mi:ss')
</select>

 5 Cause: java.io.UTFDataFormatException: Invalid byte 3 of 3-byte UTF-8 sequence. 的原因和解决办法

 

是在mvn编译和拷贝过程中汉字出现了乱码.应该是mvn编译后成了其他格式.
1. 改class 下面的文件,把乱码的文字部分删除即可.
2. 一般源码是没事的,直接拷贝到classess 下面即可.
但这二种办法的后患是再修改配置文件再编译时还会出错,所以最好的办法就是

<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
直接就编译成正确的。

 

 6:SocketException: Too many open files

写道
这是因为网络请求过多,也就导致了系统打开的文件过多。每一个连接都会当成“文件”看待的。

于是用命令

ulimit -a

(效果:查看每个用户允许打开的最大文件数)

看到最大文件数是1024,将其更改大点,如

ulimit -n 4096

然后必须重启下网络服务,我用的是WebLogic,重启之后便没有出现异常。

导致 Too many open files ,网络请求过多是一种可能,但也有可能是程序上的缺陷,如没有释放一些文件句柄,程序open了文件却忘记了在最后close。但我确信工程中没有用到打开文件这一环节,因此这个可能是排除掉了。

用lsof -p [进程ID] 可以看到某ID的打开文件状况。进程ID可能用 ps -ef|grep java列出weblogic的进程ID,然后用此ID套入lsof -p ID号,咳,一大堆的请求哟,这显然是网络请求过多造成了 Too many open files。适当调整后便已消除这种现象。

 7:Connection reset by peer: socket write error

转自:http://blog.csdn.net/zangpuu/article/details/6618927

 常出现的Connection reset by peer: 原因可能是多方面的,不过更常见的原因是:  
①:服务器的并发连接数超过了其承载量,服务器会将其中一些连接Down掉;  
②:客户关掉了浏览器,而服务器还在给客户端发送数据;  
③:浏览器端按了Stop  

通常原因为:远程主机上对等方应用程序突然停止运行,或远程主机重新启动,或远程主机在远程方套接字上使用了“强制”关闭 (参见setsockopt(SO_LINGER))。另外,在一个或多个操作正在进行时,如果连接因“keep-alive”活动检测到一个失败而中 断,也可能导致此错误。此时,正在进行的操作以错误码WSAENETRESET失败返回,后续操作将失败返回错误码WSAECONNRESET。
但是如果频繁出现,就表示很 多客户端连接到Apache服务器的响应时间太长了,可能是网络的问题或者服务器性能问题。

 8:Could not get a resource from the pool

产生原因:
1:客户端去redis服务器拿连接(代码描述的是租用对象borrowObject)的时候,池中无可用连接,即池中所有连接被占用,且在等待时候设定的超时时间后还没拿到时,报出此异常。
2: 有redis没连上
解决办法:
1:调整JedisPoolConfig中maxActive为适合自己系统的阀值。

 9:java.lang.NoClassDefFoundError: org/aspectj/weaver/BCException

    少aspectjweaver.jar的缘故。

<dependency>
<groupId> org.aspectj</groupId >
<artifactId> aspectjweaver</artifactId >
<version> 1.6.11</version >
</dependency>

 10:Software caused connection abort: recv failed(不过测试时连接成功,返回还是0)

是由于程序编写的问题,而不是网络的问题引起的.

已知会导致这种异常的一个场景如下:
客户端和服务端建立tcp的短连接,每次客户端发送一次请求,
服务端响应后关闭与客户端的连接.
如果客户端在服务端关闭连接后,没有释放连接,继续试图发送请求和接收响应.
这个时候就会出错.

这个时候客户端Socket的getOutputStream返回来的OutPutStream维护
的是本地的连接状态,
无法知道远程的服务端已经关闭了对应的InputStream和socket因此
虽然调用了
out.write(sendbuf, 0, sendbuf.length);
方法,但是实际上服务端并没有接收到客户端的请求信息.
因为没有抛出异常,因此造成了误以为客户端请求发送成功的假象.

接下来调用etInputStream的in.read(header, 0, 14);方法.
因为这次要读取服务端的信息,因此产生了
Software caused connection abort: recv failed 的异常

总结产生原因,在服务端/客户端单方面关闭连接的情况下,另一方依然以为
tcp连接仍然建立,试图读取对方的响应数据,导致出现
Software caused connection abort: recv failed 的异常.

因此在receive数据之前,要先判断连接状态.
通过inputstream的available()方法来判断,是否有响应结果.
如果available()的返回值为0,说明没有响应数据,可能是对方已经断开连接,
如果available()的返回值大于0,说明有响应数据.
另外值得注意的是available()返回的值是非堵塞的,可以被多个线程访问

在对方释放连接后,也要释放本地的连接.

 11:NoSuchMethodException    a <init>(kafka.utils.VerifiableProperties)

    初始化时没有在a中找到以参数为verifiableproperties的构造方法,须要自己创建即可

 12: java.io.EOFException: No content to map to Object due to end of input

报这个错误,原因是代码中在调用conn.getInputStream方法前调用了conn.getResponseCode,这是不对的,因为使用httpURLconnection时候,一定要注意,当调用conn.getInputStream的时候所有的数据才发送出去。

 13:访问https时httpclient忽略证书

转自:http://stackoverflow.com/questions/19517538/ignoring-ssl-certificate-in-apache-httpclient-4-3?lq=1
SSLContextBuilder builder = new SSLContextBuilder();
builder.loadTrustMaterial(null, new TrustSelfSignedStrategy());
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
builder.build());
CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(
sslsf).build();

HttpGet httpGet = new HttpGet("https://some-server");
CloseableHttpResponse response = httpclient.execute(httpGet);
try {
System.out.println(response.getStatusLine());
HttpEntity entity = response.getEntity();
EntityUtils.consume(entity);
}
finally {
response.close();
}

 14:tomcat下java.io.NotSerializableException异常的解决方法

原因是:tomcat停止时,保存session资源,然后在重启服务后,会尝试恢复session。 写道
方法1:所有放到session中的类实现java.io.Serializablejava.io.Serializable
方法2:tomcat的 Context.xml中加入如下配置
<Manager className="org.apache.catalina.session.PersistentManager"
debug="0"
saveOnRestart="false"
maxActiveSessions="-1"
minIdleSwap="-1"
maxIdleSwap="-1"
maxIdleBackup="-1">
<Store className="org.apache.catalina.session.FileStore"/>
</Manager>

 

 

 

你可能感兴趣的:(JAVA异常)