0

我的 Jetty 应用程序服务器有问题。从昨天开始,我们有一个大问题。有时,Jetty 似乎只是挂起并且不想进行任何 RPC 调用。如果我重新启动它,它会恢复到正常状态,但问题会在几个小时后再次出现。

我注意到当我们遇到问题时,Nginx 的日志会提示这个错误:

2012/05/17 17:00:47 [error] 14728#0: *506735 upstream timed out (110: Connection timed out) while reading response header from upstream, client: xx.xxx.xxx.xx, server: www.MY-SERVER.com, request: "POST /com.xxxx.xxxx.XXXX/Service HTTP/1.1", upstream: "http://127.0.0.1:8080/com.xxxx.xxxx.XXXX/Service", host: "www.MY-SERVER.com", referrer: "https://www.MY-SERVER.com/"

即使运行良好,Nginx 也会提示此警告:

2012/05/17 17:04:44 [warn] 14728#0: *506906 a client request body is buffered to a temporary file /var/cache/nginx/client_temp/0000088415, 

客户端:xx.xxx.xxx.xx,服务器:www.MY-SERVER.com,请求:“POST /report HTTP/1.1”,主机:“www.MY-SERVER.com” 是不是很吓人?

我听说当 Jetty 像这样挂起时,可能是因为线程问题。我该如何验证呢?这是我的服务器线程池配置,可能有助于诊断问题。

<!-- =========================================================== -->
    <!-- Server Thread Pool                                          -->
    <!-- =========================================================== -->
    <Set name="ThreadPool">
      <!-- Default queued blocking threadpool -->
      <New class="org.eclipse.jetty.util.thread.QueuedThreadPool">
        <Set name="minThreads">10</Set>
        <Set name="maxThreads">200</Set>
        <Set name="detailedDump">false</Set>
      </New>
    </Set>

    <!-- =========================================================== -->
    <!-- Set connectors                                              -->
    <!-- =========================================================== -->

    <Call name="addConnector">
      <Arg>
          <New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
            <Set name="host"><Property name="jetty.host" /></Set>
            <Set name="port"><Property name="jetty.port" default="8080"/></Set>
            <Set name="maxIdleTime">300000</Set>
            <Set name="Acceptors">2</Set>
            <Set name="statsOn">false</Set>
            <Set name="confidentialPort">8443</Set>
            <Set name="lowResourcesConnections">20000</Set>
            <Set name="lowResourcesMaxIdleTime">5000</Set>
          </New>
      </Arg>
    </Call>
4

1 回答 1

0

首先,您需要提及您正在处理的码头版本,这对于将情况与一些已知问题进行比较非常重要。

一般来说,我只能建议您更新到最新的 jetty 版本,7.6.3.v20120416 或 8.1.3.v20120416。

好吧,您需要进行线程转储以查看卡住的位置。虽然我们尝试修复 jvm 中的 nio 错误导致了一些问题,并且一些与半关闭相关的 ssl 问题在较新的浏览器中比以前更频繁地使用......服务器挂起的大多数问题是来自部署在码头本身的应用程序。因此,进行线程转储,或者理想情况下连续几个将有助于隔离您遇到问题的地方。

要检查的另一件事是您使用的 java 版本,java 6 补丁级别 2x 几乎都以某种方式使用 nio 和 ssl 都不好,只有最新的 3x 恢复了一些正常的外观。

因此,首先您确实需要进行一些线程转储以了解服务器中发生的情况,然后再查看它是否是特定于码头的问题。如果您可以发布一些显示明显码头问题的堆栈跟踪信息,那么您将到达某个地方。我数不清有多少次我看到这种情况只是为了进行线程转储并查看其数据库争用或类似情况。

于 2012-05-18T00:57:02.547 回答