Java'tnameserv'需要3分多钟才能“准备好”,为什么?

时间:2009-12-16 02:05:13

标签: java linux corba slackware

我正在尝试帮助一个应用程序开发我想使用麻烦在Linux上使用Corba Server解决问题。我将问题缩小到tnameserv,在调用后花了3分多钟才准备就绪。

tnameserv在3分钟内到底试图做什么,无论如何我可以加快速度吗?该应用程序失败,因为它尝试进行5次连接尝试,重试之间为1秒;这显然没有给tnameserv足够的时间来准备好。我在Slackware 13.0上使用Java 6u17

如果重要的话。实际调用tnameserv如下:

tnameserv -ORBInitialPort 23423

在shell中运行该命令后,当我终于看到它显示“Ready”时,它似乎会挂到3分钟左右。

更新

我做了一个strace -f tnameserv -ORBInitialPort 23423,我看到对gettimeofday(),clock_gettime()和futex()的大量调用,后者总是返回'-1 ETIMEDOUT(连接超时)。我觉得这与我的问题有关,但我不知道是怎么回事。

这是我从strace中看到的一小部分内容。有人可以复制和/或理解这个吗?

[pid 30950] futex(0x8128e14, FUTEX_WAIT_PRIVATE, 1, {0, 49903084}) = -1 ETIMEDOUT (Connection timed out)
[pid 30950] futex(0x8098a28, FUTEX_WAKE_PRIVATE, 1) = 0
[pid 30950] clock_gettime(CLOCK_MONOTONIC, {329619, 995857482}) = 0
[pid 30950] gettimeofday({1260930158, 92108}, NULL) = 0
[pid 30950] clock_gettime(CLOCK_MONOTONIC, {329619, 995996617}) = 0
[pid 30950] clock_gettime(CLOCK_MONOTONIC, {329619, 996088536}) = 0
[pid 30950] gettimeofday({1260930158, 92328}, NULL) = 0
[pid 30950] clock_gettime(CLOCK_REALTIME, {1260930158, 92424295}) = 0
[pid 30950] futex(0x8128e14, FUTEX_WAIT_PRIVATE, 1, {0, 49903705}) = -1 ETIMEDOUT (Connection timed out)
[pid 30950] futex(0x8098a28, FUTEX_WAKE_PRIVATE, 1) = 0
[pid 30950] clock_gettime(CLOCK_MONOTONIC, {329620, 46761098}) = 0
[pid 30950] gettimeofday({1260930158, 143084}, NULL) = 0
[pid 30950] clock_gettime(CLOCK_MONOTONIC, {329620, 46913924}) = 0
[pid 30950] clock_gettime(CLOCK_MONOTONIC, {329620, 47006961}) = 0
[pid 30950] gettimeofday({1260930158, 143303}, NULL) = 0
[pid 30950] clock_gettime(CLOCK_REALTIME, {1260930158, 143398317}) = 0
[pid 30950] futex(0x8128e14, FUTEX_WAIT_PRIVATE, 1, {0, 49904683}) = -1 ETIMEDOUT (Connection timed out)
[pid 30950] futex(0x8098a28, FUTEX_WAKE_PRIVATE, 1) = 0
[pid 30950] clock_gettime(CLOCK_MONOTONIC, {329620, 97818379}) = 0
[pid 30950] gettimeofday({1260930158, 194127}, NULL) = 0
[pid 30950] clock_gettime(CLOCK_MONOTONIC, {329620, 97957235}) = 0
[pid 30950] clock_gettime(CLOCK_MONOTONIC, {329620, 98049154}) = 0
[pid 30950] gettimeofday({1260930158, 194346}, NULL) = 0
[pid 30950] clock_gettime(CLOCK_REALTIME, {1260930158, 194441349}) = 0
[pid 30950] futex(0x8128e14, FUTEX_WAIT_PRIVATE, 1, {0, 49904651}) = -1 ETIMEDOUT (Connection timed out)
[pid 30950] futex(0x8098a28, FUTEX_WAKE_PRIVATE, 1) = 0
[pid 30950] clock_gettime(CLOCK_MONOTONIC, {329620, 148806370}) = 0
[pid 30950] gettimeofday({1260930158, 245055}, NULL) = 0
[pid 30950] clock_gettime(CLOCK_MONOTONIC, {329620, 148947182}) = 0
[pid 30950] clock_gettime(CLOCK_MONOTONIC, {329620, 148981547}) = 0
[pid 30950] gettimeofday({1260930158, 245280}, NULL) = 0
[pid 30950] clock_gettime(CLOCK_REALTIME, {1260930158, 245374859}) = 0
[pid 30950] futex(0x8128e14, FUTEX_WAIT_PRIVATE, 1, {0, 49905141}) = -1 ETIMEDOUT (Connection timed out)

3 个答案:

答案 0 :(得分:1)

我发现this使用谷歌(LL Zamenhof的生日今天顺便说一句)。我会打开一些wirehark跟踪,看看你是否能看到任何东西。虽然如果有网络活动,我希望看到这些内容。太糟糕了,它不是开源的。

答案 1 :(得分:1)

原来问题是防火墙问题。 Wireshark没有显示任何有用的东西,因为防火墙正在丢弃某个数据包。虽然我多次查看我的防火墙日志以确保不是这种情况,但事实证明我并没有找到正确的位置。我忽略了这个'tnameserv'是IPv6感知的事实(因为它绑定到::: 23423),粗略地看一眼我的防火墙脚本表明我将IPv6相关数据包记录到与我的IPv4数据包不同的位置。这不是疏忽,但必须要完成,因为ip6tables目前不支持-j ULOG目标。

长话短说,允许IPv6的环回修复问题,'tnameserv'几乎立即返回“就绪”。

答案 2 :(得分:0)

检查您的DNS设置。你可能会多次等待答案。