Dropwizard线程等待计数增加,服务器停止响应所有资源请求

时间:2015-01-10 09:55:17

标签: java rest jetty dropwizard

我使用DropWizard框架创建了一个RestFul应用程序,在提供了大约20个请求后,应用程序才停止响应。在记录文件中找不到错误/异常条目。

我发现,通过管理控制分析统计数据 jvm.threads.waiting.count = 47随着每个新请求不断增加。

应用程序中没有实现多线程,因此应用程序无法进入等待状态。

此外,如果我重新启动应用程序,它工作正常。

以下是其中一个未收到回复的请求的标题

*152226 INFO  c.s.j.a.c.filter.LoggingFilter - 22 * Server in-bound request*
*22 > POST http://text.com/quotes*
*22 > Accept-Language: en-US,en;q=0.5*
*22 > Host: localhost:8080*
*22 > Content-Length: 1041*
*22 > Accept-Encoding: gzip, deflate*
*22 > User-Agent: Mozilla/5.0 (X11; Linux i686 on x86_64; rv:34.0) *Gecko/20100101Firefox/34.0*
*22 > Trace-Id: kiki-12345*
*22 > Connection: keep-alive*

请求数据未故意共享。

甚至无法弄清楚由于netstat造成的原因。

我想知道这是应用程序级问题还是由于DropWizard应用程序配置不正确而引起的问题?

管理部分的完整统计信息如下所示,我也有兴趣了解以下每个数据,并请求分享解释这些字段的链接。

===========================

