ドキュメンテーション

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

トラブルシューティングとデバッグ

オブジェクト データ サイズの制限

並列計算オブジェクト間のデータ転送のサイズ制限は、Java® 仮想マシン (JVM™) のメモリ割り当てによって規定されています。この制限は、MJS クラスターを使用した任意のジョブにおける、クライアントとワーカー間の 1 回のデータ転送に適用されます。およそのサイズ制限は、システム アーキテクチャによって決まります。

システム アーキテクチャ転送あたりの最大データ サイズ (概算)
64 ビット2.0 GB
32 ビット600 MB

ファイル アクセスと権限

Windows オペレーティング システムのワーカーによるファイルへの確実なアクセス

既定では、Windows® オペレーティング システムのワーカーは、LocalSystem として実行されるサービスとしてインストールされているため、マッピングされたネットワーク ドライブにはアクセスできません。

多くの場合、ネットワークは、LocalSystem として実行されているサービスが UNC やマッピングされたネットワーク共有にアクセスできないように構成されています。このような場合には、サービスとしてログオンする権利をもつ別のユーザーとして mdce サービスを実行しなければなりません。『MATLAB® Distributed Computing Server™ System Administrator's Guide』の「ユーザーの設定」の節を参照してください。

タスク関数が利用不可

ワーカーがタスク関数を見出せない場合は、エラー メッセージを返します。

Error using ==> feval
      Undefined command/function 'function_name'.

このタスクを実行したワーカーは関数 function_name にアクセスしていません。1 つの解決法は、関数のファイル function_name.m の場所をジョブの AdditionalPaths プロパティに必ず含めるようにすることです。もう 1 つの解決法は、function_name.m をジョブの AttachedFiles プロパティに追加して、関数ファイルをワーカーに転送することです。

エラーの読み込みと保存

ワーカーにファイルの保存や読み込みができない場合、以下のエラー メッセージが表示される可能性があります。

??? Error using ==> save
Unable to write file myfile.mat: permission denied.
??? Error using ==> load
Unable to read file myfile.mat: No such file or directory.

このエラーの原因を特定するには、以下の質問を検討してください。

  • ワーカーの現在のフォルダーはどれか

  • ワーカーはそのファイルまたはフォルダーを見つけることができるか

  • どのユーザーとしてワーカーが実行されているか

  • ワーカーに問題のファイルの読み取りまたは書き込み権限があるか

タスクまたはジョブが queued 状態で残留

ジョブまたはタスクが queued 状態のままになる場合があります。この問題の原因を調べるには、スケジューラのログを探索します。

  • Platform LSF® スケジューラはエラー メッセージの記載された電子メールを送信する場合があります。

  • Windows HPC Server (CCS を含む)、LSF®、PBS Pro®、TORQUE は、出力メッセージをデバッグ ログに保存します。getDebugLog のリファレンス ページを参照してください。

  • 汎用スケジューラを使用する場合は、投入関数によりエラー メッセージがログ ファイルにリダイレクトされるようにします。

問題の原因としては以下の可能性が考えられます。

  • MATLAB ワーカーがライセンス エラーのため起動できなかった。あるいは、実行可能ファイルがワーカーのマシンの既定のパスにないか、またはスケジューラで想定されている場所にインストールされていない。

  • MATLAB がスケジューラのジョブ保存場所でジョブの入出力ファイルを読み取り/書き込みできなかった。保存場所が一部のワーカー ノードからアクセスできないか、または MATLAB を実行しているユーザーにジョブ ファイルの読み取り/書き込み権限がない。

  • 汎用スケジューラを使用し、以下の条件に合致する場合。

    • MATLAB ワーカーが起動する前に、環境変数 MDCE_DECODE_FUNCTION が定義されていなかった。

    • デコード関数がワーカーのパスになかった。

結果なしまたはジョブの失敗

タスク エラー

ジョブで結果が返されなかった (つまり、fetchOutputs(job) で空のセル配列が返された) 場合は、おそらくジョブが失敗し、そのタスクの一部に Error プロパティが設定されたと考えられます。

次のコードを使用して、エラー メッセージを伴うタスクを特定できます。

errmsgs = get(yourjob.Tasks, {'ErrorMessage'});
nonempty = ~cellfun(@isempty, errmsgs);
celldisp(errmsgs(nonempty));

このコードにより、yourjob ジョブ オブジェクトにあるタスクの、空でないエラー メッセージが表示されます。

デバッグ ログ

