2012-05-17 175 views
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> 

回答

0

首先你需要提一下你正在处理的jetty版本,这在比较情况和一些已知问题时非常重要。

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

那么,你需要采取线程转储,看看事情卡住了。虽然我们试图修复jvm中的nio bug,但有一些ssl问题与在较新的浏览器中更频繁地使用相关的一些ssl问题存在一些问题,然而之前......服务器挂起中的大多数问题是来自部署在码头本身的应用程序。所以采取一个线程转储,或理想的连续几个将有助于隔离你的问题。

另一件要检查的是你使用的是什么java版本,java 6补丁程序2x的几乎都以不同的方式使用nio和ssl,只有最新的3x已经恢复了某些东西的正常性。

所以,首先你真的需要采取一些线程转储来了解你的服务器正在发生什么,然后才能查看它是否属于码头特定问题。如果你可以发布堆栈跟踪的一些信息,显示明显的码头问题,那么你可以到某处。我无法统计我看到像这样的情况的次数,只能进行线程转储并查看其数据库争用或类似情况。

+0

我设法隔离了这个问题。它在一个特定的servlet中。我分析了Jetty似乎挂起的线程,并发现它正在等待事务与数据库交互(transaction.begin())。我面临着僵局。我进行了进一步的搜索并设法找到某些地方,例外情况在提出时不会关闭交易。我已经在catch部分放置了transaction.commit()或transaction.rollback()。一切都很方便,解决了我的问题! – FrozZerrer