tomcat假死导致项目无法访问

  • 问题
21-May-2019 15:49:55.773 严重 [http-nio-8088-Acceptor-0] org.apache.tomcat.util.net.NioEndpoint$Acceptor.run Socket accept failed
 java.io.IOException: 打开的文件过多
	at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
	at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:241)
	at org.apache.tomcat.util.net.NioEndpoint$Acceptor.run(NioEndpoint.java:692)
	at java.lang.Thread.run(Thread.java:745)
  • 解决方法
    方法一:找到server.xml文件修改配置

     <Connector connectionTimeout="20000" port="8088" protocol="HTTP/1.1" redirectPort="8443"/>
    

    修改为:

    
    <Connector port="8088" protocol="org.apache.coyote.http11.Http11NioProtocol"
                   connectionTimeout="20000" maxKeepAliveRequests="134" minProcessors="10" maxProcessors="1024"
                   acceptCount ="1500" maxThreads ="1024" minSpareThreads ="25"  maxSpareThreads ="1000" URIEncoding="UTF-8"
                   redirectPort="8443" />
    
    
  • 方法二:
    增大用户允许打开的句柄数
      1.使用ps -ef |grep tomcat 查看你的进程ID,记录ID号,假设进程ID为13714
      2.使用:lsof -p 13714| wc -l 查看当前进程id为13714的 文件操作状况
        执行该命令出现文件使用情况为 180
      3.使用命令:ulimit -a 查看每个用户允许打开的最大文件数
        发现系统默认的是open files (-n) 1024,问题就出现在这里。
      4.然后执行:ulimit -n 4096
        将open files (-n) 1024 设置成open files (-n) 4096

  • 解释:

maxThreads:tomcat起动的最大线程数,即同时处理的任务个数,默认值为200
acceptCount:当tomcat起动的线程数达到最大时,接受排队的请求个数,默认值为100

  • 这两个值如何起作用,请看下面三种情况

    情况1:接受一个请求,此时tomcat起动的线程数没有到达maxThreads,tomcat会起动一个线程来处 理此请求。
    情况2:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,tomcat会把此请求放入等待队列,等待空闲线程。
    情况3:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,等待队列中的请求个数也达到了acceptCount,此时tomcat会直接拒绝此次请求,返回connection refused

    杜绝假死,Tomcat容器做到自我保护,设置最大连接数
    org.apache.tomcat.util.net.NioEndpoint,打开的文件过多

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值