Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

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

添付ファイルのサイズ制限

ジョブのすべての添付ファイルを合わせた総サイズは 4 GB に制限されています。

ファイル アクセスと権限

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

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

多くの場合、ネットワークは、LocalSystem として実行されているサービスが UNC やマッピングされたネットワーク共有にアクセスできないように構成されています。このような場合には、サービスとしてログオンする権限をもつ別のユーザーとして mjs サービスを実行しなければなりません。『MATLAB® Parallel Server™ システム管理者ガイド』のユーザーの設定 (MATLAB Parallel Server)の節を参照してください。

タスク関数が利用不可

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

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 状態で残留

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

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

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

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

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

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

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

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

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

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

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

タスク エラー

ジョブで結果が返されなかった (つまり、fetchOutputs(job) で空の cell 配列が返された) 場合は、おそらくジョブが失敗し、そのタスクの一部に 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))

クライアントと MATLAB ジョブ スケジューラの接続障害

クライアント マシンと計算クラスターのマシンの接続をテストするには、管理センターを使用できます。管理センターの起動方法と接続のテスト方法など、管理センターの詳細については、管理センターの起動 (MATLAB Parallel Server)および接続のテスト (MATLAB Parallel Server)を参照してください。

クライアントと MATLAB ジョブ スケジューラの接続障害を診断する他の方法の詳細説明は、MathWorks の Web サイトにあるバグ レポートの一部に記載されています。

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

クライアントが MATLAB ジョブ スケジューラを認識しない

parcluster を使用して MATLAB ジョブ スケジューラが見つからない場合、または接続できない場合、このエラーの原因として最も可能性が高いものは次のとおりです。

  • MATLAB ジョブ スケジューラが現在実行されていない。

  • クライアントから MATLAB ジョブ スケジューラへのトラフィックがファイアウォールにより許可されない。

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

  • クライアントと MATLAB ジョブ スケジューラが互いの短いホスト名を解決できない。

  • MATLAB ジョブ スケジューラが、mjs_def ファイルに定義されている既定とは異なる BASE_PORT 設定を使用し、クラスター プロファイルの Host プロパティにこのポートが指定されていない。

MATLAB ジョブ スケジューラがクライアントを認識しない

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

  • MATLAB ジョブ スケジューラからクライアントへのトラフィックがファイアウォールにより許可されない。

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

"シェルの init ファイルの 1 つに、stdout への書き込み行うコマンドが含まれています..."

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

One of your shell's init files contains a command that is writing to stdout,
interfering with RemoteClusterAccess.
The stdout read was:
<some output>

Find and wrap the command with a conditional test, such as

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

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...