java常见的网络异常
1. java.net.SocketTimeoutException
这个异常比较常见,socket超时错误,超时分为连接超时和读取超时。一般有 2 个地方会抛出这个
- 一个是在调用Socket.connect方法的时候,这个超时参数由connect(SocketAddress endpoint,int timeout) 中的后者来决定
- 还有就是在调用Socket.read方法的时候,setSoTimeout(int timeout),这个是设定读取的超时时间。它们设置成 0 均表示无限大。
连接超时往往是由于网络不稳定造成的,但是读取超时不一定是网络延迟造成的,很有可能是下游服务的响应时间过长。
2. java.net.ConnectException: Connection refused: connect
该异常发生在客户端进行 new Socket(ip, port)或者 socket.connect(address,timeout)操作时,原因:指定 ip 地址的机器不能找到(也就是说从当前机器不存在到指定 ip 路由),或者是该 ip 存在,但找不到指定的端口进行监听。
应该首先检查客户端的 ip 和 port是否写错了,假如正确则从客户端 ping 一下服务器看是否能 ping 通,假如能 ping 通(服务服务器端把 ping 禁掉则需要另外的办法),则看在服务器端的监听指定端口的程序是否启动。
3. java.net.SocketException: Socket is closed
该异常在客户端和服务器均可能发生。异常的原因是己方主动关闭了连接后(调用了 Socket 的 close 方法)再对网络连接进行读写操作。
4. java.net.SocketException:
Connection reset或者Connect reset by peer:Socket write error
connection reset by peer在调用write或者read的时候都会出现。按照glibc的说法,是such as by the remote machine rebooting or an unrecoverable protocol violation。从字面意义上来看,是表示远端机器重启或者发生不可恢复的错误。
从我的测试来看,目前只出现在对端直接kill掉进程的情况。
对比tcpdump的截包图来看,直接kill掉远端进程的话,远端并没有发送FIN序号,来告诉对方,我已经关闭管道,而是直接发送了RST序号。
比如:server(tomcat)在向客户端client发送数据的过程中,client被kill掉了,发送RST数据包,中断了TCP连接,会出现这个异常,异常如下:
org.apache.catalina.connector.ClientAbortException: java.io.IOException: Connection reset by peer
而远端如果调用close或者shutdown的话,是会发送FIN序号的。按照TCP的四次挥手来看,是需要FIN这个序号的。
个人猜测,如果在本端没有收到对方的FIN序号而直接收到了RST序号的话,表明对端出现了machine rebooting or an unrecoverable protocol violation,这时候对这个管道的IO操作,就会出现connection reset by peer错误
该异常在客户端和服务器端均有可能发生,引起该异常的原因有两个。
第一个就是假如一端的 Socket 被关闭(或主动关闭或者因为异常退出而引起的关闭), 另一端仍发送数据,发送的第一个数据包引发该异常(Connect reset by peer)。
另一个是一端退出,但退出时并未关闭该连接,另一端假如再从连接中读数据则抛出该异常(Connection reset)。
5. java.net.SocketException: Broken pipe
指通信管道已坏。发生这个异常的场景是,通信的一方在收到“Connect reset by peer: Socket write
error”后,如果再继续写数据则会抛出 Broken pipe 异常
生产情况下发生此错误的场景:
一个java服务作为websocket client启动一个定时任务线程向远端websocket server发送请求,结果这个socket已经关闭了,于是会发生Connect reset by peer
之后这个线程30秒后继续向websocket server发送请求,则会抛出broken pipe
使用prometheus通过actuator监控spring boot服务。prometheus读取超时了,断开了连接。而这时候management tomcat还在处理请求,它并不知道prometheus已经断开了连接,处理完成请求后再将结果发给prometheus,就broken pipe了
6. java.net.SocketException: Too many open files
指进程打开文件句柄数超过限制。当并发用户数比较大时,服务器可能会报这个异常。这是因为每创建一个 Socket 连接就需要一个文件句柄,此外服务端程序在处理请求时可能也需要打开一些文件。
lsof -p pid
命令查看进程打开了哪些文件,是不是有资源泄露,也就是说进程打开的这些文件本应该被关闭,但由于程序的 Bug 而没有被关闭
如果没有资源泄露,可以通过设置增加最大文件句柄数。具体方法是通过ulimit -a
来查看系统目前资源限制,通过ulimit -n 10240
修改最大文件数。
7. java.io.EOFException: SSL peer shut down incorrectly
java.io.EOFException: SSL peer shut down incorrectly
com.alibaba.fastjson.JSONException: syntax error, expect {, actual EOF, pos 0
手动curl了对方的接口,发现OK
原因:网络波动导致问题
my csdn: 生产问题:java.io.EOFException: SSL peer shut down incorrectly
java常见的网络异常相关推荐
- Java 常见内存溢出异常与代码实现
Java 堆 OutOfMemoryError Java 堆是用来存储对象实例的, 因此如果我们不断地创建对象, 并且保证 GC Root 和创建的对象之间有可达路径以免对象被垃圾回收, 那么当创建的 ...
- Java常见内存溢出异常分析
Java虚拟机规范规定JVM的内存分为了好几块,比如堆,栈,程序计数器,方法区等,而Hotspot jvm的实现中,将堆内存分为了三部分,新生代,老年代,持久带,其中持久带实现了规范中规定的方法区,而 ...
- java常见的敏感异常
1.java.io.FileNotFoundException:泄露文件系统结构和文件名列举 2.ava.util.jar.JarException:泄露文件系统结构 3.java.util.Miss ...
- Java基础知识强化99:Java 常见异常及趣味解释
常见 Java 异常解释:(译者注:非技术角度分析.阅读有风险,理解需谨慎:) 1. java.lang java.lang软件包是java语言的核心部分,它提供了java中的基础类. java.la ...
- Java 语言基础(异常机制和File类,IO流,多线程,网络编程,反射机制)
原文:Java 语言基础(异常机制和File类,IO流,多线程,网络编程,反射机制) 异常机制和File类 异常机制 基本概念 异常就是"不正常"的含义,在 Java 语言中主要指 ...
- 常见的Socket网络异常场景分析
原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介 在目前微服务的背景下,网络异常越来越常见了,而有一些网络异常非常模糊,理解什么情况下会导致什么异常,还是有一定难度 ...
- Connection reset by peer的常见原因及常见网络异常
Connection reset by peer的常见原因: 1)服务器的并发连接数超过了其承载量,服务器会将其中一些连接关闭: 如果知道实际连接服务器的并发客户数没有超过服务器的承载量,则有可能是中 ...
- 【Java基础】Java常见的异常
Java常见的异常 1. java.lang.NullPointerException (空指针异常)调用了未经初始化的对象或者是不存在的对象 2. java.lang.ClassNotFoundEx ...
- Java 常见异常种类
Java 常见异常种类 参考文章: (1)Java 常见异常种类 (2)https://www.cnblogs.com/cvst/p/5822373.html 备忘一下.
- Java常见异常及解释
常见 Java 异常解释:(译者注:非技术角度分析.阅读有风险,理解需谨慎:)) java.lang ArithmeticException 你正在试图使用电脑解决一个自己解决不了的数学问题,请重新阅 ...
最新文章
- HTML DOM Table 对象
- Apache ZooKeeper - 集群中 Follow 的作用_非事务请求的处理与 Leader 的选举分析
- 全国计算机二级准考证贵州,贵州计算机二级考试准考证打印时间
- java-第九章-编写程序,打印如图案,要求图案的行数由用户输入.
- Sentinel隔离和降级
- .NET 动态脚本语言Script.NET系列文章汇总 非常精彩的应用举例
- 项目管理随感-项目管理是什么?
- Oracle笔记 十一、PL/SQL函数和触发器
- RabbitMQ学习之spring-amqp的重要类的认识
- python学习总结----异常处理
- 双一流2020年调整时间_“双一流”调整名单预测,985大学两升一降,两校退出名校阵营...
- vs2010断点调试详细教程
- 传送的谷歌应用程序打不开_如何使用Google Home将内容传送到您的Chromecast
- hive执行出现问题:Ended Job = job_1667594872527_3123 with errors Error during job, obtaining debugging info
- BeagleBone Black 从零到一 (2 MLO、U-Boot)
- uni-app 背景图片处理
- excel 错位插入_excel表格错位怎么解决?excel数据错位
- HDU 6130 Kolakoski
- 重磅榜单 | 国内云服务企业估值50强,【友盟+】位列其中。
- 教师资格证面试 计算机应用,2019下半年初中信息技术教师资格证面试真题及答案汇总...