3

我正在尝试帮助我想使用的应用程序的开发人员解决在 Linux 上使用 Corba Server 的问题。我将问题缩小到tnameserv在调用后需要 3 多分钟才能准备好。

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

以防万一。的实际调用tnameserv如下:

tnameserv -ORBInitialPort 23423

在 shell 中运行该命令后,它似乎一直挂起,直到我终于看到它显示“就绪”时大约 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(连接超时)
[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(连接超时)
[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(连接超时)
[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(连接超时)
[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(连接超时)
4

3 回答 3

1

我使用谷歌找到了这个(顺便说一句,今天是 LL Zamenhof 的生日)。我会打开一些wireshark跟踪,看看你是否能看到任何东西。虽然如果有网络活动,我希望在 strace 中看到一些东西。可惜不是开源的。

于 2009-12-16T02:31:25.623 回答
1

原来问题是防火墙问题。Wireshark 没有显示任何有用的信息,因为防火墙正在丢弃某个数据包。尽管我多次查看我的防火墙日志以确保不是这种情况,但事实证明我没有找对地方。我忽略了这个“tnameserv”支持 IPv6 的事实(因为它绑定到 :::23423),粗略浏览一下我的防火墙脚本表明我正在将 IPv6 相关数据包记录到与 IPv4 数据包不同的位置。这不是疏忽,但必须这样做,因为 ip6tables 目前不支持 -j ULOG 目标。

长话短说,允许 IPv6 环回解决了这个问题,并且“tnameserv”几乎立即返回“就绪”。

于 2009-12-16T23:34:52.057 回答
0

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

于 2009-12-16T16:08:06.253 回答