ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

一般的な問題のトラブルシューティング

この節では、MATLAB® Parallel Server™ ソフトウェアで発生する可能性がある問題の解決方法について説明します。

ライセンス エラー

MATLAB ワーカーを起動する際に、ライセンスの問題が発生し、次のメッセージが表示されることがあります。

License checkout failed. No such FEATURE exists. 
License Manager Error -5

このエラーは、以下のようなさまざまな理由で表示されます。

  • このメッセージは、通常、ライセンスのない製品を使用しようとしたことを示します。MATLAB インストール内にある license.dat ファイルを確認して、この製品を使用するライセンスがあるか調べます。

  • この製品のライセンスがある場合、このエラーは、ライセンス ファイル内に余分なキャリッジ リターンまたはタブがあることが原因で発生している可能性があります。これを回避するには、各行が #SERVERDAEMON または INCREMENT で始まっていることを確認します。

    license.dat ファイルを修正した後、ネットワーク ライセンス マネージャーを再起動すると、MATLAB は正しく機能するはずです。

  • このエラーは、誤ったシステム日付により発生している可能性もあります。ライセンスを取得した日付よりシステム日付が前である場合、このエラーが発生します。

  • MATLAB Parallel Server ソフトウェアでワーカーを起動したときにこのエラーが発生した場合は、以下の原因が考えられます。

    • ワーカー ライセンスにアクセスできないインストール環境から startworker コマンドを呼び出している可能性があります。たとえば、Parallel Computing Toolbox™ 製品のクライアント インストール環境からワーカーを起動すると、次のエラーが発生します。

      The mjs service on the host hostname 
      returned the following error:
      
      Problem starting the MATLAB worker.
      
      The cause of this problem is:
      
      ==============================================================
         Most likely, the MATLAB worker failed to start due to a
         licensing problem, or MATLAB crashed during startup.  Check 
         the worker log file
         /tmp/mjs_user/node_node_worker_05-11-01_16-52-03_953.log
         for more detailed information.  The mjs log file
         /tmp/mjs_user/mjs-service.log
         may also contain some additional information.
      ===============================================================
      

      ワーカー ログ ファイルで、次の情報を確認してください。

      License checkout failed.
      License Manager Error -15
      MATLAB is unable to connect to the license server. 
      Check that the license manager has been started, and that the 
      MATLAB client machine can communicate with the license server.
      
      Troubleshoot this issue by visiting: 
      https://www.mathworks.com/support/lme/R2009a/15
      
      Diagnostic Information:
      Feature: MATLAB_Distrib_Comp_Engine 
      License path: /apps/matlab/etc/license.dat 
      FLEXnet Licensing error: -15,570. System Error: 115
      

    • Parallel Computing Toolbox 製品のみをインストールしており、同じマシン上でワーカーを実行しようとすると、このエラーが表示されます。これは、MATLAB Parallel Server 製品がインストールされておらず、ワーカーがライセンスを取得できないためです。

UNIX オペレーティング システムでのメモリ エラー

UNIX® オペレーティング システム (Linux® または Macintosh) が稼働するマシン上でサーバー サービスにより作成されたスレッドの数が、maxproc 値で設定された制限を超えると、サービスは失敗してメモリ不足エラーが生成されます。limit コマンドで UNIX オペレーティング システムの maxproc 値をチェックします (UNIX ソフトウェアのバージョンによっては、このプロパティが別の名前になっている場合があります)。

Windows ネットワーク インストール環境でのサーバー プロセスの実行

多くのネットワークは、UNC またはマッピングされたネットワーク共有に LocalSystem がアクセスできないように構成されます。この場合、サービスとしてログオンする権限をもつ別のユーザーとして mjs プロセスを実行します。ユーザーの設定を参照してください。

必要なポート

ジョブ マネージャー使用時

BASE_PORT-  mjs_def ファイルでは、ジョブ マネージャーとすべてのワーカーに必要なポートが指定され、その説明があります。それぞれのクラスター プロセスで使用される MATLAB インストール環境で、次のファイルを参照してください。

  • matlabroot/toolbox/distcomp/bin/mjs_def.sh (UNIX オペレーティング システム)

  • matlabroot\toolbox\distcomp\bin\mjs_def.bat (Windows® オペレーティング システム)

通信ジョブ-  UNIX オペレーティング システムで稼動するワーカー マシン上で、MPICH が通信ジョブの実行に必要とするポート番号の範囲は、BASE_PORT + 1000 から BASE_PORT + 2000 までです。

サードパーティ製スケジューラ使用時

