申根三年多次往返签证:java.net.SocketException: Broken pipe

来源:百度文库 编辑:偶看新闻 时间:2024/05/06 07:33:14
原因1:
1 如果整体运行没问题,那么不要管这类错误
2 一般是服务器端向客户端发送大量数据,而此时客户端浏览器换了页面,刷新了页面,或者关闭了浏览器,造成服务器无法继续发送数据。
3 常见于下载,大的图片
参考:http://topic.csdn.net/u/20100125/10/90c5c709-16d6-4409-bab0-3d75e1972de9.html
原因2:
产生这个问题的原因可能有以下几个:
1、mysql的驱动的问题,我的驱动是mysql-connector-java-3.1.11-bin.jar
如果有兴趣测试话,可以使用其他新版本的mysql驱动来试试吧。
2、防火墙和网络上的问题,或者服务器发生了crash(有意或无意导致)
同学们可以检查产生"java.net.SocketException: Broken pipe" 错误的时候服务器、网络是否有异常?
3、应用系统的数据库连接池导致,最大的可能就是程序上写的不严谨  吼吼!
新手在开发过程中都难避免的失误:忘记数据库连接的关闭(纯jdbc的操作中常见,不过这个还好找啦,压力测试中如果看到数据库连接数多或者干脆挂掉可以找出原因的);
另外就是提交事物时,在对数据操作中没有做明确的commit或者rollback,如果忘记了提交commit,在你尝试使用类似的resultset去操作或者做其他的操作时就有可以能出现这样的问题,这样的悬挂着连接一直要等到超时mysql将其kill掉。仔细检查你应用的事物中是否都做了明确的提交操作呢?或者干错使用Hibernate,试试C3P0、Proxool这样的连接池吧。
参考:http://zhubin215130.iteye.com/blog/432218
原因3:
具体什么原因我也不清楚,我在国外的网站看到的是超时的原因,因为传的对象比较大,超时时间太短,在超时范围内数据没有写完,所以出现了这个问题,但是这个问题好象在linux上比较多,但是在windows上没有发现,还有我现在将srever和client的两边的读写都分别用一个线程控制,并且把ObjectOutputStream和ObjectInputStream同步,同时不设定超时时间,现在程序运行良好,速度也不错,谢谢各位了Top
14 楼homeland520(天山之王(哈哈两声说Beybey))回复于 2005-04-25 14:28:26 得分 0
终于找到很明晰的原因了,原因是往一个socket写一个序列化对象写了2次,因为网络不稳定,所以有短开重新连接的机制,但是由于两太机器通过服务代理的方式传输,所以server无法发现客护短客户端退出,这样造成客户端列表里有一个机器一个端口的两个socket对象,这样往socket里写的时候就造成一个对象写两次的现象
线上跑的java应用中的stderr.log中偶尔会有这样的日志出现,出现问题时系统负载并不高,并且系统可以自己恢复正常。google了很久,也困扰俺多日,今天对这个问题做一个了断。
产生这个问题的原因可能有以下几个:
1、mysql的驱动的问题,我的驱动是mysql-connector-java-3.1.11-bin.jar
如果有兴趣测试话,可以使用其他新版本的mysql驱动来试试吧。
2、防火墙和网络上的问题,或者服务器发生了crash(有意或无意导致)
同学们可以检查产生"java.net.SocketException: Broken pipe" 错误的时候服务器、网络是否有异常?
3、应用系统的数据库连接池导致,最大的可能就是程序上写的不严谨  吼吼!
新手在开发过程中都难避免的失误:忘记数据库连接的关闭(纯jdbc的操作中常见,不过这个还好找啦,压力测试中如果看到数据库连接数多或者干脆挂掉可以找出原因的);
另外就是提交事物时,在对数据操作中没有做明确的commit或者rollback,如果忘记了提交commit,在你尝试使用类似的resultset去操作或者做其他的操作时就有可以能出现这样的问题,这样的悬挂着连接一直要等到超时mysql将其kill掉。仔细检查你应用的事物中是否都做了明确的提交操作呢?或者干错使用Hibernate,试试C3P0、Proxool这样的连接池吧。
参考:http://bbs.chinaunix.net/thread-1699897-1-1.html