java异常及解决方法Word文件下载.docx

上传人:b****3 文档编号:16704168 上传时间:2022-11-25 格式:DOCX 页数:10 大小:24.53KB
下载 相关 举报
java异常及解决方法Word文件下载.docx_第1页
第1页 / 共10页
java异常及解决方法Word文件下载.docx_第2页
第2页 / 共10页
java异常及解决方法Word文件下载.docx_第3页
第3页 / 共10页
java异常及解决方法Word文件下载.docx_第4页
第4页 / 共10页
java异常及解决方法Word文件下载.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

java异常及解决方法Word文件下载.docx

《java异常及解决方法Word文件下载.docx》由会员分享,可在线阅读,更多相关《java异常及解决方法Word文件下载.docx(10页珍藏版)》请在冰豆网上搜索。

java异常及解决方法Word文件下载.docx

5^t"

FPnet.ipv4.tcp_tw_reuse=1

$_zuz9gdynet.ipv4.tcp_tw_recycle=1

y+_&

F'

q$BC;

f[xxx@xxx~]$sysctl-p,使内核参数生效

socket-faq中的这一段讲time_wait的,摘录如下:

中博IT教育网`.J0[0VE;

m\-\}y

2.7.PleaseexplaintheTIME_WAITstate.

Jfpo8`'

`w(`9K?

NP;

tS7Z8^CRememberthatTCPguaranteesalldatatransmittedwillbedelivered,

3:

当您尝试从TCP端口大于5000连接收到错误'

WSAENOBUFS(10055)'

症状

如果您尝试建立TCP连接从端口是大于5000,本地计算机响应并以下WSAENOBUFS(10055)错误信息:

