java异常及解决方法1:java.net.BindException:Addressalreadyinuse解决方法在网络编程中,特别是在短时间内new的网络连接太多,经常出现java.net.BindException:Addressalreadyinuse:JVM_Bind的异常,网络有很多介绍此异常的,通常都是在说是要使用的端口被别的程序已经使用,但有时并不是这个原因,通过仔细查找,找到一些很好的资料,在此将其一一记录下来。短时间内newsocket操作过多而socket.close()操作并不能立即释放绑定的端口而是把端口设置为TIME_WAIT状态过段时间(默认240s)才释放(用netstat-na可以看到)最后系统资源耗尽(windows上是耗尽了poolofephemeralports这段区间在1024-5000之间)SocketRememberthatTCPguaranteesalldatatransmittedwillbedelivered,ifatallpossible.Whenyoucloseasocket,theservergoesintoaTIME_WAITstate,justtobereallyreallysurethatallthedatahasgonethrough.Whenasocketisclosed,bothsidesagreebysendingmessagestoeachotherthattheywillsendnomoredata.This,itseemedtomewasgoodenough,andafterthehandshakingisdone,thesocketshouldbeclosed.Theproblemistwo-fold.First,thereisno2:java.net.BindException:Addressalreadyinuse:connect的问题大概原因是短时间内newsocket操作很多,而socket.close()操作并不能立即释放绑定的端口,而是把端口设置为TIME_WAIT状态,过段时间(默认240s)才释放,(用netstat-na可以看到),最后系统资源耗尽(windows上是耗尽了poolofephemeralports,这段区间在1024-5000之间;)避免出现这一问题的方法有两个,一个是调高你的web服务器的最大连接线程数,调到1024,2048都还凑合,以resin为例,修改resin.conf中的thread-pool.thread_max,如果你采用apache连resin的架构,别忘了再调整apache;另一个是修改运行web服务器的机器的操作系统网络配置,把timewait的时间调低一些,比如30s。在redhat上,查看有关的选项,[xxx@xxx~]$/sbin/sysctl-a|grepnet.ipv4.tcp_twnet.ipv4.tcp_tw_reuse=0net.ipv4.tcp_tw_recycle=0[xxx@xxx~]$vi/etc/sysctl,修改net.ipv4.tcp_tw_reuse=1net.ipv4.tcp_tw_recycle=1[xxx@xxx~]$sysctl-p,使内核参数生效socket-faq中的这一段讲time_wait的,摘录如下:2.7.PleaseexplaintheTIME_WAITstate.RememberthatTCPguaranteesalldatatransmittedwillbedelivered,3:当您尝试从TCP端口大于5000连接收到错误'WSAENOBUFS(10055)'症状---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---如果您尝试建立TCP连接从端口是大于5000,本地计算机响应并以下WSAENOBUFS(10055)错误信息:因为系统缺乏足够缓冲区空间或者因为队列已满无法执行套接字上操作。要点此部分,方法或任务包含步骤告诉您如何修改注册表。但是,如果修改注册表错误可能发生严重问题。因此,确保仔细执行这些步骤。用于添加保护之前,修改备份注册表。然后,在发生问题时还原注册表。有关如何备份和还原注册表,请单击下列文章编号以查看Microsoft知识库中相应:默认最大数量的短暂TCP端口为5000'适用于'部分中包含产品中。这些产品中已添加新参数。要增加最大值是短暂端口,请按照下列步骤操作:1.启动注册表编辑器。2.注册表,中找到以下子项,然后单击参数:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters3.在编辑菜单,单击新建,然后添加以下注册表项:MaxUserPort值名称:值类型:DWORD值数据:65534有效范围:5000-65534(十进制)默认:0x13885000(十进制)说明:此参数控制程序从系统请求任何可用用户端口时所用最大端口数。通常,1024的值和含5000之间分配临时(短期)端口。4.退出注册表编辑器,并重新启动计算机。注意一个附加TCPTimedWaitDelay注册表参数决定多久关闭端口等待可以重用关闭端口。4:java.lang.OutOfMemoryError:JavaheapspaceHeapsize设置JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heapsize的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn-Xms-Xmx...