1

在设置的连接超时之前,我得到了一个超时异常。有人对发生的事情有任何想法吗?

任何输入都会很棒!

15 Jan 2013 10:44:40,944 [                   Thread-4622] WorkerThread                   INFO  [1538387622377815-4640]- - About to call server with connectionTimeoutMS=30000

15 Jan 2013 10:45:02,003 [                   Thread-4622] WorkerThread                   ERROR [1538387622377815-4640]-run():Connection timed out:java.net.ConnectException

我在测试运行时记录了 netstat、gc 和打开文件的数量,但没有注意到任何戏剧性的事情。

环境

  • Java 1.6
  • Jetty 运行 Spring/Camel 路线(camel 2.10)
  • 客户端是多线程的(向码头组件发送并发批处理请求)

文件描述符:

  • ulimit -Hn 100000
  • ulimit -Sn 100000

打开文件

  • 以 1 秒为间隔运行 cat /proc/sys/fs/file-nr 的 Bash 脚本:

  • 测试开始前:5664 0 200000

  • 最坏情况:6720 0 200000

  • 客户端和服务器都在本地主机上运行。

  • 客户端连接超时设置为 30 秒。

客户如何工作

客户端创建一批并发线程(rnd 在 1-1000 之间)并调用 jetty 组件,然后在再次调用之前等待(rnd 在 1-30 秒之间)。最多重复 5 分钟。

服务器:尝试使用默认超时并将 connectTimeout 设置为较大的数字,例如 60000 毫秒,结果相同。

在运行的服务器上

  • 码头-7.6.1.v20120215
  • 骆驼 2.10.1
  • 春天 3.0.7

春天/骆驼路线:

<route id="startQueue_route" trace="false">
  <from uri="jetty:http://0.0.0.0:9311" />
  <to uri="bean:LDAPBean" />
</route>

<bean id="jetty" class="org.apache.camel.component.jetty.JettyHttpComponent"/>
4

1 回答 1

1

我能够解决这个问题,但调整了一些 tcp 设置,希望这对其他人有帮助。

我现在退后一步,将更新的骆驼罐子替换回 2.10.0,以确保修复只是一个 tcp env 问题(在设定的限制之前超时)。

1)我将骆驼和码头更新到最新/最适合 java 1.6,但仍然有相同的随机超时问题。

-rw-r--r-- 1 dana dana  670388 Jan 16 18:23 spring-context-3.0.7.RELEASE.jar
-rw-r--r-- 1 dana dana  556747 Jan 16 18:24 spring-beans-3.0.7.RELEASE.jar
-rw-r--r-- 1 dana dana  383621 Jan 16 18:25 spring-core-3.0.7.RELEASE.jar
-rw-r--r-- 1 dana dana   53082 Jan 16 18:26 spring-asm-3.0.7.RELEASE.jar
-rw-r--r-- 1 dana dana  169749 Jan 16 18:27 spring-expression-3.0.7.RELEASE.jar
-rw-r--r-- 1 dana dana   88733 Jan 17 11:30 jetty-servlets-8.1.8.v20121106.jar
-rw-r--r-- 1 dana dana   97228 Jan 17 11:30 jetty-servlet-8.1.8.v20121106.jar
-rw-r--r-- 1 dana dana  338985 Jan 17 11:30 jetty-server-8.1.8.v20121106.jar
-rw-r--r-- 1 dana dana   89854 Jan 17 11:30 jetty-security-8.1.8.v20121106.jar
-rw-r--r-- 1 dana dana   24596 Jan 17 11:30 jetty-jmx-8.1.8.v20121106.jar
-rw-r--r-- 1 dana dana   87621 Jan 17 11:30 jetty-client-8.1.8.v20121106.jar
-rw-r--r-- 1 dana dana  311747 Jan 17 11:30 commons-httpclient-3.1_1.jar
-rw-r--r-- 1 dana dana  228640 Jan 17 11:30 camel-spring-2.10.3.jar
-rw-r--r-- 1 dana dana   52852 Jan 17 11:30 camel-jetty-2.10.3.jar
-rw-r--r-- 1 dana dana   66945 Jan 17 11:30 camel-http-2.10.3.jar
-rw-r--r-- 1 dana dana 2218113 Jan 17 11:30 camel-core-2.10.3.jar
-rw-r--r-- 1 dana dana  280529 Jan 17 11:33 jetty-util-8.1.8.v20121106.jar
-rw-r--r-- 1 dana dana   94481 Jan 17 11:34 jetty-http-8.1.8.v20121106.jar
-rw-r--r-- 1 dana dana  231922 Jan 17 11:36 org.springframework.transaction-    3.0.5.RELEASE.jar
-rw-r--r-- 1 dana dana  321190 Jan 17 11:37 org.springframework.aop-3.0.5.RELEASE.jar
-rw-r--r-- 1 dana dana  103293 Jan 17 11:39 jetty-io-8.1.8.v20121106.jar
-rw-r--r-- 1 dana dana  200387 Jan 17 11:45 servlet-api-3.0.jar
-rw-r--r-- 1 dana dana   21138 Jan 17 11:52 jetty-continuation-8.1.8.v20121106.jar

2)调整 tcp 设置:(这似乎解决了超时问题)

ulimit -n 124000

sudo sysctl -w net.ipv4.tcp_syn_retries="1000000"
sudo sysctl -w net.ipv4.tcp_synack_retries="1000000"
sudo sysctl -w fs.file-max=200000
sudo sysctl -w net.ipv4.tcp_fin_timeout=5

sysctl -w net.ipv4.ip_local_port_range="1024 65000"
sysctl -w net.ipv4.tcp_keepalive_time="30"

##-- disable ipv6.
sysctl -w net.ipv6.conf.all.disable_ipv6="1"
sysctl -w net.ipv6.conf.default.disable_ipv6="1"
sysctl -w net.ipv6.conf.lo.disable_ipv6="1"
于 2013-01-18T19:44:41.670 回答