{
    "version": "3.0.0",
    "gauges": {
        "jvm.buffers.direct.capacity": {
            "value": 1466889
        },
        "jvm.buffers.direct.count": {
            "value": 116
        },
        "jvm.buffers.direct.used": {
            "value": 1466990
        },
        "jvm.buffers.mapped.capacity": {
            "value": 0
        },
        "jvm.buffers.mapped.count": {
            "value": 0
        },
        "jvm.buffers.mapped.used": {
            "value": 0
        },
        "jvm.gc.PS-MarkSweep.count": {
            "value": 16
        },
        "jvm.gc.PS-MarkSweep.time": {
            "value": 1354
        },
        "jvm.gc.PS-Scavenge.count": {
            "value": 21
        },
        "jvm.gc.PS-Scavenge.time": {
            "value": 153
        },
        "jvm.memory.heap.committed": {
            "value": 177733632
        },
        "jvm.memory.heap.init": {
            "value": 64984960
        },
        "jvm.memory.heap.max": {
            "value": 924844032
        },
        "jvm.memory.heap.usage": {
            "value": 0.02400968728962939
        },
        "jvm.memory.heap.used": {
            "value": 22205216
        },
        "jvm.memory.non-heap.committed": {
            "value": 50266112
        },
        "jvm.memory.non-heap.init": {
            "value": 24576000
        },
        "jvm.memory.non-heap.max": {
            "value": 136314880
        },
        "jvm.memory.non-heap.usage": {
            "value": 0.30244334294245795
        },
        "jvm.memory.non-heap.used": {
            "value": 41227528
        },
        "jvm.memory.pools.Code-Cache.usage": {
            "value": 0.03484217325846354
        },
        "jvm.memory.pools.PS-Eden-Space.usage": {
            "value": 0.027302608311733353
        },
        "jvm.memory.pools.PS-Old-Gen.usage": {
            "value": 0.018778225297105475
        },
        "jvm.memory.pools.PS-Perm-Gen.usage": {
            "value": 0.45908793007455223
        },
        "jvm.memory.pools.PS-Survivor-Space.usage": {
            "value": 0
        },
        "jvm.memory.total.committed": {
            "value": 227999744
        },
        "jvm.memory.total.init": {
            "value": 89560960
        },
        "jvm.memory.total.max": {
            "value": 1061158912
        },
        "jvm.memory.total.used": {
            "value": 63434984
        },
        "jvm.threads.blocked.count": {
            "value": 0
        },
        "jvm.threads.count": {
            "value": 78
        },
        "jvm.threads.daemon.count": {
            "value": 8
        },
        "jvm.threads.deadlocks": {
            "value": [ ]
        },
        "jvm.threads.new.count": {
            "value": 0
        },
        "jvm.threads.runnable.count": {
            "value": 23
        },
        "jvm.threads.terminated.count": {
            "value": 0
        },
        "jvm.threads.timed_waiting.count": {
            "value": 8
        },
        "jvm.threads.waiting.count": {
            "value": 47
        },
        "org.eclipse.jetty.util.thread.QueuedThreadPool.dw.jobs": {
            "value": 0
        },
        "org.eclipse.jetty.util.thread.QueuedThreadPool.dw.size": {
            "value": 33
        },
        "org.eclipse.jetty.util.thread.QueuedThreadPool.dw.utilization": {
            "value": 0.9696969696969697
        }
    },
    "counters": {
        "io.dropwizard.jetty.MutableServletContextHandler.active-dispatches": {
            "count": 28
        },
        "io.dropwizard.jetty.MutableServletContextHandler.active-requests": {
            "count": 28
        },
        "io.dropwizard.jetty.MutableServletContextHandler.active-suspended": {
            "count": 0
        }
    },
    "histograms": { },
    "meters": {
        "ch.qos.logback.core.Appender.all": {
            "count": 1,
            "m15_rate": 7.747995257374595e-22,
            "m1_rate": 0.008714462773784218,
            "m5_rate": 0.000016544813111326462,
            "mean_rate": 0.00035368404453324113,
            "units": "events/second"
        },
        "ch.qos.logback.core.Appender.debug": {
            "count": 0,
            "m15_rate": 0,
            "m1_rate": 0,
            "m5_rate": 0,
            "mean_rate": 0,
            "units": "events/second"
        },
        "ch.qos.logback.core.Appender.error": {
            "count": 0,
            "m15_rate": 0,
            "m1_rate": 0,
            "m5_rate": 0,
            "mean_rate": 0,
            "units": "events/second"
        },
        "ch.qos.logback.core.Appender.info": {
            "count": 1,
            "m15_rate": 7.747995257374595e-22,
            "m1_rate": 0.008714462773784218,
            "m5_rate": 0.000016544813111326462,
            "mean_rate": 0.00035368403287775683,
            "units": "events/second"
        },
        "ch.qos.logback.core.Appender.trace": {
            "count": 0,
            "m15_rate": 0,
            "m1_rate": 0,
            "m5_rate": 0,
            "mean_rate": 0,
            "units": "events/second"
        },
        "ch.qos.logback.core.Appender.warn": {
            "count": 0,
            "m15_rate": 0,
            "m1_rate": 0,
            "m5_rate": 0,
            "mean_rate": 0,
            "units": "events/second"
        },
        "io.dropwizard.jetty.MutableServletContextHandler.1xx-responses": {
            "count": 0,
            "m15_rate": 0,
            "m1_rate": 0,
            "m5_rate": 0,
            "mean_rate": 0,
            "units": "events/second"
        },
        "io.dropwizard.jetty.MutableServletContextHandler.2xx-responses": {
            "count": 13,
            "m15_rate": 4.94961760464336e-10,
            "m1_rate": 0.0034421634791656336,
            "m5_rate": 0.000711983613661116,
            "mean_rate": 0.004598973132381405,
            "units": "events/second"
        },
        "io.dropwizard.jetty.MutableServletContextHandler.3xx-responses": {
            "count": 0,
            "m15_rate": 0,
            "m1_rate": 0,
            "m5_rate": 0,
            "mean_rate": 0,
            "units": "events/second"
        },
        "io.dropwizard.jetty.MutableServletContextHandler.4xx-responses": {
            "count": 3,
            "m15_rate": 2.5736064313211317e-20,
            "m1_rate": 0.00018660583536242524,
            "m5_rate": 0.0000018719139194908126,
            "mean_rate": 0.0010613014574099948,
            "units": "events/second"
        },
        "io.dropwizard.jetty.MutableServletContextHandler.5xx-responses": {
            "count": 3,
            "m15_rate": 1.3432085553605237e-10,
            "m1_rate": 0.0008942559715277348,
            "m5_rate": 0.00019309079729952434,
            "mean_rate": 0.001061301432161492,
            "units": "events/second"
        },
        "io.dropwizard.jetty.MutableServletContextHandler.async-dispatches": {
            "count": 0,
            "m15_rate": 0,
            "m1_rate": 0,
            "m5_rate": 0,
            "mean_rate": 0,
            "units": "events/second"
        },
        "io.dropwizard.jetty.MutableServletContextHandler.async-timeouts": {
            "count": 0,
            "m15_rate": 0,
            "m1_rate": 0,
            "m5_rate": 0,
            "mean_rate": 0,
            "units": "events/second"
        }
    },
    "timers": {
        "com.flightnetwork.insurance.resource.Book.book": {
            "count": 0,
            "max": 0,
            "mean": 0,
            "min": 0,
            "p50": 0,
            "p75": 0,
            "p95": 0,
            "p98": 0,
            "p99": 0,
            "p999": 0,
            "stddev": 0,
            "m15_rate": 0,
            "m1_rate": 0,
            "m5_rate": 0,
            "mean_rate": 0,
            "duration_units": "seconds",
            "rate_units": "calls/second"
        },
        "com.flightnetwork.insurance.resource.Policies.doSearch": {
            "count": 0,
            "max": 0,
            "mean": 0,
            "min": 0,
            "p50": 0,
            "p75": 0,
            "p95": 0,
            "p98": 0,
            "p99": 0,
            "p999": 0,
            "stddev": 0,
            "m15_rate": 0,
            "m1_rate": 0,
            "m5_rate": 0,
            "mean_rate": 0,
            "duration_units": "seconds",
            "rate_units": "calls/second"
        },
        "com.flightnetwork.insurance.resource.Quote.getQuote": {
            "count": 16,
            "max": 2.218201954,
            "mean": 0.5852605546875,
            "min": 0.36994936300000003,
            "p50": 0.468106361,
            "p75": 0.533698946,
            "p95": 2.218201954,
            "p98": 2.218201954,
            "p99": 2.218201954,
            "p999": 2.218201954,
            "stddev": 0.4414850207038381,
            "m15_rate": 6.29282616000388e-10,
            "m1_rate": 0.004336419450693371,
            "m5_rate": 0.0009050744109606403,
            "mean_rate": 0.005660256743426155,
            "duration_units": "seconds",
            "rate_units": "calls/second"
        },
        "com.flightnetwork.insurance.resource.Refund.doRefund": {
            "count": 0,
            "max": 0,
            "mean": 0,
            "min": 0,
            "p50": 0,
            "p75": 0,
            "p95": 0,
            "p98": 0,
            "p99": 0,
            "p999": 0,
            "stddev": 0,
            "m15_rate": 0,
            "m1_rate": 0,
            "m5_rate": 0,
            "mean_rate": 0,
            "duration_units": "seconds",
            "rate_units": "calls/second"
        },
        "io.dropwizard.jetty.MutableServletContextHandler.connect-requests": {
            "count": 0,
            "max": 0,
            "mean": 0,
            "min": 0,
            "p50": 0,
            "p75": 0,
            "p95": 0,
            "p98": 0,
            "p99": 0,
            "p999": 0,
            "stddev": 0,
            "m15_rate": 0,
            "m1_rate": 0,
            "m5_rate": 0,
            "mean_rate": 0,
            "duration_units": "seconds",
            "rate_units": "calls/second"
        },
        "io.dropwizard.jetty.MutableServletContextHandler.delete-requests": {
            "count": 0,
            "max": 0,
            "mean": 0,
            "min": 0,
            "p50": 0,
            "p75": 0,
            "p95": 0,
            "p98": 0,
            "p99": 0,
            "p999": 0,
            "stddev": 0,
            "m15_rate": 0,
            "m1_rate": 0,
            "m5_rate": 0,
            "mean_rate": 0,
            "duration_units": "seconds",
            "rate_units": "calls/second"
        },
        "io.dropwizard.jetty.MutableServletContextHandler.dispatches": {
            "count": 19,
            "max": 2.2550000000000003,
            "mean": 0.5016315789473684,
            "min": 0.001,
            "p50": 0.46,
            "p75": 0.528,
            "p95": 2.2550000000000003,
            "p98": 2.2550000000000003,
            "p99": 2.2550000000000003,
            "p999": 2.2550000000000003,
            "stddev": 0.463604622080103,
            "m15_rate": 6.292826160261246e-10,
            "m1_rate": 0.004523025286055793,
            "m5_rate": 0.0009069463248801308,
            "mean_rate": 0.006721571867253656,
            "duration_units": "seconds",
            "rate_units": "calls/second"
        },
        "io.dropwizard.jetty.MutableServletContextHandler.get-requests": {
            "count": 3,
            "max": 0.05,
            "mean": 0.017666666666666667,
            "min": 0.001,
            "p50": 0.002,
            "p75": 0.05,
            "p95": 0.05,
            "p98": 0.05,
            "p99": 0.05,
            "p999": 0.05,
            "stddev": 0.028005951748393293,
            "m15_rate": 2.5736064313211317e-20,
            "m1_rate": 0.00018660583536242524,
            "m5_rate": 0.0000018719139194908126,
            "mean_rate": 0.001061300945529201,
            "duration_units": "seconds",
            "rate_units": "calls/second"
        },
        "io.dropwizard.jetty.MutableServletContextHandler.head-requests": {
            "count": 0,
            "max": 0,
            "mean": 0,
            "min": 0,
            "p50": 0,
            "p75": 0,
            "p95": 0,
            "p98": 0,
            "p99": 0,
            "p999": 0,
            "stddev": 0,
            "m15_rate": 0,
            "m1_rate": 0,
            "m5_rate": 0,
            "mean_rate": 0,
            "duration_units": "seconds",
            "rate_units": "calls/second"
        },
        "io.dropwizard.jetty.MutableServletContextHandler.move-requests": {
            "count": 0,
            "max": 0,
            "mean": 0,
            "min": 0,
            "p50": 0,
            "p75": 0,
            "p95": 0,
            "p98": 0,
            "p99": 0,
            "p999": 0,
            "stddev": 0,
            "m15_rate": 0,
            "m1_rate": 0,
            "m5_rate": 0,
            "mean_rate": 0,
            "duration_units": "seconds",
            "rate_units": "calls/second"
        },
        "io.dropwizard.jetty.MutableServletContextHandler.options-requests": {
            "count": 0,
            "max": 0,
            "mean": 0,
            "min": 0,
            "p50": 0,
            "p75": 0,
            "p95": 0,
            "p98": 0,
            "p99": 0,
            "p999": 0,
            "stddev": 0,
            "m15_rate": 0,
            "m1_rate": 0,
            "m5_rate": 0,
            "mean_rate": 0,
            "duration_units": "seconds",
            "rate_units": "calls/second"
        },
        "io.dropwizard.jetty.MutableServletContextHandler.other-requests": {
            "count": 0,
            "max": 0,
            "mean": 0,
            "min": 0,
            "p50": 0,
            "p75": 0,
            "p95": 0,
            "p98": 0,
            "p99": 0,
            "p999": 0,
            "stddev": 0,
            "m15_rate": 0,
            "m1_rate": 0,
            "m5_rate": 0,
            "mean_rate": 0,
            "duration_units": "seconds",
            "rate_units": "calls/second"
        },
        "io.dropwizard.jetty.MutableServletContextHandler.post-requests": {
            "count": 16,
            "max": 2.2560000000000002,
            "mean": 0.5925625,
            "min": 0.372,
            "p50": 0.47200000000000003,
            "p75": 0.5355000000000001,
            "p95": 2.2560000000000002,
            "p98": 2.2560000000000002,
            "p99": 2.2560000000000002,
            "p999": 2.2560000000000002,
            "stddev": 0.4497823130878611,
            "m15_rate": 6.29282616000388e-10,
            "m1_rate": 0.004336419450693371,
            "m5_rate": 0.0009050744109606403,
            "mean_rate": 0.005660270596836139,
            "duration_units": "seconds",
            "rate_units": "calls/second"
        },
        "io.dropwizard.jetty.MutableServletContextHandler.put-requests": {
            "count": 0,
            "max": 0,
            "mean": 0,
            "min": 0,
            "p50": 0,
            "p75": 0,
            "p95": 0,
            "p98": 0,
            "p99": 0,
            "p999": 0,
            "stddev": 0,
            "m15_rate": 0,
            "m1_rate": 0,
            "m5_rate": 0,
            "mean_rate": 0,
            "duration_units": "seconds",
            "rate_units": "calls/second"
        },
        "io.dropwizard.jetty.MutableServletContextHandler.requests": {
            "count": 38,
            "max": 2.2560000000000002,
            "mean": 0.5017105263157895,
            "min": 0.001,
            "p50": 0.46,
            "p75": 0.528,
            "p95": 2.25505,
            "p98": 2.2560000000000002,
            "p99": 2.2560000000000002,
            "p999": 2.2560000000000002,
            "stddev": 0.4573666639487485,
            "m15_rate": 1.2585652320522491e-9,
            "m1_rate": 0.009046050572111585,
            "m5_rate": 0.0018138926497602615,
            "mean_rate": 0.013443138586906005,
            "duration_units": "seconds",
            "rate_units": "calls/second"
        },
        "io.dropwizard.jetty.MutableServletContextHandler.trace-requests": {
            "count": 0,
            "max": 0,
            "mean": 0,
            "min": 0,
            "p50": 0,
            "p75": 0,
            "p95": 0,
            "p98": 0,
            "p99": 0,
            "p999": 0,
            "stddev": 0,
            "m15_rate": 0,
            "m1_rate": 0,
            "m5_rate": 0,
            "mean_rate": 0,
            "duration_units": "seconds",
            "rate_units": "calls/second"
        },
        "org.eclipse.jetty.server.HttpConnectionFactory.80.connections": {
            "count": 37,
            "max": 116.233045153,
            "mean": 18.87723851451351,
            "min": 0.078290967,
            "p50": 0.570973454,
            "p75": 33.0824538595,
            "p95": 87.55158713740005,
            "p98": 116.233045153,
            "p99": 116.233045153,
            "p999": 116.233045153,
            "stddev": 32.65398107624642,
            "m15_rate": 0.006718640480106826,
            "m1_rate": 0.018519557829824465,
            "m5_rate": 0.024412722112445752,
            "mean_rate": 0.013086852776973062,
            "duration_units": "seconds",
            "rate_units": "calls/second"
        }
    }

}

