現在オフラインです。再接続するためにインターネットの接続を待っています

[NT]RPC トラブルのテスト方法

この記事は、以前は次の ID で公開されていました: JP177446
概要
RPC、すなわちリモート プロシージャ コールは、高レベルのアプリケーション プロトコルです。このプロトコルの主な利点の 1 つは、その下のトランスポート プロトコルから完全に独立しているということです。RPC では、他の IPC (プロセス間通信)、すなわちクライアントとサーバー間の通信を確立するためのメカニズムを使用します。RPC では、アプリケーションがコールする機能をリモート コンピュータ上に置くようにすることで、将来、抽象化が可能です。データのフォーマット、バイトのオーダー、ロケーション サービス、使用するプロトコルのすべてが、RPC インフラによって扱われます。これらのサービスは、複雑なクライアント-サーバーアプリケーションを作成するための最良の方法に対して支援を行います。このレベルのサービスを必要とするアプリケーションの複雑な性質に加えて、このレベルの抽象化を伝えるために必要な臨時パッケージングやラッパでは、この機能を伝えるために、クライアントとサーバーの間に十分なスループットがあることを必要とします。
関連情報
Microsoft Exchange の序文で、"well-connected network" という用語は、接続とデータフローを確実にメンテナンスするために必要となる接続またはスループットのレベルを述べるために使用されていました。Microsoft Exchange は、リモート処理機能をさらに完全に利用した、最初の Microsoft 製品です。Windows NT version 5.0 およびアクティブ ディレクトリとして知られるその分散ディレクトリ サービスの序文では、この最小限のレベルのサービスは、すべてのディレクトリ処理で必要です。Microsoft Exchange と Windows NT 5.0 の両方では、専用の 1 秒あたり最低 128 キロビットの接続が必要ですが、Windows NT 5.0 では、推奨される最低値は、専用の 1 秒あたり 512 キロビットの接続です。Windows NT 5.0 では、すべての BackOffice 製品が将来のアップグレード版で採用する "サイト" という新しい定義も紹介しています。このサイトにより、ネットワークの物理的構成を管理し、使用するレプリケーション パスを簡単に定義することができます。この "well-connected network" 内にあるコンピュータは、同じサイト内に置くことができます。

以下は、いくつかの RPC エラーの一覧です。(エラーメッセージは正確なものではありません。)このすべてが、低速のネットワーク接続によって引き起こされるわけではありません。

  • その RPC プロトコル シーケンスはサポートされていません。
  • その RPC プロトコル シーケンスは無効です。
  • その RPC サーバーは既にリッスン中です。
  • その RPC サーバーはリッスン中ではありません。
  • その RPC サーバーは利用可能ではありません。
  • その RPC サーバーはビジー状態であるためこの操作を完了できません。
  • リモート プロシージャ コール (RPC) プロトコルのエラーが発生しました。
  • その転送構文は RPC サーバーによってサポートされていません。
  • その RPC プロトコル シーケンスは検出されませんでした。
  • リモート プロシージャ コール (RPC) 内で内部エラーが発生しました。
  • RPC サーバーで整数の除算をゼロで行おうとしました。
  • RPC サーバー内でアドレッシング エラーが発生しました。
  • RPC サーバーでの浮動小数点演算によりゼロでの除算が起こりました。
  • RPC サーバーで浮動小数点のアンダーフローが発生しました。
  • RPC サーバーで浮動小数点のオーバーフローが発生しました。
  • 自動ハンドルのバインディングに利用可能な RPC サーバーのリストを使い果たしました。
  • 指定したエラーは、有効な Windows RPC エラー コードではありません。
  • RPC スタブの非互換バージョンです。
  • その RPC パイプ オブジェクトは無効であるか壊れています。
  • RPC パイプ オブジェクトに対して無効な操作を行おうとしました。
  • サポートされていない RPC パイプ バージョンです。
  • この操作に対して無効な非同期 RPC コール ハンドルです。
  • その RPC パイプ オブジェクトは既にクローズされています。
  • すべてのパイプが処理される前に、その RPC コールが完了しました。
  • RPC パイプからこれ以上のデータは入手可能ではありません。
