3

LinuxでCorbaServerを使用して問題を解決するために、使用したいアプリの開発者を支援しようとしています。tnameserv問題を、呼び出し後の準備に3分以上かかるように絞り込みました。

この3分間で正確に何をtnameservしようとしているのでしょうか。とにかく、スピードを上げることができますか?再試行の間に1秒で5回の接続試行を試みたため、アプリは失敗しました。これは明らかに、tnameservに準備ができるのに十分な時間を与えていません。Slackware13.0でJava6u17を使用しています

それが重要な場合。の実際の呼び出しtnameservは次のとおりです。

tnameserv -ORBInitialPort 23423

シェルでそのコマンドを実行すると、最終的に「準備完了」と表示される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ザメンホフの今日の誕生日です)。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 に答える