ワーカー プロセスが起動する前に、環境変数 MPICH_PORT_RANGE を値 minport:maxport で定義して、ワーカーが通信ジョブで使用するポートの範囲を制御できます。

クライアント ポート

関数 pctconfig を使用してクライアントで使用されるポートを指定します。既定のポートを使用できない場合、この関数によりジョブ スケジューラとの通信用および pmode または並列プールとの通信用に個別のポートを構成できます。

ジョブ マネージャーで使用する一時 TCP ポート

Windows オペレーティング システムが稼働するノードのクラスター上でジョブ マネージャーを使用する場合、ジョブ マネージャー マシン上で一時的に多数の TCP ポートが確実に使用できなければなりません。既定では、Windows オペレーティング システム上の有効な一時 TCP ポートの最大の番号は 5000 ですが、この設定が大きくされていない場合大量のデータセットの転送に失敗する可能性があります。特に、クラスターに 32 個以上のワーカーがある場合、次の手順に従って有効な一時 TCP ポートの最大の番号を大きくしなければなりません。

  1. レジストリ エディターを起動します。

  2. レジストリで次のサブキーを見つけて、[パラメーター] をクリックします。

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
  3. [レジストリ エディター] ウィンドウで、[編集][新規][DWORD (32 ビット) 値] を選択します。

  4. 右側のエントリの一覧で、新しい値の名前を MaxUserPort に変更し、Enter キーを押します。

  5. MaxUserPort エントリ名を右クリックし、[修正] を選択します。

  6. [DWORD 値の編集] ダイアログの [値のデータ] フィールドに「65534」と入力します。[表記] の値として [10 進数] を選択します。[OK] をクリックします。

    このパラメーターは、プログラムがシステムに使用可能なユーザー ポートを要求する際の最大ポート番号を制御します。通常、一時 (短命) ポートは 1024 から 5000 までの値を割り当てられます。この処理により、最大 65534 までのポート番号を割り当てることができます。

  7. レジストリ エディターを終了します。

  8. マシンを再起動します。

ホスト通信の問題

ワーカーが MATLAB ジョブ スケジューラに接続できない場合、またはクライアント セッションがそのスケジューラを使用するプロファイルを検証できない場合、ノード間で通信の問題が発生している可能性があります。

コマンド ライン インターフェイスを使用

まず、問題のマシンが、解決された IP アドレスと一致していることを確認してください。特定のホストの IP アドレスは、自身から見ても、別のホストから見ても、同じでなければなりません。たとえば、hostB 上のプロセスが hostA 上のプロセスに接続できない場合、hostA の自身の IP アドレスを調べてから、hostB から見た hostA の IP アドレスを確認します。両者は同一でなければなりません。

マシンが相互を識別できる場合、そのプロセス間の問題の診断に nodestatus コマンドが役立つ場合があります。この関数を使用して、ローカル ホスト上で実行されている MATLAB Parallel Server プロセスを判別し、リモート ホストからアクセス可能なものを特定します。hostA 上のワーカーが hostB 上のジョブ マネージャーに登録できない場合、両方のホストで nodestatus を実行して、それぞれのホストが hostB 上で参照できるものを確認します。

hostB で次を実行します。

nodestatus -remotehost hostB

次に hostA で同じコマンドを実行します。

nodestatus -remotehost hostB

結果として、同じジョブ マネージャーとワーカーの一覧が表示されなければなりません。

出力に問題が示される場合、情報レベルを高くして再度コマンドを実行し、より詳細な情報を取得します。

nodestatus -remotehost hostB -infolevel 3

Admin Center GUI を使用

Admin Center を使用していくつかの通信の問題を診断できます。

ホスト名を指定して一覧にホストを正しく追加できない場合は、代わりに IP アドレスを使用できます (ホストの追加を参照)。何らかの通信の問題が疑われる場合、Admin Center GUI で [接続のテスト] をクリックします (接続性のテストを参照)。このテストにより、ノードが相互を識別でき、ノードのプロセス間で相互に通信できることが検証されます。

クラスター検出のためのネットワーク通信の検証

Parallel Computing Toolbox でクラスター検出機能を使用する場合、ネットワークは少なくとも次のいずれかで構成されていなければなりません。

DNS SRV レコード

クラスター検出に DNS を使用するには、以下のような一般的な形式の DNS SRV レコードが必要です。

_mdcs._tcp.domainname.com SSSS IN SRV PPPP WWWW MJS_PORT MJS_FQDN_HOSTNAME