この資料では、ネットワークのパフォーマンスが低速であるために RPC エラーが発生するのかどうかを判定するための簡単な手順をいくつか示します。RPC エラーを受け取った場合には、以下の提案にしたがって、可能性のある原因として低速のネットワーク接続を削除するのが一番よいでしょう。

  1. 可能性のある RPC エラーの原因としてネーム変換を削除します。宛先サーバーのコマンド ラインから NET VIEW できるか確認します。TCP/IP がクライアントとサーバーのアプリケーション間で使用されているプロトコルである場合には、その問題を引き起こしている可能性のあるものとしての WINS を削除するために、LMHOSTSファイルを構成することができます。
  2. 別の RPC アプリケーションを使って、基本の RPC 接続性をテストします。Windows NT Server は、いくつかの RPC アプリケーションが付いて出荷されます。イベントビューワ (Eventvwr.exe) とレジストリ エディタ (Regedt32.exe) は、Windows NT を実行中の任意のコンピュータに対してフォーカスを設定することができます。ユーザーマネージャ (Usrmgr.exe) とサーバー マネージャ (Srvmgr.exe) のような他のアプリケーションは、デフォルトでそのフォーカスを PDC (プライマリ ドメイン コントローラ) に対して設定します。RPC の接続性に対する別のテスト用に、これらのアプリケーションのうち 1 つを利用します。
  3. ネットワークの接続性をテストするために、パフォーマンス モニター (Perfmon.exe)を使って、ネットワーク間での基本のファイル コピーの速度をテストします。テストに適切なサンプル時間を提供するために、またセグメント化と順序付けを完全に可能にするために、サイズが少なくとも 2 メガバイトのファイルでテストします。簡単に利用可能なサイズのファイルがない場合には、COPY コマンドを使ってそれを作成できます。サイズがちょうど良いファイルを捜し、以下のような構文を使用します。

    COPY /b file.ext + file.ext + file.ext + file.ext destination.ext

    "/b" スイッチは、ソース ファイルがテキストでない場合に必要です。
  4. 2 メガバイト以上のファイルを捜し出したら、クライアント コンピュータでパフォーマンス モニターを開始します。パフォーマンス モニターでは、1 回のファイル コピーで異なるコンピュータ上のセッションを区別することができないため、他のセッションが結果に影響を及ぼす可能性がある場合には、"NET USE * /D" を実行して他のすべてのセッションを終了します。
  5. パフォーマンス モニターは非常にフレキシブルであり、適切なカウンタ、転送バイト / 秒、受信バイト / 秒および合計バイト / 秒を使用して、サーバーまたはリダイレクタのオブジェクトについてのファイルのコピーをモニターすることができます。この手順を簡単にするため、また RPC 接続内のデータ フローをさらに正確に表わすために、"サーバー" から RPC アプリケーションを実行中の "クライアント" へファイルをコピーする必要があります。したがって、サーバー上で 2 メガバイトのファイルを捜し出す必要があります。
  6. パフォーマンス モニターで、編集メニューから [グラフへ追加] を選択します。リダイレクタ オブジェクトを選択し、"受信バイト / 秒" カウンタを選択します。
  7. コマンド プロンプトで、サーバーに対してネットワーク ドライブ名を設定し、サーバーからローカル クライアントへファイルをコピーします。
  8. 平均値、最大値および最小値を調べて、ファイル コピーが常に 128K / 秒または512K / 秒以下になっていないことを確認します。この値は、重要な機能にとってはさらに高い値である必要があり、ネットワークの拡張の必要性を伝える場合があります。判断基準としては、800,000 バイト / 秒に近い値が非常に良いでしょう。

    以下の表は、キロビット / 秒とキロバイト / 秒を変換したものです。
         接続速度                     バイト / 秒     =================          ================     128kbps                         16,384     512kbps                         65,536     1.544Mbps (T1)                 193,000     10Mbps (Ethernet)            1,250,000     46.320Mbps (T3)              5,790,000

    128K のような一定の回線速度を持つと、利用率や他の率に基づいて最高の 16,384 スループット未満になることを忘れないでください。これらの数値は「理論上の」最大値であり、ネットワークのオーバーヘッドによってその値が下がります。理論上のスループットが 1,250,000 バイトである、10Mbps のイーサネット接続を考えてみると、1 秒当たり約 800,000 バイトのスループットは 64% の効率です。
  9. 問題の一般的なネットワークの接続性をさらに完全に排除するためには、クライアント上で "転送バイト / 秒" カウンタを追加し、サーバーへファイルをコピーし戻します。
  10. クライアントとサーバーの間でのこれらのテストが、希望のサービスのレベルにとって完全に許容できるものであるかを確かめます。リダイレクタとサーバーのサービスの間でデータ フローの方向を逆にし、適切なカウンタを選択することで、パフォーマンス モニターでさらにテストを行うことができます。
  11. 2 つのコンピュータ間での RPC 通信をテストする別の方法としては、RPC ping ユーティリティを使用するというものがあります。米国 Microsoft Corporation から提供されている、以下の Knowledge Base をご覧ください。
    ARTICLE-ID: 167260
    TITLE : How to Use RPCPing to Test RPC Communication

