开发者社区 问答 正文

tomcat 高并发配置:报错

一个项目用tomcat作为服务器,主要手机接口。大约500台手机并发量。tomcat里面的busy thread一直在增,直到挂掉。如图:

求各位大牛指点。

tomcat server.xml 大致配置如下:

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
    maxThreads="5000" maxIdleTime="60000"
    minSpareThreads="100"/>

   <Connector executor="tomcatThreadPool" port="8090" 
        protocol="org.apache.coyote.http11.Http11NioProtocol"
            maxThreads="5000" processorCache="50000"
        minSpareThreads="100" acceptorThreadCount="8"
            enableLookups="false" redirectPort="8443" acceptCount="5000"
            connectionTimeout="60000" keepAliveTimeout="60000"
        maxKeepAliveRequests="100"
            disableUploadTimeout="true"
            URIEncoding="UTF-8"
            compression="on" compressionMinSize="4096"
        />

展开
收起
kun坤 2020-06-14 15:40:25 792 分享 版权
阿里云 AI 助理回答

遇到Tomcat服务器在高并发情况下频繁挂掉的问题,通常需要从多个角度进行排查和优化。根据您提供的信息,这里有一些建议供参考:

  1. 线程池配置:您已经将maxThreads设置为5000,理论上可以处理相当大的并发量。但是,请注意,过高的maxThreads可能会导致系统资源耗尽(如内存不足),因为每个线程都会占用一定的内存。请确保您的系统资源(尤其是内存)足够支持这样的配置。

  2. 连接与接受配置

    • acceptCount="5000"表示当所有可能的请求处理线程都在使用时,可以放到等待队列中的请求数量。这个值也相当高,如果实际并发远低于此数但依然出现问题,可能问题不在这里。
    • 确认connectionTimeout="60000"是否合适,这代表空闲连接超时时间,过长可能导致连接堆积。
  3. 性能监控:首先,使用工具(如VisualVM、JConsole或更专业的APM工具如Arthas、Pinpoint等)监控Tomcat运行时的CPU、内存、线程堆栈等,找出瓶颈所在。特别关注是否有内存泄露、CPU过高、死锁等问题。

  4. 垃圾回收策略:检查JVM的垃圾回收策略,可能需要调整以适应高并发场景。例如,使用G1垃圾收集器可能对响应时间和吞吐量有帮助。

  5. 数据库与外部服务:确认接口操作中涉及的数据库或其他外部服务是否成为瓶颈。高并发下数据库连接池大小、查询效率、事务管理等都可能是问题所在。

  6. 代码层面优化:检查应用代码是否存在资源未释放、长时间阻塞、过度同步等问题。使用异步处理、缓存策略(如Redis)、数据库读写分离等技术减轻服务器压力。

  7. NIO与连接器:您已使用了NIO协议,这是正确的选择,因为它比传统的BIO更高效。不过,请确保您的Java版本与Tomcat版本兼容,并且NIO相关的参数(如processorCache)是经过测试调优的。

  8. 日志分析:查看Tomcat的日志文件,特别是catalina.out和localhost.log,寻找异常信息或错误堆栈,这些往往是解决问题的关键线索。

  9. 压测与调优:使用压测工具(如JMeter、Locust等)模拟实际并发场景,逐步增加压力,观察系统表现,根据测试结果进行针对性调优。

综上所述,解决此类问题通常需要综合考虑硬件资源、软件配置、代码实现以及外部依赖等多个方面。希望这些建议能帮助到您。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答