I3C{9j{{Jx因为系统缺乏足够缓冲区空间或者因为队列已满无法执行套接字上操作。

要点此部分,方法或任务包含步骤告诉您如何修改注册表。

但是,如果修改注册表错误可能发生严重问题。

因此,确保仔细执行这些步骤。

用于添加保护之前,修改备份注册表。

然后,在发生问题时还原注册表。

有关如何备份和还原注册表,请单击下列文章编号以查看Microsoft知识库中相应:

中博IT教育网A/KcN;

[AY@

默认最大数量的短暂TCP端口为5000'

适用于'

部分中包含产品中。

这些产品中已添加新参数。

要增加最大值是短暂端口,请按照下列步骤操作:

W/jN6a5g*T'

|%?

1.启动注册表编辑器。

中博IT教育网n\-~h3KG)IFX

2.注册表,中找到以下子项,然后单击参数:

e7c#q&

eHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

w6z9H4mA#D;

^\'

L3.在编辑菜单,单击新建,然后添加以下注册表项:

q+HrV*D~MMaxUserPort值名称:

+Lgx6h,BT值类型:

DWORD

X~$f!

sqTw3W&

M值数据:

65534

N:

CaX%Um:

`7?

o有效范围:

5000-65534(十进制)中博IT教育网TYT)Ii

默认:

0x13885000(十进制)

9u$DY7g1DQ,z@uCN说明:

此参数控制程序从系统请求任何可用用户端口时所用最大端口数。

通常,1024的值和含5000之间分配临时(短期)端口。

!

r2X?

tMLJ4.退出注册表编辑器,并重新启动计算机。

.m6E'

g3{"

Ym(?

#S2A

:

^%EoDL7`h^]z注意一个附加TCPTimedWaitDelay注册表参数决定多久关闭端口等待可以重用关闭端口。

中博IT教育网(qOx3g4~IZ/M

4:

java.lang.OutOfMemoryError:

Javaheapspace

Heapsize设置

JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heapsize的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。

可以利用JVM提供的-Xmn-Xms-Xmx等选项可进行设置。

Heapsize的大小是YoungGeneration和TenuredGeneraion之和。

提示:

在JVM中如果98%的时间是用于GC且可用的Heapsize不足2%的时候将抛出此异常信息。

HeapSize最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。

解决方法:

手动设置Heapsize

修改TOMCAT_HOME/bin/catalina.bat,在“echo"

UsingCATALINA_BASE:

$CATALINA_BASE"

”上面加入以下行:

setJAVA_OPTS=%JAVA_OPTS%-server-Xms800m-Xmx800m-XX:

MaxNewSize=256m

或修改catalina.sh

在“echo"

JAVA_OPTS="

$JAVA_OPTS-server-Xms800m-Xmx800m-XX:

MaxNewSize=256m"

5:

tomcat:

PermGenspace

1、设置tomcat6w.exe

在JavaOptions添加:

-XX:

PermSize=256m

MaxPermSize=512m

 

2、在环境变量里面配置:

环境变量:

-Xms512m-Xmx1024m-XX:

PermSize=256m-XX:

环境变量名:

JAVA_OPTS

$JAVA_OPTS 

-server 

PermSize=128M 

MaxPermSize=512m"

3、非安装版设置如下:

修改TOMCAT_HOME/bin/catalina.sh

-server-XX:

PermSize=256M-XX:

PermGenspace的全称是PermanentGenerationspace,是指内存的永久保存区域,这块内存主要是存放Class和Meta信息的,Class在被Loader时就会被放到PermGenspace中,它和存放类实例(Instance)的Heap区域不同,GC(GarbageCollection)不会在主程序运行期对PermGenspace进行清理,所以如果APP会LOAD很多CLASS的话,就很可能出现PermGenspace错误,这种错误常见在web服务器对JSP进行precompile的时候,超过了jvm默认的大小(4M)那么就会产生此错误信息了

建议:

将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少jar文档重复占用内存的目的。

具体内存占用可自行按计算机内存设置。

解决办法2:

修改$tomcat_home\bin\catalina.sh

看tomcathelpdoc

得知

”上面加入

-server-Xms768m-Xmx768m-XX:

PermSize=128M-XX:

MaxNewSize=256m-XX:

MaxPermSize=256m-Djava.awt.headless=true"

winowsxp环境跑tomcat向oracle进行大数据量的导入(含有pdf、doc等>

40M的文件),tomcat报java.lang.OutOfMemoryError:

Javaheapspace错误。

我的解决办法:

增加环境变量(注:

tomcat所在机器为4G内存,当然xp只是认出了3.25G)

JAVA_OPTS=-Xms512M-Xmx1024m-XX:

MaxNewSize=128m-XX:

MaxPermSize=128m

相关资料:

tomcat

遇到TOMCAT出错:

Javaheapspace,于是查了资料,找到了解决方法:

IfJavarunsoutofmemory,thefollowingerroroccurs:

Exceptioninthread"

main"

java.lang.OutOfMemoryError:

Javaheapsizecanbeincreasedasfollows:

java-Xms<

initialheapsize>

-Xmx<

maximumheapsize>

Defaultsare:

java-Xms32m-Xmx128m

如果你用win

/tomcat/bin/catalina.bat加上下面的命令:

setJAVA_OPTS=-Xms32m-Xmx256m

如果你用unix/linux

/tomcat/bin/catalina.sh加上下面的命令:

-Xms32m-Xmx256m"

以下是有关Java垃圾回收机制详解和调优的文章地址:

Tomcat内存溢出的三种情况及解决办法分析

url:

生产环境中tomcat内存设置不好很容易出现内存溢出。

造成内存原因是不一样的,当然处理方式也不一样。

Tomcat内存溢出的原因

在生产环境中tomcat内存设置不好很容易出现内存溢出。

这里根据平时遇到的情况和相关资料进行一个总结。

常见的一般会有下面三种情况:

1.OutOfMemoryError:

2.OutOfMemoryError:

3.OutOfMemoryError:

unabletocreatenewnativethread.

Tomcat内存溢出解决方案

对于前两种情况,在应用本身没有内存泄露的情况下可以用设置tomcatjvm参数来解决。

(-Xms-Xmx-XX:

PermSize-XX:

MaxPermSize)

最后一种可能需要调整操作系统和tomcatjvm参数同时调整才能达到目的。

第一种:

是堆溢出。

在JVM中如果98%的时间是用于GC且可用的Heapsize不足2%的时候将抛出此异常信息。

没有内存泄露的情况下,调整-Xms-Xmx参数可以解决。

-Xms:

初始堆大小

-Xmx:

最大堆大小

但堆的大小受下面三方面影响:

1.相关操作系统的数据模型(32-bt还是64-bit)限制;

(32位系统下,一般限制在1.5G~2G;

我在2003server系统下(物理内存:

4G和6G,jdk:

1.6)测试1612M,64为操作系统对内存无限制。

2.系统的可用虚拟内存限制;

3.系统的可用物理内存限制。

堆的大小可以使用java-Xmx***Mversion命令来测试。

支持的话会出现jdk的版本号,不支持会报错。

-Xms-Xmx一般配置成一样比较好比如setJAVA_OPTS=-Xms1024m-Xmx1024m

第二种:

永久保存区域溢出

PermGenspace的全称是PermanentGenerationspace,是指内存的永久保存区域。

这一部分用于存放Class和Meta的信息,Class在被Load的时候被放入PermGenspace区域,它和和存放Instance的Heap区域不同,GC(GarbageCollection)不会在主程序运行期对PermGenspace进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGenspace错误。

这种错误常见在web服务器对JSP进行precompile的时候。

但目前的hibernate和spring项目中也很容易出现这样的问题。

的帖子有讨论的这个问题。

可能是由于这些框架会动态class,而且jvm的gc是不会清理PemGenspace的,导致内存溢出。

这一个一般是加大-XX:

MaxPermSize来解决问题。

-XX:

PermSize永久保存区域初始大小

PermSize永久保存区域初始最大值

这一般结合第一条使用,比如setJAVA_OPTS=-Xms1024m-Xmx1024m-XX:

PermSize=128M-XX:

PermSize=256M

有一点需要注意:

java-Xmx***Mversion命令来测试的最大堆内存是-Xmx与-XX:

PermSize的和比如系统支持最大的jvm堆大小事1.5G,那-Xmx1024m-XX:

PermSize=768M是无法运行的。

第三种:

无法创建新的线程。

这种现象比较少见,也比较奇怪,主要是和jvm与系统内存的比例有关。

这种怪事是因为JVM已经被系统分配了大量的内存(比如1.5G),并且它至少要占用可用内存的一半

有人发现,在线程个数很多的情况下,你分配给JVM的内存越多,那么,上述错误发生的可能性就越大。

产生这种现象的原因如下(从这个blog中了解到原因:

每一个32位的进程最多可以使用2G的可用内存,因为另外2G被操作系统保留。

这里假设使用1.5G给JVM,那么还余下500M可用内存。

这500M内存中的一部分必须用于系统dll的加载,那么真正剩下的也许只有400M,现在关键的地方出现了:

当你使用Java创建一个线程,在JVM的内存里也会创建一个Thread对象,但是同时也会在操作系统里创建一个真正的物理线程(参考JVM规范),操作系统会在余下的400兆内存里创建这个物理线程,而不是在JVM的1500M的内存堆里创建。

在jdk1.4里头,默认的栈大小是256KB,但是在jdk1.5里头,默认的栈大小为1M每线程,因此,在余下400M的可用内存里边我们最多也只能创建400个可用线程。

这样结论就出来了,要想创建更多的线程,你必须减少分配给JVM的最大内存。

还有一种做法是让JVM宿主在你的JNI代码里边。

给出一个有关能够创建线程的最大个数的估算公式:

(MaxProcessMemory-JVMMemory-ReservedOsMemory)/(ThreadStackSize)=Numberofthreads

对于jdk1.5而言,假设操作系统保留120M内存:

1.5GBJVM:

(2GB-1.5Gb-120MB)/(1MB)=~380threads

1.0GBJVM:

(2GB-1.0Gb-120MB)/(1MB)=~880threads

在2000/XP/2003的boot.ini里头有一个启动选项,好像是:

/PAE/3G,可以让用户进程最大内存扩充至3G,这时操作系统只能占用最多1G的虚存。

那样应该可以让JVM创建更多的线程。

因此这种情况需要结合操作系统进行相关调整。

因此:

我们需要结合不同情况对tomcat内存分配进行不同的诊断才能从根本上解决问题

6:

java.lang.IllegalStateException:

getOutputStream()hasalreadybeencalledforthisresponse

原因一:

JSP默认的输出流为PrintWriter,即<

%%>

以外的东西所默认的输出方式,如果你尝试在JSP中使用ServletOutputStream就会引起错误.要嘛直接改用Servlet输出(复写service方法),要嘛删除除%>

<

%中的任何东西(包括HTML标签,空格,回车等东西)应该就可以。

对于这样的情况应该这样来解决,删除%>

%之间的所有内容包括空格和换行符,最后也要消除空格和换行符,最好再加上一句response.reset()。

原因二:

在J2EE的API参考里有这么个:

ServletResponse的getWriter()方法里会抛出这个异常,

IllegalStateException-ifthegetOutputStreammethodhasalreadybeencalled

forthisresponseobject

而它的getOutputStream()方法里会抛出这个异常.

IllegalStateException-ifthegetOutputStreammethodhasalreadybeencalledforthisresponseobject

并且两者的函数申明里都有这么样的一句

EitherthismethodorgetOutputStream()maybecalledtowritethebody,notboth.

EitherthismethodorgetWriter()maybecalledtowritethebody,notboth.

以上说明也解释了为什么在往页面中写入图片的时候要使用如下循环格式

OutputStreamoutput=response.getOutputStream();

while((len=in.read(b))>

0)

{

output.write(b,0,len);

}

output.flush();

而不是把response.getOutputStream().write()放到循环体内

在使用完输出流以后调用以下两行代码即可:

out.clear();

out=pageContext.pushBody();

7:

启动TOMCAT时出现java.lang.NoClassDefFoundError:

org/apache/commons/beanutils/Converter

严重:

Servletildrenthrewload()exception

java.lang.NoClassDefFoundError:

atjava.lang.Class.getDeclaredConstructors0(NativeMethod)

atjava.lang.Class.privateGetDeclaredConstructors(Class.java:

2328)

atjava.lang.Class.getConstructor0(Class.java:

2640)

atjava.lang.Class.newInstanc

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1