さらに調査すべき項目

  • これ以外にこの RPC エラーは、クライアントとサーバー上で実行中のサードパーティやより大きなサービスが原因である可能性があります。デフォルトではないサービスをすべて停止し、EVENTVWR と PERFMON を使って再びテストします。
  • クライアントとサーバー上で RPC サービスの状態をチェックします。これは、コマンド ラインで NET START と入力することで行うことができます。

    ドメイン コントローラについては、以下が出力に含まれるはずです。
    Remote Procedure Call (RPC) Locator
    Remote Procedure Call (RPC) Service
  • Windows NT の Resource Kit ユーティリティ SC.EXE を使って、これらのサービスの状態をさらにチェックすることができます。サンプルの出力は以下のとおりです。
          C:\>sc query RPCLOCATOR      SERVICE_NAME: RPCLOCATOR             TYPE               : 10  WIN32_OWN_PROCESS             STATE              : 4  RUNNING                                     (STOPPABLE,PAUSABLE,IGNORES_SHUTDOWN)             WIN32_EXIT_CODE    : 0  (0x0)             SERVICE_EXIT_CODE  : 0  (0x0)             CHECKPOINT         : 0x0             WAIT_HINT          : 0x0     C:\>sc query RpcSs     SERVICE_NAME: RpcSs             TYPE               : 10  WIN32_OWN_PROCESS             STATE              : 4  RUNNING                                   (NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)             WIN32_EXIT_CODE    : 0  (0x0)             SERVICE_EXIT_CODE  : 0  (0x0)             CHECKPOINT         : 0x0             WAIT_HINT          : 0x0
  • SERVICES.EXE には多くの RPC コードが含まれており、そのスレッドの 1 つがハングアップ状態にある場合があります。

    Dr. Watson (DRWTSN32.exe) でエラーが報告されているかチェックします。エラーが何も報告されていない場合でも、そのスレッドの 1 つがハングアップしている可能性があります。この時、リブートが唯一の回復方法である場合があります。以下のテクニックをいくつか使用することで、さらにわかることがある場合があります。
  • NT Resource Kit 内の TLIST.EXE は、以下のような情報をダンプできます。"状態" とファイルと日付を調査すると、さらにわかることがある場合があります。(以下の場合の実行時には、SERVICES.EXE は PID 41 であったことに注意)
         C:\>tlist 41       41 SERVICES.EXE        CWD:     D:\NT40SP0\system32   CmdLine: services.exe        VirtualSize:    52296 KB   PeakVirtualSize:    57292 KB        WorkingSetSize:  6224 KB   PeakWorkingSetSize:  6604 KB        NumberOfThreads: 19          62 Win32StartAddr:0x022a3ca1 LastErr:0x000003e5 State:Waiting          64 Win32StartAddr:0x022a4895 LastErr:0x00000000 State:Waiting          67 Win32StartAddr:0x76e03f90 LastErr:0x00000000 State:Waiting          68 Win32StartAddr:0x77dd8f45 LastErr:0x00000000 State:Waiting          76 Win32StartAddr:0x022a4338 LastErr:0x00000000 State:Waiting          78 Win32StartAddr:0x0000005b LastErr:0x000000cb State:Waiting          49 Win32StartAddr:0x77dd8f45 LastErr:0x00000000 State:Waiting          90 Win32StartAddr:0x765e1990 LastErr:0x00000000 State:Waiting          43 Win32StartAddr:0x77dd8f45 LastErr:0x000000cb State:Waiting          94 Win32StartAddr:0x77dd8f45 LastErr:0x00000000 State:Waiting          96 Win32StartAddr:0x77dd8f45 LastErr:0x00000000 State:Waiting         103 Win32StartAddr:0x773e1051 LastErr:0x00000000 State:Waiting         121 Win32StartAddr:0x77805a75 LastErr:0x00000000 State:Waiting         159 Win32StartAddr:0x77dd8f45 LastErr:0x00000000 State:Waiting         144 Win32StartAddr:0x00000000 LastErr:0x00000000 State:Waiting         148 Win32StartAddr:0x00000000 LastErr:0x00000000 State:Waiting         127 Win32StartAddr:0x77e16337 LastErr:0x00000057 State:Waiting         118 Win32StartAddr:0x74b4ec36 LastErr:0x00000000 State:Waiting          88 Win32StartAddr:0x77e16337 LastErr:0x00000000 State:Waiting          4.0.1381.4 shp  0x02290000  services.exe          4.0.1381.4 shp  0x77f60000  ntdll.dll          4.0.1381.4 shp  0x77e10000  RPCRT4.dll          4.0.1381.4 shp  0x77f00000  KERNEL32.dll          4.0.1381.4 shp  0x77dc0000  ADVAPI32.dll          4.0.1381.4 shp  0x77e70000  USER32.dll          4.0.1381.4 shp  0x77ed0000  GDI32.dll          4.0.1381.4 shp  0x74900000  umpnpmgr.dll          5.0.0.7128 shp  0x78000000  MSVCRT.dll          4.0.1381.4 shp  0x74880000  USERENV.dll          4.0.1381.4 shp  0x77c40000  SHELL32.dll         4.71.1712.3 shp  0x70db0000  COMCTL32.dll          4.0.1381.4 shp  0x77800000  NETAPI32.dll          4.0.1371.1 shp  0x77840000  NETRAP.dll          4.0.1381.4 shp  0x777e0000  SAMLIB.dll          4.0.1381.4 shp  0x5f810000  rpcltc1.dll          4.0.1372.1 shp  0x77e00000  rpclts1.dll          4.0.1381.4 shp  0x76e00000  eventlog.dll          4.0.1381.3 shp  0x76fc0000  dhcpcsvc.dll          4.0.1371.1 shp  0x776d0000  WSOCK32.dll          4.0.1381.4 shp  0x776b0000  WS2_32.dll          4.0.1381.3 shp  0x776a0000  WS2HELP.dll          2.0.372.12 shp  0x55600000  wspwsp.dll          4.0.1381.4 shp  0x77660000  msafd.dll          4.0.1381.4 shp  0x77690000  wshtcpip.dll          4.0.1381.4 shp  0x74b40000  Srvsvc.dll          4.0.1381.4 shp  0x758b0000  ntlsapi.dll          4.0.1381.4 shp  0x5f600000  WINSPOOL.DRV          4.0.1381.4 shp  0x74450000  XACTSRV.dll          4.0.1371.1 shp  0x773e0000  browser.dll          4.0.1381.4 shp  0x745e0000  wkssvc.dll          4.0.1381.3 shp  0x765e0000  lmhsvc.dll          4.0.1371.1 shp  0x76b10000  ICMP.dll          4.0.1374.1 shp  0x774d0000  alrsvc.dll          4.0.1381.4 shp  0x75c80000  msgsvc.dll          4.0.1381.4 shp  0x77b20000  ole32.dll          4.0.1371.1 dbg  0x74620000  winsrpc.dll          4.0.1381.4 shp  0x74fc0000  RpcLtCcm.Dll          4.0.1381.4 shp  0x77670000  MSWSOCK.dll          4.0.1381.4 shp  0x74ff0000  rnr20.dll          4.0.1381.4 shp  0x758c0000  ntlmssps.dll
  • Windows NT Resource Kit または Task Manager 内の PMON.EXE は、メモリや CPU の消費量などの SERVICES.EXE に関する情報をいくつか取得するために使用できます。
  • Windows NT Resource Kit 内の PSTAT.EXE は、SERVICES.EXE についてのスレッド状態を表示します。以下はその出力部分です。
         pid: 29 pri: 9 Hnd:  269 Pf:  51240 Ws:   6216K SERVICES.EXE      tid pri Ctx Swtch StrtAddr    User Time  Kernel Time  State       3e  14        55 77f052c0  0:00:00.010  0:00:00.000 Wait:UserRequest       40  14        25 77f052c0  0:00:00.000  0:00:00.010 Wait:Executive       43   9         1 77f052c0  0:00:00.000  0:00:00.000 Wait:LpcReceive       44  11       100 77f052c0  0:00:00.050  0:00:00.110 Wait:UserRequest       4c  10       285 77f052c0  0:00:00.060  0:00:00.040 Wait:Executive       4e   9      1373 77f052c0  0:00:00.000  0:00:00.100 Wait:UserRequest       31   9        26 77f052c0  0:00:00.000  0:00:00.010 Wait:UserRequest       5a  11         3 77f052c0  0:00:00.000  0:00:00.000 Wait:UserRequest       2b   9        26 77f052c0  0:00:00.000  0:00:00.010 Wait:UserRequest       5e  10      9318 77f052c0  0:00:44.083  0:00:14.000 Wait:UserRequest       60   9        20 77f052c0  0:00:00.020  0:00:00.010 Wait:UserRequest       67  10      9453 77f052c0  0:00:44.984  0:00:13.789 Wait:UserRequest       79  12        28 77f052c0  0:00:00.000  0:00:00.010 Wait:UserRequest       9f  14        23 77f052c0  0:00:00.010  0:00:00.000 Wait:UserRequest       90  14       127 77f052c0  0:00:00.010  0:00:00.040 Wait:LpcReceive       94  12       123 77f052c0  0:00:00.020  0:00:00.060 Wait:LpcReceive       7f  15       391 77f052c0  0:00:00.060  0:00:00.120 Wait:UserRequest       9d  10         1 77f052c0  0:00:00.000  0:00:00.000 Wait:LpcReceive
プロパティ

文書番号:177446 - 最終更新日: 08/20/2003 20:18:00 - リビジョン: 3.0

  • Microsoft Windows NT Server 4.0 Enterprise Edition
  • Microsoft Windows NT Server 3.5
  • Microsoft Windows NT Server 3.51
  • Microsoft Windows NT Server 4.0 Standard Edition
  • Microsoft Windows NT Workstation 3.5
  • Microsoft Windows NT Workstation 3.51
  • Microsoft Windows NT Workstation 4.0 Developer Edition
  • kbhowto ntdomain KB177446
フィードバック