来自java程序的SYN_SENT问题

时间:2011-01-19 21:23:34

标签: java database multithreading sockets

在我的应用程序中,当我的应用程序服务器启动时,我创建了5个线程,每个线程都是as400服务器数据库连接。每个线程(java程序)将每隔一分钟建立一个as400连接。 但是每周,由于一些原因,as400数据库服务器中的一个停机1-2小时,并且java线程关联每隔一分钟就会命中这个数据库服务器。此时我的网络应用程序卡住了,我甚至无法访问该网址。

从linux控制台,当我执行netstat -an时,我看到一个服务器状态是SYN_SENT已关闭。

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

您可以尝试调整各种套接字选项。 指南: http://download.oracle.com/javase/1.4.2/docs/guide/net/socketOpt.html

答案 1 :(得分:0)

也许您应该使用某种[数据库]连接池,而不是每分钟打开一个新连接。

答案 2 :(得分:0)

服务器根本不接受连接,并且连接的代码不使用任何有意义的超时,也不会检测有故障的服务器。 SYN_SENT表示远程计算机(AS / 400)未建立连接。如果可能,请尝试从可用服务器列表中删除该特定服务器。

如果您直接打开连接(您自己):发布您的代码。我会帮助你做超时的事情并最终在可用的服务器之间循环。