========================

4 个答案:

答案 0 :(得分:1)

如果您使用Jersey Client调用其他服务,请确保关闭响应 - 基础http连接池可能为空。

要找出线程在哪里等待,您需要生成一个线程转储(使用jvisualvm,jstack或kill -3)。一旦你知道线程在哪里等待,解决方案应该是显而易见的。

另外 - 你使用的是哪种版本的dropwizard?

答案 1 :(得分:1)

此问题有两个可能的原因:

1)未正确关闭您的回复

来自this blog post的更多信息。

您可以使用netstat -a | grep CLOSE_WAIT | wc -l来获取线程数。

您可以通过运行获取线程转储:

jps 然后查看应用程序的进程ID是什么,并将其传递给此命令: 要使用jstack获取线程转储,请运行以下命令:

jstack <pid>

每隔一段时间运行一次相同的命令并附加到同一文件。您需要多个转储,在时间上隔开以检测长时间运行的线程

jstack <pid> >> threaddumps.log

然后使用thread dump analyzer比较您的第一个转储和第二个转储,通过选择多个转储来查看哪些线程正在运行很长时间,右键单击并选择“查找长时间运行的线程”

您可能需要确保关闭ClientResponse,正如此处所做的那样:

public boolean isSessionActive(HttpServletRequest httpRequest) {
   ClientResponse response = null;
   try{
      response = jerseyClient
         .resource(url)
         .type(APPLICATION_JSON_TYPE)
         .header("Cookie", httpRequest.getHeader("Cookie"))
         .get(ClientResponse.class);
      return response.getStatus() == SC_OK;
   }
   finally {
      if (response != null){
         // #############################################
         // This next line is the fix you're looking for!
         // #############################################
         response.close();
      }
   }
}

