精华内容
下载资源
问答
  • tomcat拒绝了连接请求
    千次阅读
    2019-08-14 08:50:25

    Tomcat连接拒绝的原因

    1.java.net.SocketTimeoutException: 连接超时或读取超时
    连接超时: Socket.connect 超时,网络不稳定造成
    读取超时:Socket.read 超时,可能由于下游服务响应时间长造成

    2.java.net.BindException:Address already in use: JVM_Bind
    端口被占用(服务端)
    new ServerSocket(port) 或者 Socket.bind 函数时,端口被占用,抛出这个异常。
    netstat -an 查看端口占用情况,选择未被占用的端口

    ProtoRecv-QSend-QLocal AddressForeign Address(state)
    tcp400ip.portip2.port2SYN_SENT

    3.java.net.ConnectException:Connection refused:connect
    连接被拒绝(客户端)
    new Socket(ip,port) 或者 Socket.connect 时可能会抛出异常
    原因:a) 未找到ip地址对应的机器 b) 机器未开启指定的监听端口
    方法:a) 客户端ping一下ip b) 能ping通,查看服务是否崩溃

    4.java.net.SocketException:Socket is closed
    连接已关闭
    原因:通信一方主动关闭Socket连接:调用Socket.close,接着又进行读写操作。

    5.java.net.SocketException:Connection reset/Connect reset by peer:Socket write error
    连接被重置
    原因:a) 通信一方已将Socket关闭(主动关闭或异常退出),另一方还在写数据,抛出(Connect reset by peer)
       b) 对方尝试从TCP连接中获取数据,抛出(Connection reset)
    方法:a) 程序退出前主动关闭所有网络连接
       b) 检测通信的另一方的关闭连接操作,当发现另一方关闭连接后自己也要关闭该连接

    6.java.net.SocketException:Broke pipe
    通信管道已坏
    原因:通信的一方收到Connect by peer:Socket write error 后,再继续写数据会抛出次异常

    7.java.net.SocketException:Too many open files
    进程打开文件数超过限制
    原因:并发用户数比较大时,服务器可能会报这个异常,每创建一个Socket连接,需要一个文件句柄,此外服务器程序处理请求时可能也会打开一些文件。
    解决方案:a) lsof -p pid 查看进程打开了哪些文件,是不是有资源泄漏(文件没有及时被关闭)
         b) 没有资源泄漏,可以通过设置最大文件句柄数。 ulimit -a 查看 系统资源限制,ulimit -n ${fileNums} 修改最大文件数

    极客时间学习笔记

    更多相关内容
  • 在 Socket 网络通信过程中,不可避免地会碰到...acceptCount 用来控制内核的 TCP 连接队列长度,maxConnections 用于控制 Tomcat 层面的最大连接数。通过调整和相关的内核参数somaxconn,增加了系统的并发度。......

    Tomcat拒绝连接原因分析及网络优化

    Hi,我是阿昌,今天记录学习的是关于Tomcat拒绝连接原因分析及网络优化的内容。

    一、常见异常

    1、java.net.SocketTimeoutException

    指超时错误。超时分为连接超时读取超时,连接超时是指在调用 Socket.connect 方法的时候超时,而读取超时是调用 Socket.read 方法时超时。

    注意的是,连接超时往往是由于网络不稳定造成的,但是读取超时不一定是网络延迟造成的,很有可能是下游服务的响应时间过长。

    2、java.net.BindException: Address already in use: JVM_Bind

    指端口被占用。当服务器端调用 new ServerSocket(port) 或者 Socket.bind 函数时,如果端口已经被占用,就会抛出这个异常。我们可以用netstat –an命令来查看端口被谁占用了,换一个没有被占用的端口就能解决。

    3、java.net.ConnectException: Connection refused: connect

    指连接被拒绝。当客户端调用 new Socket(ip, port) 或者 Socket.connect 函数时,可能会抛出这个异常。

    原因是指定 IP 地址的机器没有找到;或者是机器存在,但这个机器上没有开启指定的监听端口。

    解决办法是从客户端机器 ping 一下服务端 IP,假如 ping 不通,可以看看 IP 是不是写错了;假如能 ping 通,需要确认服务端的服务是不是崩溃了。

    4、java.net.SocketException: Socket is closed

    指连接已关闭。出现这个异常的原因是通信的一方主动关闭了 Socket 连接(调用了 Socket 的 close 方法),接着又对 Socket 连接进行了读写操作,这时操作系统会报“Socket 连接已关闭”的错误。

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

    指连接被重置。这里有两种情况,分别对应两种错误:

    第一种情况是通信的一方已经将 Socket 关闭,可能是主动关闭或者是因为异常退出,这时如果通信的另一方还在写数据,就会触发这个异常(Connect reset by peer);

    如果对方还在尝试从 TCP 连接中读数据,则会抛出 Connection reset 异常。

    • 为了避免这些异常发生,在编写网络通信程序时要确保:

    • 程序退出前要主动关闭所有的网络连接。检测通信的另一方的关闭连接操作,当发现另一方关闭连接后自己也要关闭该连接。

    6、java.net.SocketException: Broken pipe

    指通信管道已坏。发生这个异常的场景是,通信的一方在收到“Connect reset by peer: Socket write error”后,如果再继续写数据则会抛出 Broken pipe 异常,解决方法同上。

    7、java.net.SocketException: Too many open files

    指进程打开文件句柄数超过限制。当并发用户数比较大时,服务器可能会报这个异常。

    这是因为每创建一个 Socket 连接就需要一个文件句柄,此外服务端程序在处理请求时可能也需要打开一些文件。你可以通过lsof -p pid命令查看进程打开了哪些文件,是不是有资源泄露,也就是说进程打开的这些文件本应该被关闭,但由于程序的 Bug 而没有被关闭。

    如果没有资源泄露,可以通过设置增加最大文件句柄数。具体方法是通过ulimit -a来查看系统目前资源限制,通过ulimit -n 10240修改最大文件数。

    在这里插入图片描述

    二、Tomcat 网络参数

    接下来我们看看 Tomcat 两个比较关键的参数:maxConnections 和 acceptCount。在解释这个参数之前,先简单回顾下 TCP 连接的建立过程:客户端向服务端发送 SYN 包,服务端回复 SYN+ACK,同时将这个处于 SYN_RECV 状态的连接保存到半连接队列。客户端返回 ACK 包完成三次握手,服务端将 ESTABLISHED 状态的连接移入 accept 队列,等待应用程序(Tomcat)调用 accept 方法将连接取走。这里涉及两个队列:

    • 半连接队列:保存 SYN_RECV 状态的连接。队列长度由net.ipv4.tcp_max_syn_backlog设置。
    • accept 队列:保存 ESTABLISHED 状态的连接。队列长度为min(net.core.somaxconn,backlog)。其中 backlog 是我们创建 ServerSocket 时指定的参数,最终会传递给 listen 方法:
    int listen(int sockfd, int backlog);
    

    如果我们设置的 backlog 大于net.core.somaxconn,accept 队列的长度将被设置为net.core.somaxconn,而这个 backlog 参数就是 Tomcat 中的 acceptCount 参数,默认值是 100,但请注意net.core.somaxconn的默认值是 128。

    可以想象在高并发情况下当 Tomcat 来不及处理新的连接时,这些连接都被堆积在 accept 队列中,而 acceptCount 参数可以控制 accept 队列的长度,超过这个长度时,内核会向客户端发送 RST,这样客户端会触发上文提到的“Connection reset”异常。而 Tomcat 中的 maxConnections 是指 Tomcat 在任意时刻接收和处理的最大连接数。

    当 Tomcat 接收的连接数达到 maxConnections 时,Acceptor 线程不会再从 accept 队列中取走连接,这时 accept 队列中的连接会越积越多。maxConnections 的默认值与连接器类型有关:NIO 的默认值是 10000,APR 默认是 8192。

    会发现 Tomcat 的最大并发连接数等于 maxConnections + acceptCount。

    如果 acceptCount 设置得过大,请求等待时间会比较长;如果 acceptCount 设置过小,高并发情况下,客户端会立即触发 Connection reset 异常。

    三、Tomcat 网络调优实战

    通过一个直观的例子理解。

    我们先重现流量高峰时 accept 队列堆积的情况,这样会导致客户端触发“Connection reset”异常,然后通过调整参数解决这个问题。

    主要步骤有:

    下载和安装压测工具JMeter。解压后打开,我们需要创建一个测试计划、一个线程组、一个请求和,如下图所示。

    测试计划:

    在这里插入图片描述

    线程组(线程数这里设置为 1000,模拟大流量):

    在这里插入图片描述

    请求(请求的路径是 Tomcat 自带的例子程序):

    在这里插入图片描述
    启动 Tomcat。

    开启 JMeter 测试,在 View Results Tree 中会看到大量失败的请求,请求的响应里有“Connection reset”异常,也就是前面提到的,当 accept 队列溢出时,服务端的内核发送了 RST 给客户端,使得客户端抛出了这个异常。

    在这里插入图片描述

    修改内核参数,在/etc/sysctl.conf中增加一行net.core.somaxconn=2048,然后执行命令sysctl -p

    修改 Tomcat 参数 acceptCount 为 2048,重启 Tomcat。

    在这里插入图片描述
    再次启动 JMeter 测试,这一次所有的请求会成功,也看不到异常了。

    我们可以通过下面的命令看到系统中 ESTABLISHED 的连接数增大了,这是因为我们加大了 accept 队列的长度。

    在这里插入图片描述

    四、总结

    在 Socket 网络通信过程中,不可避免地会碰到各种 Java 异常,了解这些异常产生的原因非常关键,通过这些信息我们大概知道问题出在哪里,如果一时找不到问题代码,我们还可以通过网络抓包工具来分析数据包。

    在这个基础上,分析了 Tomcat 中两个比较重要的参数:acceptCountmaxConnections

    acceptCount 用来控制内核的 TCP 连接队列长度,maxConnections 用于控制 Tomcat 层面的最大连接数。

    通过调整 acceptCount 和相关的内核参数somaxconn增加了系统的并发度

    在上面的实验中,我们通过netstat命令发现有大量的 TCP 连接处在 TIME_WAIT 状态,请问这是为什么?它可能会带来什么样的问题呢?

    TCP 连接处在 TIME_WAIT 状态,这个是TCP协议规定的,四次挥手时主动关闭方所处的一个状态,会等待2个MSL,所以在这个时间段内不会释放句柄,如果并发量大的话,会导致句柄不够用,从而影响新的TCP连接。


    展开全文
  • Tomcat拒绝连接原因分析

    千次阅读 2022-04-10 15:33:05
    常见异常 java.net.SocketTimeoutException 超时错误,分为连接超时和读取超时,连接超时往往是由于网络不稳定造成的,但是读取超时不一定是网络延迟造成的,很有可能是下游服务的响应时间过长。...连接拒绝,可能

    常见异常

    java.net.SocketTimeoutException
    超时错误,分为连接超时和读取超时,连接超时往往是由于网络不稳定造成的,但是读取超时不一定是网络延迟造成的,很有可能是下游服务的响应时间过长。

    java.net.BindException: Address already in use:JVM_Bind
    端口占用 ,通过netstat -ntlp查看端口占用情况

    java.net.ConnectException:Connection refused: connect
    连接被拒绝,可能的问题是:网络不通(即ip地址是否写错,端口是否启用,服务是否正常)

    java.net.SocketException: Socket is colsed
    连接已关闭,问题是通信的一方主动关闭了socket连接,接着又对socket连接进行了读写操作,这时候会报连接已关闭的错误。

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

    连接被重置,错误原因一般是:通信放将socket关闭(主动关闭或者异常导致),这时通信的另一方还在写数据,就会触发(connect reset by peer)此报错;如果对方还在尝试从TCP连接中读数据,则会抛出Connection reset 异常。解决办法:程序在退出钱要主动关闭所有网络连接;检测通信的另一方的关闭连接操作,当发现另一方关闭连接后自己也关闭连接。

    java.net.SocketException: Broken pipe

    通信管道损坏,一般是:通信的一方收到"Connect reset by peer:Socket write error"后,继续写数据则抛出此异常,解决办法同连接被重置的处理办法。

    java.net.SocketException:Too many open files

    打开文件句柄数超过限制。 可以通过lsof -p pid 查看进程打开了哪些文件,是否有打开后应该被关闭的文件因异常未关闭;若没有,则通过修改系统最大文件句柄数来增大,ulimit -a查看资源限制,ulimit -n **** 修改最大打开的文件数。

    tomcat网络参数:maxConnections和acceptCount
    TCP连接处于SYN_RECV状态的连接被保存到半连接队列,队列长度由:net.ipv4.tcp_max_syn_backlog设置

    完成TCP连接处理ESTABLISHED状态的连接被保存到accept队列,Tomcat Acceptor线程调用accept方法将连接取走,队列长度为:min(net.core.somaxconn,backlog),即取内核net.core.somaxconn 和tomcat配置中的最小值,其中backlog是在tomcat中配置的acceptCount参数,默认是100,net.core.somaxconn默认是128。

    maxConnections是指Tomcat在任意时刻接收和处理的最大连接数,超过此阈值以后,tomcat不再从accept队列中取走连接。默认值与连接器类型有关:NIO默认值10000,APR默认是8192

    结论:tomcat的最大并发连接数等于maxConnections + acceptCount ,若acceptCount设置过大,请求等待时间会比较长,若acceptCount设置过小,高并发下,客户端将会很快触发Connection reset异常。

    本文整理自:极客时间-李号双-《深入拆解Tomcat&&jetty》

    展开全文
  • Mac Tomcat安装 localhost 拒绝了我们的连接请求 Mac下安装Tomcat服务器,下载的Tomcat10 在bin目录下,授权 chmod 777 *.sh 启动Tomcat服务 ./startup.sh 执行结果如下图:服务启动成功: ...

    Mac Tomcat安装 localhost 拒绝了我们的连接请求

    Mac下安装Tomcat服务器,下载的Tomcat10
    在这里插入图片描述

    在bin目录下,授权

    chmod 777 *.sh
    

    启动Tomcat服务

    ./startup.sh
    

    执行结果如下图:服务启动成功:
    在这里插入图片描述

    http://localhost:8080/的结果:
    在这里插入图片描述

    解决的办法:
    启动和关闭Tomcat服务时使用下面的命令:

    sudo sh shutdown.sh
    

    在这里插入图片描述

    然后需要输入开机密码,
    最后启动成功,http://localhost:8080/正常连接。

    展开全文
  • 点击上方蓝色字体,选择“标星公众号”优质文章,第一时间送达关注公众号后台回复pay或mall获取实战项目资料视频点击此链接:多套...经常会遇到连接数、线程数之类的配置问题,要真正理解这些概念,必须先了解Tomc...
  • 安装portal的时候就已经配置过https,而且之前的一段时间访问“https://localhost”的时候也是能正常访问,但是今天访问的时候发现突然不行了,浏览器报错“localhost拒绝了我们的请求”,所以很是郁闷。 解决...
  • 我是Docker的新手,我正在尝试运行默认的tomcat映像.我看到容器正在运行,但当我尝试从我的Web浏览器中点击它时,我得到“CONNECTION REFUSED”.这里发生了什么?细节我在Windows 7 PC上安装了Docker Toolbox.我从较旧...
  • java.net.ConnectException: Connection refused: connect 指连接拒绝。当客户端调用 new Socket(ip, port) 或者 Socket.connect 函数时,可能会抛出这个异常。原因是指定 IP 地址的机器没有找到;或者是机器存在...
  • localhost、Tomcat的localhost:8080拒绝访问解决方案 但127.0.0.1:8080可以实现访问(win10系统) 解决方案: 打开“我的电脑”,选择左上角的“计算机”中的“卸载或更改程序”。 点击“启用或关闭Windows功能”。 ...
  • Tomcat(三):tomcat处理连接的详细过程 </h1> <div class="clear"></div> <div class="post-categoty-tags"><div class="post-categoty"> 分类: <a href=...
  • 解决办法:重启tomcat 找到tomcat文件夹下的bin文件夹,先点击shutdown.bat,将tomcat关掉。再双击startup.bat,将tomcat重新启动。即可
  • 我遇到了一个bug 这是我的需求 。 然后我就开始配置tomcat, 然后是链接数据库, 。 最后界面出来了,但具体内容还是没有,是不是我的tomcat配错了??
  • 背景: 基于nginx 、tomcat(多个服务)、websocket 前提下,进行通知。 nginx 版本:nginx version: nginx/1.14.1 前提:tomcat 处于运行中,只修改 nginx 支持websocket 配置。 一、配置文件如下 在nginx.conf ...
  • Linux Tomcat最大连接

    2022-03-12 11:11:16
    tomcat最大连接数取决于2个方面,服务器的资源和tomcat的配置。 服务器 端口号 建立一个 TCP 连接,需要将通信两端的套接字(socket)进行绑定,如下: 源 IP 地址:源端口号 <----> 目标 IP 地址:目标端口...
  • 一、先进入容器内部,指令为:“docker exec -it 容器名 进入容器对应的指令”,如“docker exec -it tomcat7 /bin/bash” 执行后会默认到达“/usr/local/tomcat”目录 二、删除webapps目录 三、然后将webapps....
  • 今天根据大佬们的安装教程将Tomcat安装并成功启动,而在浏览器中输入localhost:8080后却出现了’localhost拒绝了我们的连接请求‘的字样,网上的解决方案五花八门,水平也是参差不齐,非常误导人,所以将自己的解决...
  • Tomcat是一个web应用服务器,是一个Servlet/Jsp容器,主要负责将客户端请求传递给对应的Servlet,并且将Servlet的响应数据返回给客户端。 Tomcat是基于组件的服务器。 二、Tomcat体系结构 Tomcat是一个基于组件的...
  • 1、localhost拒绝了我们的连接请求的原因: tomcat启动不了。而且启动tomcat时,发现黑色命令行窗口一闪而过,且web服务并没有启动起来 2、找出原因tomcat一闪而过: 参考:...
  • 今天遇到了一个非常棘手的问题,...于是打开本地连接的属性,把ip地址从自动获取设置为手动获取(本机未联网),把ip设置为静态后 再去尝试,结果还是不行。 再来就是可能端口被占用了,于是打开命令行输入nets...
  • 详解tomcat连接数与线程池

    千次阅读 2021-09-30 13:49:44
    ​ Connector的主要功能,是接收连接请求,创建Request和Response对象用于和请求端交换数据;然后分配线程让Engine(也就是Servlet容器)来处理这个请求,并把产生的Request和Response对象传给Engine。当Engine处理...
  • 在前面的文章 详解Tomcat配置文件server.xml 中写到过:Connector的主要功能,是接收连接请求,创建Request和Response对象用于和请求端交换数据;然后分配线程让Engine(也就是Servlet容器)来处理这个请求,并把...
  • 为了确保服务不会被过多的http长连接压垮,我们需要对tomcat设定个最大连接数,超过这个连接数的请求拒绝,让其负载到其它机器。达到保护自己的同时起到连接数负载均衡的作用。 一、解决方案:修改tomcat配置文件...
  • 解决127.0.0.1拒绝了我们的连接请求

    万次阅读 2020-06-29 12:07:53
    运行Django项目,浏览器显示127.0.0.1拒绝了我们的连接请求PyCharm后台运行截图在Google输入前端界面网址截图在IE输入前端界面网址截图解决方法总结 PyCharm后台运行截图 运行Django成功,并且没有error以及warning...
  • 无法打开localhost,localhost拒绝访问 问题:输入localhost或者localhost:8080后,浏览器提示“localhost拒绝访问” 解决方案:如果运行startup.bat之后把黑窗口...tomcat 8.0默认端口是9527,tomcat8.5默认端口是8080
  • 127.0.0.1拒绝了我们的连接请求

    万次阅读 多人点赞 2019-06-27 01:34:45
    浏览器打不开127.0.0.1,显示拒绝连接。试着ping了一下。 需要指明一点,::1是ipv6的地址,但正常localhost应该指向127.0.0.1。 使用Windows自带的网络诊断工具,出现了“127.0.0.1未设置为接受端口“万维网服务...
  • 1、背景:ping 该公网ip能ping通 2、解决思路: a、检查tomcat是否已经启动 ps -ef | grep tomcat b、检查nginx是否已经启动 ps -ef | grep nginx
  • 转载 :https://blog.csdn.net/liufuwu1/article/details/54890834可以通过设置tomcat下conf文件夹的server.xml文件,对请求连接数和请求超时时间进行设置。connectionTimeout="20000"redirectPort="8443" ...
  • 无法访问此网站localhost 拒绝了我们的连接请求。eclipse中tomcat服务器正常启动 昨天遇到这个问题,具体如图 昨天用了很久的时间,在网上看了很多案例,但是和我遇到的这个问题有很大的相识。可是都没有用,试了一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,476
精华内容 6,990
热门标签
关键字:

tomcat拒绝了连接请求

友情链接: electric_field.rar