サポートされているサードパーティ製スケジューラを使用する場合、関数 getDebugLog を使用してスケジューラから特定のジョブまたはタスクのデバッグ ログを読み取ることができます。

たとえば、LSF スケジューラで失敗したジョブを見つけ、そのデバッグ ログを読み取ります。

c = parcluster('my_lsf_profile')
failedjob = findJob(c, 'State', 'failed');
message = getDebugLog(c, failedjob(1))

クライアントと MJS の接続障害

クライアント マシンと計算クラスターのマシンの接続をテストするには、Admin Center を使用できます。Admin Center の起動方法と接続のテスト方法など、Admin Center についての詳細は、MATLAB Distributed Computing Server ドキュメンテーションの「Admin Center の起動」および「接続性のテスト」を参照してください。

クライアントと MJS の接続障害を診断する他の方法についての詳細説明は、MathWorks の Web サイトにある「バグ レポート」を参照してください。

以下の節は、一部の接続障害の一般的性質を確認するために役立ちます。

クライアントで MJS が認識されない

parcluster で MJS が見つからない場合や接続できない場合、原因として最も可能性が高いのは以下のいずれかです。

  • MJS が現在実行されていない。

  • クライアントから MJS へのトラフィックがファイアウォールにより許可されない。

  • クライアントと MJS が同じバージョンのソフトウェアを実行していない。

  • クライアントと MJS が互いの短いホスト名を解決できない。

  • MJS は、mdce_def ファイルに定義されているとして既定でない BASE_PORT 設定を使用し、クラスター プロファイルの Host プロパティは、このポートを指定しません。

MJS でクライアントが認識されない

MJS がクライアント コンピューターへの TCP 接続を開くことができないという警告メッセージが表示される場合、原因として最も可能性が高いのは以下のいずれかです。

  • MJS からクライアントへのトラフィックがファイアウォールにより許可されない。

  • MJS がクライアント コンピューターの短いホスト名を解決できない。pctconfig を使用して、MJS がクライアントへの接続に使用するホスト名を変更してください。

SFTP エラー: 長すぎる受信メッセージ

非共有ファイル システムを使用する次の汎用スケジューラの例では、sftp サーバーに接続トして、クラスターのファイル システムとの間のファイル送受信を処理しています。この sftp の使用には、通常の sftp の脆弱性がすべて伴います。1 つの問題発生に際して、以下のようなエラー メッセージが表示されたとします。

Caused by:
    Error using ==> RemoteClusterAccess>RemoteClusterAccess.waitForChoreToFinishOrError at 780
    The following errors occurred in the 
         com.mathworks.toolbox.distcomp.clusteraccess.UploadFilesChore:
     Could not send Job3.common.mat for job 3: 
     One of your shell's init files contains a command that is writing to stdout,
        interfering with sftp. Access help
     com.mathworks.toolbox.distcomp.remote.spi.plugin.SftpExtraBytesFromShellException: 
     One of your shell's init files contains a command that is writing to stdout, 
        interfering with sftp.
     Find and wrap the command with a conditional test, such as

    	if ($?TERM != 0) then
    		if ("$TERM" != "dumb") then
    			/your command/
    		endif
    	endif

     : 4: Received message is too long: 1718579037

問題の所在を示す症状は、「Received message is too long:」という表現と、その後に続く大きな数値です。

sftp サーバーは通常 bash または tcsh のシェルを起動し、標準的な読み取りおよび書き込み権限を適切に設定してから、ファイルを転送します。サーバーはシェルを標準的な方法で初期化し、.bashrc および .cshrc のようなファイルを呼び出します。この問題は、シェルが起動時にテキストを標準出力に送り出す場合に発生します。テキストは MATLAB 内で実行されている sftp クライアントに返送され、sftp サーバーの応答メッセージのサイズとして解釈されます。

このエラーを回避するには、テキストを送り出すシェル スタートアップ ファイルのコードを特定し、それを削除するか if ステートメント内に囲んで、sftp サーバーがシェルを起動するかどうかを確認します。

if ($?TERM != 0) then
    if ("$TERM" != "dumb") then
        /your command/
    endif
endif

これは、MATLAB 内で再試行する前に、標準の UNIX または Windows の sftp コマンド ライン クライアントを用いて MATLAB 外でテストすることができます。問題が解決されない場合、同じエラー メッセージが再表示されます。

> sftp yourSubmitMachine
Connecting to yourSubmitMachine...
Received message too long 1718579042

問題が解決された場合は、次のように表示されます。

> sftp yourSubmitMachine
Connecting to yourSubmitMachine...
この情報は役に立ちましたか?