2)没有足够的并发线程分配

MultiThreadedHttpConnectionManager及其默认配置仅允许每个主机有2个并发请求!因此,如果您使用不同的请求数据不断地使用同一台服务器,那么您可能一次只能限制为2个活动请求。如果发生这两个请求需要很长时间才能完成,那么你就没有可用的连接,并且会获得WAIT。

这怎么可能发生?对我们来说,我们使用的是ApacheHttpClient和DropWizard 0.6.2,它在幕后创建了一个带有默认配置的MultiThreadedHttpConnectionManager - default configuration一次只允许2个并发的http连接)

我们认为我们正在通过配置来突破这个#up,但实际上它没有被使用,我们的服务器一次只处理2个请求; - )

请检查以下内容,确保它们符合您的期望值!

  MultiThreadedHttpConnectionManager connectionManager = ...;
  connectionManager.getParams().getDefaultMaxConnectionsPerHost();
  connectionManager.getParams().getMaxTotalConnections();

答案 2 :(得分:0)

我遇到了同样的问题,这与数据库连接保持打开有关。 基本上我们正在使用JPA,并且在某些情况下我们会这样做 EntityManager em = factory.createEntityManager(); 并忘了em.close

不捕获回滚也可能是相关的。

答案 3 :(得分:0)

这意味着活动请求被卡在某些资源上,可能是任何东西,内存泄漏,死锁等。