このレコードは次の部分で構成されています。

  • _mdcs._tcp. レコードはこのテキストから始め、その後にクライアント マシンが検索するドメイン名 (company.comuniversity.edu など) を指定しなければなりません。

  • SSSS は DNS レコードをキャッシュできる期間 (秒) を示します。3600 を推奨します。

  • IN SRV はこれがサービス レコードであることを示しており、このとおりに入力する必要があります。

  • PPPPWWWW は優先順位と待機時間の値を示します。これらは使用しないため、どちらも 0 にすることを推奨します。

  • MJS_PORT は MATLAB ジョブ スケジューラ サーバーに接続するポートです。既定の設定は 27350 ですが、サーバー側の番号を変更する場合は、それに応じてこの値を変更しなければなりません。

  • MJS_FQDN_HOSTNAME は MATLAB ジョブ スケジューラのホストの完全修飾ドメイン名です。たとえば、mjs-1.company.com です。

マシン mjs-1 上で MATLAB ジョブ スケジューラを実行している company.com のネットワークの有効な DNS SRV レコードは次のようになります。

_mdcs._tcp.company.com 3600 IN SRV 0 0 27350 mjs-1.company.com

ご使用のネットワークに対して、使用している DNS システムの標準手順に従って適切な DNS SRV レコードを作成します。これにより、ネットワークが必要な DNS SRV レコードで構成されていることを nslookup コマンドのような標準ユーティリティを使用して確認できます。たとえば、このシステム コマンドは、次のように該当する DNS SRV レコードの存在を示します。

nslookup -type=SRV _mdcs._tcp.company.com 

マルチキャスト

マルチキャストを使用するには、MATLAB ジョブ スケジューラが稼働するヘッド ノードおよびクライアント システムでマルチキャストが必要です。

マルチキャストは TCP/IP や UDP とは異なり、サブスクリプションベースのプロトコルです。これは、ネットワーク上の多数のマシンが、ネットワーク上のある場所から送信された特定のパケットへの関心をネットワークに示すというものです。一方、UDP および TCP パケットは通常、IP アドレスで示される単一のマシンのみに向けて送信されます。

このタイプのパケットを調査するための主なツールは次のとおりです。

  • tcpdump (UNIX オペレーティング システム)

  • winpcap および ethereal (Microsoft® Windows オペレーティング システム)

  • 並列計算製品に付属の Java® クラス。

この Java クラスは com.mathworks.toolbox.distcomp.test.MulticastTester と呼ばれるものです。このクラスの静的 main メソッドとコンストラクターはどちらも 2 つの入力引数 (参加するマルチキャスト グループと使用するポート番号) を取ります。

この Java クラスには、指定されたマルチキャスト グループへの参加を試せる単純なメソッドが多数あります。グループへの参加に成功した後も、クラスにはそのグループにメッセージを送信するメソッド、そのグループからのメッセージをリッスンするメソッド、受信したものを表示するメソッドなどがあります。このクラスは、コマンド ラインから Java ソフトウェアを呼び出して使用することも、MATLAB 内部で使用することもできます。

シェル プロンプトで次のように入力します (パス上に java があるものとします)。

java -cp distcomp.jar com.mathworks.toolbox.distcomp.test.MulticastTester

次のような出力が表示されます。

0 : host1name : 0
1 : host2name : 0

次の例は、MATLAB 内で Java クラスを使用する方法を示します。

マルチキャストをテストする 2 台のマシン (たとえば、host1namehost2name) で MATLAB を起動します。それぞれの MATLAB セッションで、次のコマンドを入力します。

m = com.mathworks.toolbox.distcomp.test.MulticastTester('239.1.1.1', 9999);
m.startSendingThread;
m.startListeningThread;

これらの命令により、それぞれの MATLAB セッションはマルチキャスト テスト パケットのストリームを発行し、テスト パケットをリッスンします。マルチキャストがマシン間で機能している場合、次のような複数行のストリームが表示されます。

 0 : host1name : 0
 1 : host2name : 0
 2 : host2name : 1
 3 : host2name : 2

各文字ベクトルの左側の数字は、受信したパケットの行番号です。中央のテキストは、パケットの送信元のホストを示します。右側の数字は、送信ホストが送信したパケット番号です。通常、ホストは自身からのテスト パケットをレポートします。

いずれかのマシンでテスト パケットのストリームを受信しなかった場合、あるいはリモート ホストがいずれのストリームにも含まれない場合、マルチキャスト通信は正常に動作していません。

テスト ストリームを終了するには、両方の MATLAB セッションで次を実行します。

m.stopSendingThread;
m.stopListeningThread;