十五年测试老手,长期负责WEB\APP 项目测试,目前主要负责团队管理工作。
JAVA常见错误处理方法
上一篇 /
下一篇 2013-08-11 11:51:02
/ 个人分类:java性能分析
51Testing软件测试网_@"?G)N4O2Nz$bJjava.lang.OutOfMemoryError: Java heap
space51Testing软件测试网EM]dD9N6p'WTX
+}Z9Rn d,g0原因:Heap内存溢出,意味着Young和Old generation的内存不够。51Testing软件测试网7M%ab+?_\
51Testing软件测试网
m8p#`,r0K-}y8p#|P解决:调整java启动参数-Xms -Xmx 来增加Heap内存。51Testing软件测试网,Y&{ S+h8Ypf*K9K
%d*E2JC]fL"A`D0java.lang.OutOfMemoryError: unable to
create new native thread
aW*XZ7feU%PS04U] q+reV'U0原因:Stack空间不足以创建额外的线程,要么是创建的线程过多,要么是Stack空间确实小了。51Testing软件测试网0PY(w,Y*N/[5^Hr
51Testing软件测试网
e/t}&k7IJ解决:由于JVM没有提供参数设置总的stack空间大小,但可以设置单个线程栈的大小;而系统的用户空间一共是3G,除了Text/Data/BSS
/MemoryMapping几个段之外,Heap和Stack空间的总量有限,是此消彼长的。因此遇到这个错误,可以通过两个途径解决:1.通过
-Xss启动参数减少单个线程栈大小,这样便能开更多线程(当然不能太小,太小会出现StackOverflowError);2.通过-Xms -Xmx
两参数减少Heap大小,将内存让给Stack(前提是保证Heap空间够用)。
D`X1oE4B051Testing软件测试网V(c4@%pu-kjava.lang.OutOfMemoryError: PermGen
space51Testing软件测试网%LA+O'Ub}
+XOj u~CB+E*c0原因:Permanent Generation空间不足,不能加载额外的类。
g&^Rv|*k051Testing软件测试网QU*{G&`)_9a Z解决:调整-XX:PermSize= -XX:MaxPermSize=
两个参数来增大PermGen内存。一般情况下,这两个参数不要手动设置,只要设置-Xmx足够大即可,JVM会自行选择合适的PermGen大小。
4^bA1ZH+HSQb0y&w#Ier#Bj/N0java.lang.OutOfMemoryError: Requested
array size exceeds VM limit
lB;Pq!A+y9\AQ051Testing软件测试网`8R O+ex(mT原因:这个错误比较少见(试着new一个长度1亿的数组看看),同样是由于Heap空间不足。如果需要new一个如此之大的数组,程序逻辑多半是不合理的。
:i;Ihh+BS051Testing软件测试网%k_!S1n6M
~ ot }解决:修改程序逻辑吧。或者也可以通过-Xmx来增大堆内存。
sS.n~ X rdv e2nj5@0'l;Gh^h&a7~q#l0在GC花费了大量时间,却仅回收了少量内存时,也会报出OutOfMemoryError
,我只遇到过一两次。当使用-XX:+UseParallelGC或-XX:+UseConcMarkSweepGC收集器时,在上述情况下会报错,在 HotSpot
GC Turning文档 上有说明: