1、现象

系统架构是使用jetty容器,终端通过nginx代理到后端服务,但是今天早上用户高并发的时候,用户返回异常,通过查看服务端的日志发现只有部分请求到达了后端,然后查看nginx的日志信息,发现存在大量请求返回404。

2、内网测试

对于这种问题,第一反应是jetty的最大线程数设置的太小了,所以决定在内网中测试。

  1. 修改etc/jetty.xml文件中的maxThreads配置,修改为20,以便内网重现
    shell命令操作HDFS

  2. 使用Jmeter工具,设置线程数为100,不断的调用该接口,查看日志信息。果然发现出现大量的404问题。当然同时也是有成功的200请求。
    shell命令操作HDFS

  3. 为了验证,重新修改jetty的最大线程数为800。然后继续以100个线程调用该接口。
    shell命令操作HDFS

  4. 查看日志信息,发现如下,不再出现404提示
    shell命令操作HDFS

3、总结

一般使用java+jetty开发的程序,jetty默认配置的最大线程数是200,当时当高并发的时候,如果存在某个接口耗时较长,那么线程数就可能不够用,此时有两种方式,一种是优化接口,另一种修改配置也不失为一种有效方案。这两种都没法实现的话,那么就要考虑调整架构,实现负载均衡等,这个另说。

相关文章: