大部分问题可以从百度查,一些不好查的可以到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
解决办法为在[加上\\转义
3:Unable to set localhost. This prevents creation of a GUID. Cause was: cloud: cloud
java.net.UnknownHostException: cloud: cloud
#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[]]>括起
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. 的原因和解决办法
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没连上
9:java.lang.NoClassDefFoundError: org/aspectj/weaver/BCException
少aspectjweaver.jar的缘故。
<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
13:访问https时httpclient忽略证书
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异常的解决方法
方法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>