然后去检查每个客户端(列表可能很长),使用jstack,JMC进行线程转储,或者使用jconsole查找。

您将看到线程在被阻塞时等待。就我而言

"dw-4104 - POST /something" #4104 prio=5 os_prio=0 tid=0x00007f4f3c074000 nid=0x306c waiting on condition [0x00007f4db00ff000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x000000041cb8f780> (a jersey.repackaged.com.google.common.util.concurrent.AbstractFuture$Sync)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:997)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1304)
    at jersey.repackaged.com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:285)
    at jersey.repackaged.com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:116)
    at org.glassfish.jersey.servlet.internal.ResponseWriter.getResponseContext(ResponseWriter.java:299)
    at org.glassfish.jersey.servlet.internal.ResponseWriter.callSendError(ResponseWriter.java:215)
    at org.glassfish.jersey.servlet.internal.ResponseWriter.commit(ResponseWriter.java:194)
    at org.glassfish.jersey.server.ContainerResponse.close(ContainerResponse.java:413)
    at org.glassfish.jersey.server.ServerRuntime$Responder.writeResponse(ServerRuntime.java:784)
    at org.glassfish.jersey.server.ServerRuntime$Responder.processResponse(ServerRuntime.java:444)
    at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:434)
    at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:329)
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:267)
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317)
    at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305)
    at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154)
    at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:473)
    at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228)
    at io.dropwizard.jetty.NonblockingServletHolder.handle(NonblockingServletHolder.java:49)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1655)
    at io.dropwizard.servlets.ThreadNameFilter.doFilter(ThreadNameFilter.java:35)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)
    at io.dropwizard.jersey.filter.AllowedMethodsFilter.handle(AllowedMethodsFilter.java:45)
    at io.dropwizard.jersey.filter.AllowedMethodsFilter.doFilter(AllowedMethodsFilter.java:39)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1253)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1155)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
    at com.codahale.metrics.jetty9.InstrumentedHandler.handle(InstrumentedHandler.java:239)
    at io.dropwizard.jetty.RoutingHandler.handle(RoutingHandler.java:52)
    at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:674)
    at io.dropwizard.jetty.BiDiGzipHandler.handle(BiDiGzipHandler.java:67)
    at org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:56)
    at org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:169)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
    at org.eclipse.jetty.server.Server.handle(Server.java:531)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:352)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260)
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:281)
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:102)
    at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126)
    at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:760)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:678)
    at java.lang.Thread.run(Thread.java:745)

以上内容正在等待写入客户端的响应。显然,我们正在重用响应对象,该对象在第一次响应中就被消耗了,随后的请求在响应时被阻塞。