代码之家  ›  专栏  ›  技术社区  ›  SiegeX

Java的“TnEnEsErv”需要3分钟才能“准备好”,为什么?

  •  3
  • SiegeX  · 技术社区  · 15 年前

    我正在帮助一个应用程序的开发人员,我想使用Trouble来解决Linux上使用CORBA服务器的问题。我把问题缩小到 tnameserv 调用后需要3分钟才能准备就绪。

    究竟是什么 塔梅塞尔夫 在这三分钟内试着做,我能加快速度吗?该应用程序失败,因为它尝试在两次重试之间用1秒进行5次连接尝试;这显然没有给tnamesrv足够的时间来准备。我在Java6U17上使用SLAKWORD 13

    以防万一。实际调用 塔梅塞尔夫 如下所示:

    tnameserv -ORBInitialPort 23423
    

    在shell中运行该命令时,当我最终看到它显示“准备就绪”时,它似乎会一直挂到3分钟左右。

    更新

    我做了一个 strace -f tnameserv -ORBInitialPort 23423 我看到了对getTimeOfDay()、clock_ettime()和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 回复  |  直到 15 年前
        1
  •  1
  •   Francis Upton IV    15 年前

    我发现 this 使用谷歌(今天是Zamenhof的生日)。我会打开一些线鲨追踪,看看你能不能在那里看到任何东西。不过,如果有网络活动的话,我希望能看到一些东西。太糟糕了,它不是开源的。

        2
  •  1
  •   SiegeX    15 年前

    结果发现问题是防火墙问题。Wireshark没有显示任何有用的信息,因为防火墙正在丢弃某个包。虽然我看了好几次防火墙日志以确定情况并非如此,但结果发现我找不到合适的位置。我忽略了这个“tnamesrv”是IPv6感知的事实(因为它绑定到:::23423),粗略浏览一下我的防火墙脚本,就会发现我将与IPv6相关的数据包记录到了与我的IPv4数据包不同的位置。这不是一个疏忽,但必须这样做,因为IP6表格目前不支持-j ulog目标。

    长话短说,允许ipv6的环回修复了这个问题,“tnamesrv”几乎立即返回“ready”。

        3
  •  0
  •   Thorbjørn Ravn Andersen    15 年前

    检查DNS设置。你可以暂停几次等待答案。