浅谈Tomcat拒绝连接原因

java.net.SocketTimeoutException

原因
超时分为连接超时和读取超时。
解决方法
连接超时往往是由于网络不稳定造成的,但是读取超时不一定是网络延迟造成的,很有可能是下游服务的响应时间过长。
java.net.BindException: Address already in use: JVM_Bind
端口被占用。当服务器端调用 new ServerSocket(port) 或者 Socket.bind 函数时,如果端口已经被占用,就会抛出这个异常。

java.net.ConnectException: Connection refused: connect

原因:
连接已关闭

java.net.SocketException: Connection reset/Connect reset by peer:Socket write error

原因:
是通信的一方已经将Socket 关闭
解决方法:
程序退出前要主动关闭所有的网络连接。
检测通信的另一方的关闭连接操作,当发现另一方关闭连接后自己也要关闭该连接。

java.net.SocketException: Broken pipe

通信管道已坏,原因和解决方法同上。

java.net.SocketException: Too many open files

原因:
指进程打开文件句柄数超过限制。当并发用户数比较大时,服务器可能会报这个异常。这是因为每创建一个 Socket 连接就需要一个文件句柄,此外服务端程序在处理请求时可能也需要打开一些文件。
你可以通过lsof -p pid命令查看进程打开了哪些文件,是不是有资源泄露,也就是说进程打开的这些文件本应该被关闭,但由于程序的 Bug 而没有被关闭。
解决方法:
如果没有资源泄露,可以通过设置增加最大文件句柄数。具体方法是通过ulimit -a来查看系统目前资源限制,通过ulimit -n 10240修改最大文件数。

Tomcat的两个重要参数

acceptCount 和maxConnections。acceptCount 用来控制内核的 TCP 连接队列长度,maxConnections用于控制 Tomcat 层面的最大连接数,Tomcat 的最大并发连接数等于maxConnections + acceptCount。我们可以通过调整 acceptCount 和相关的内核参数somaxconn,增加了系统的并发度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ForzaUbuntuer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值