はい、承知いたしました。MATLAB利用時に遭遇する可能性のある「no healthy upstream」エラーについて、詳細な説明と解決策を含む約5000語の記事を作成します。
「no healthy upstream」エラー解決!MATLAB利用時の対処法
はじめに
MATLABは、技術計算、データ解析、可視化、プログラミングのための強力なプラットフォームです。多くの複雑なタスクをこなす一方で、外部リソースやネットワークサービスとの連携も頻繁に行われます。ライセンス認証、アドオンのダウンロード、オンラインドキュメンテーションへのアクセス、Parallel Computing Toolbox (PCT) を用いた分散処理、あるいは自社開発のウェブサービスやデータベースへの接続など、MATLABがネットワークを介して外部と通信するシナリオは多岐にわたります。
こうしたネットワーク通信の過程で、「no healthy upstream」というエラーメッセージに遭遇することがあります。このメッセージは、MATLABそのものの内部的なエラーというよりは、MATLABがアクセスしようとしている先のネットワークインフラストラクチャ、特に「リバースプロキシ」や「ロードバランサー」に関連する問題を示唆しています。
このエラーに直面すると、MATLABの特定の機能が使えなくなったり、あるいは起動すらできなくなったりする場合があり、作業が完全に停止してしまう可能性があります。しかし、エラーメッセージの意味を正しく理解し、体系的なトラブルシューティングを行うことで、その原因を特定し、解決に導くことができます。
本記事では、「no healthy upstream」エラーがなぜ発生するのか、MATLAB利用時にどのような状況で発生しうるのかを詳しく解説し、この問題を解決するための具体的なステップと高度なトラブルシューティング方法を約5000語にわたって詳細に説明します。読者がエラーの原因を理解し、適切な対処法を見つけるための包括的なガイドとなることを目指します。
目次
- 「no healthy upstream」エラーとは何か?
- リバースプロキシの役割
- 「Upstream」とは
- ヘルスチェックの重要性
- エラーメッセージの発生メカニズム
- MATLAB利用時における「no healthy upstream」エラーの発生シナリオ
- ライセンスサーバーへの接続
- MathWorksオンラインサービスへのアクセス
- カスタムアプリケーション/APIへの接続
- Parallel Computing Toolbox (PCT) 環境
- その他考えられるケース
- トラブルシューティングの体系的なアプローチ
- ステップ1:状況の特定と情報収集
- ステップ2:原因の分離(Isolate)
- ステップ3:詳細な診断(Diagnose)
- ステップ4:解決策の適用(Resolve)
- ステップ5:結果の検証(Verify)
- 一般的な原因と詳細な解決策
- ネットワーク接続の問題
- ホストへの到達可能性の確認 (Ping, Traceroute)
- 特定のポートへの接続確認 (Telnet, cURL)
- ファイアウォール(クライアント側、ネットワーク、サーバー側)
- DNS解決の問題 (nslookup, dig)
- Upstreamサーバー自体の問題
- サーバーの稼働状況
- 対象サービスの稼働状況
- サーバーのリソース(CPU, メモリ, ディスク)
- サーバー上のサービスログの確認
- プロキシ/ロードバランサーの設定問題
- プロキシサーバーの確認
- プロキシ設定ファイルの確認 (Nginx, Apache, Traefik, HAProxyなど)
- Upstream定義の確認
- ヘルスチェック設定の確認
- タイムアウト設定の確認
- プロキシサーバーのログ確認
- MATLAB固有のシナリオにおける追加の確認事項
- ライセンスサーバーの場合
- MathWorksオンラインサービスの場合
- カスタムアプリケーション/APIの場合
- PCT環境の場合
- システムレベルの問題
- OSのネットワークスタック
- ローカルリソースの枯渇
- ネットワーク接続の問題
- 高度なトラブルシューティングツール
- cURLコマンド
- ネットワークパケットキャプチャ (tcpdump, Wireshark)
- Netstatコマンド
- Lsofコマンド (Linux/macOS)
- エラーの再発を防ぐための対策
- ネットワークインフラストラクチャの監視
- Upstreamサービスの冗長化
- 適切なヘルスチェックとアラート設定
- 設定変更管理の徹底
- 専門家やサポートへの相談
- MathWorksサポートへの連絡
- 社内IT部門への連絡
- 必要な情報提供
- まとめ
1. 「no healthy upstream」エラーとは何か?
このエラーメッセージは、通常、リバースプロキシまたはロードバランサーによって生成されます。MATLAB自体が直接このメッセージを生成することは稀であり、MATLABが通信しようとした相手(例えば、ライセンスサーバー、ウェブサービスなど)が、その手前にあるプロキシやロードバランサーを経由している場合に発生します。
-
リバースプロキシの役割: クライアント(ここではMATLAB)からのリクエストを受け取り、そのリクエストを処理できる実際のサーバー(複数ある場合もある)に転送する役割を担います。これにより、クライアントは直接バックエンドのサーバーと通信する代わりに、プロキシとだけ通信すればよくなります。セキュリティの向上、ロードバランシング、SSL終端、キャッシュなどの機能を提供するために広く利用されます。
-
「Upstream」とは: リバースプロキシやロードバランサーの用語で、「Upstream」とは、プロキシがクライアントからのリクエストを転送する先のバックエンドサーバー群を指します。これらのサーバーは、実際に処理(ウェブページの配信、APIリクエストの処理、ライセンスの提供など)を行う実体です。
-
ヘルスチェックの重要性: プロキシやロードバランサーは、Upstreamサーバーが正常に稼働しているか、リクエストを処理する準備ができているか periodic に確認します。この確認プロセスを「ヘルスチェック」と呼びます。ヘルスチェックは、特定のポートへのTCP接続試行、特定のURLへのHTTPリクエスト、あるいはより複雑なチェックによって行われます。ヘルスチェックに成功したUpstreamサーバーは「healthy(正常)」と見なされ、失敗したサーバーは「unhealthy(異常)」と見なされます。
-
エラーメッセージの発生メカニズム: 「no healthy upstream」エラーは、プロキシやロードバランサーがクライアント(MATLAB)からのリクエストを受け取った際に、設定されている 全ての Upstreamサーバーがヘルスチェックで「unhealthy」と判定されているか、またはそもそも 利用可能な Upstreamサーバーが全く設定されていない場合に発生します。つまり、プロキシがリクエストを転送しようにも、転送先として指定されているサーバーがどれも正常に機能していないと判断された状況です。
2. MATLAB利用時における「no healthy upstream」エラーの発生シナリオ
前述の通り、このエラーはMATLABが直接生成するものではなく、MATLABがネットワーク経由でアクセスするサービスの手前にあるプロキシやロードバランサーから返されるものです。MATLABの利用において、このエラーに遭遇する可能性のある具体的なシナリオを以下に挙げます。
-
ライセンスサーバーへの接続:
- 特に、ネットワークライセンス(Concurrent License)を使用している場合、MATLABは起動時や機能使用時にライセンスサーバーと通信します。
- もしこのライセンスサーバーが、社内ネットワーク構成でプロキシやロードバランサーの背後に配置されている場合、そしてそのライセンスサーバーが正常に稼働していない、またはプロキシからのヘルスチェックに応答しない状態にあると、「no healthy upstream」エラーが発生する可能性があります。
- これは比較的よくあるシナリオで、ライセンスサーバーのダウン、ファイアウォール設定の誤り、ライセンスマネージャーソフトウェア(FlexNetなど)の問題が原因となります。
-
MathWorksオンラインサービスへのアクセス:
- MATLAB内からアドオンエクスプローラーを開く、ドキュメンテーションを参照する、File Exchangeにアクセスする、MathWorksアカウントにログインするといった操作は、MathWorksが提供するオンラインサービスへのアクセスです。
- これらのサービスは、当然ながらMathWorks側の広大なネットワークインフラストラクチャ上で稼働しており、リバースプロキシやロードバランサーが多重に利用されています。
- もし、あなたがいる場所からMathWorksのサービスまでのネットワーク経路上の問題、あるいはMathWorks側のインフラストラクチャの一時的な問題(特定のサーバー群の障害など)が発生した場合、MathWorks側のプロキシが「no healthy upstream」と判断し、そのエラーがMATLABまで伝播してくる可能性があります。ただし、このケースでユーザー側に直接できる対処法は限られます(主にネットワーク経路の確認とMathWorksへの報告)。
-
カスタムアプリケーション/APIへの接続:
- MATLABスクリプトや関数内で
webread
,websave
,matlab.net.http
クラスなどを使用して、社内または外部のウェブサービスやRESTful APIと通信している場合。 - もし、そのターゲットとなるウェブサービスやAPIが、プロキシやロードバランサーを経由して提供されている場合、Upstreamサーバー(実際にAPIリクエストを処理するサーバー)に問題があると、プロキシから「no healthy upstream」エラーが返されます。
- このシナリオは、MATLABを他のシステムと連携させている場合に発生し得ます。
- MATLABスクリプトや関数内で
-
Parallel Computing Toolbox (PCT) 環境:
- MATLAB Parallel Server やクラウド環境を利用して並列計算を行っている場合、MATLABクライアント、クラスターマネージャー、計算ワーカー間での複雑な通信が行われます。
- これらのコンポーネント間の通信経路にプロキシやロードバランサーが介在している場合(特に大規模なエンタープライズ環境やクラウドデプロイメントで)、特定のサービス(例えば、ジョブキュー、データ転送サービスなど)へのアクセスが「no healthy upstream」エラーによって妨げられる可能性があります。
-
その他考えられるケース:
- MATLABがアクセスする可能性のある、プロキシ経由の内部ファイルサーバー、データベースゲートウェイ、メッセージキューシステムなど。
- ただし、「no healthy upstream」というエラーメッセージはHTTP/HTTPSプロキシで最も一般的に見られるため、上記のウェブ関連またはライセンス関連のシナリオが最も可能性が高いです。
重要なのは、このエラーメッセージ自体が 「プロキシが、設定されているバックエンドサーバーのどれとも正常に通信できなかった」 ということを意味している、という点です。原因は、プロキシとUpstreamサーバー間のネットワーク、Upstreamサーバー自体の状態、またはプロキシの設定ミスにあります。
3. トラブルシューティングの体系的なアプローチ
「no healthy upstream」エラーを解決するためには、闇雲に設定を変更するのではなく、体系的なアプローチを取ることが重要です。以下に推奨する5つのステップを示します。
-
ステップ1:状況の特定と情報収集(Identify)
- エラーメッセージは正確にどのようなものか? (エラーコードや詳細なメッセージも含む)
- エラーはいつ発生したか? (MATLAB起動時、特定の機能使用時、特定のスクリプト実行時など)
- エラー発生時にMATLABは何をしようとしていたか? (どのサービスにアクセスしようとしていたか? 例: ライセンス認証、アドオンDL、
webread
で特定のURLにアクセス、並列プールの起動など) - エラーは常に発生するか、それとも断続的か?
- 他に同じエラーを経験しているユーザーはいるか? (同じネットワーク環境、同じMATLABバージョンか?)
- 最近、ネットワーク構成、MATLABの設定、あるいはアクセス先のサービスに変更はあったか?
-
ステップ2:原因の分離(Isolate)
- エラーは特定のMATLABインストールだけで発生するか、それとも他のマシンでも発生するか?
- MATLAB以外のクライアント(例えば、ウェブブラウザ、cURLコマンドなど)から、エラーが発生しているサービス(例えば、ライセンスサーバーのポート、ウェブサービスのURL)にアクセスできるか? プロキシを経由した場合と、可能であれば直接アクセスした場合の両方で試す。
- 同じマシン上で、MATLABの別バージョンや別のユーザーアカウントで試すとどうなるか?
- ネットワーク環境を変更すると(可能であれば)、エラーは解消するか? (例: 有線接続からWi-Fiへ、別のネットワークセグメントへ)
- これにより、問題が特定のMATLABインストールにあるのか、クライアントマシン固有の問題か、ネットワーク全体の問題か、あるいはターゲットサービス側の問題かを切り分けます。
-
ステップ3:詳細な診断(Diagnose)
- ステップ2で絞り込まれた範囲に対して、さらに詳細な技術的な調査を行います。
- ネットワークツール(Ping, Telnet, cURL, Traceroute, nslookup)を使用して、問題のサービスへの到達可能性、ポートの開放状況、名前解決などを確認します。
- プロキシサーバーおよびUpstreamサーバー上のログファイルを確認します。これが最も重要な手がかりとなることが多いです。エラーが発生した正確なタイムスタンプ周辺のログを重点的に見ます。
- プロキシサーバーの設定ファイルを確認し、Upstreamサーバーのアドレス、ポート、ヘルスチェック設定、タイムアウト設定などが正しいか確認します。
- Upstreamサーバー上で、対象サービス(ライセンスマネージャー、ウェブサーバープロセスなど)が正常に稼働しているか確認します。
-
ステップ4:解決策の適用(Resolve)
- 診断結果に基づいて、根本原因に対する解決策を適用します。
- 例:ファイアウォールルールの変更、Upstreamサーバー上のサービス再起動、プロキシ設定ファイルの修正、ネットワーク機器の再起動、DNSサーバー設定の修正など。
-
ステップ5:結果の検証(Verify)
- 解決策を適用した後、MATLABでエラーが発生していた操作を再度実行し、問題が解消されたことを確認します。
- 可能であれば、問題が再発しないことを確認するために、複数回試行したり、エラーが発生しやすい条件下でテストしたりします。
- 他のユーザーにも影響が出ていた場合は、それらのユーザー環境でも問題が解消されたことを確認します。
この体系的なアプローチを取ることで、効率的に原因を特定し、再発の可能性を減らすことができます。次章では、上記ステップ3と4で用いる具体的な診断方法と解決策を、一般的な原因別に詳しく見ていきます。
4. 一般的な原因と詳細な解決策
「no healthy upstream」エラーの発生源は、クライアント(MATLAB)からUpstreamサーバーまでの経路上のどこかにあります。考えられる主な原因と、それに対応する詳細な解決策を説明します。
4.1. ネットワーク接続の問題
プロキシとUpstreamサーバー間、あるいはMATLABクライアントからプロキシ/Upstreamサーバーまでのネットワーク経路に問題がある場合、プロキシはUpstreamをhealthyと判断できません。
-
ホストへの到達可能性の確認 (Ping, Traceroute)
- まず、プロキシサーバーからUpstreamサーバーのIPアドレスまたはホスト名に対してPingを実行します。
bash
ping <UpstreamサーバーのIPアドレスまたはホスト名>- Pingが成功する場合:基本的なネットワーク接続性はあります。UpstreamサーバーがICMPに応答しない設定になっている可能性もあります。
- Pingが失敗する場合:ネットワーク経路に問題がある可能性が高いです。Upstreamサーバーがダウンしているか、ネットワーク機器(ルーター、スイッチ)の設定、あるいは中間にあるファイアウォールが原因かもしれません。
- Traceroute (Windowsでは
tracert
) を使用して、Upstreamサーバーまでのネットワーク経路を確認します。
bash
traceroute <UpstreamサーバーのIPアドレスまたはホスト名>
# または Windows: tracert <UpstreamサーバーのIPアドレスまたはホスト名>- これにより、どのルーターやホップでパケットが停止しているか(タイムアウトしているか)を確認できます。特定のホップで応答がなくなる場合、その地点以降や、そのホップにあるファイアウォールなどに問題がある可能性が考えられます。
- まず、プロキシサーバーからUpstreamサーバーのIPアドレスまたはホスト名に対してPingを実行します。
-
特定のポートへの接続確認 (Telnet, cURL)
- Upstreamサーバー上でサービスが待ち受けているポートに対して、TCP接続が可能か確認します。
- Telnetを使用する方法が最もシンプルです。(Telnetクライアントがインストールされている必要があります)
bash
telnet <UpstreamサーバーのIPアドレスまたはホスト名> <ポート番号>- 接続に成功し、Telnetのシェルが表示されるか、あるいはサービスからの応答(例: HTTPサービスのバナー)が表示されれば、そのポートは開いており、基本的なTCP接続は可能です。
- 接続がすぐに拒否される (
Connection refused
) 場合:Upstreamサーバー上のサービスが実行されていない、あるいはサーバーのファイアウォールでそのポートが閉じられています。 - 接続試行中にタイムアウトする (
Connect failed
) 場合:ネットワーク経路上のファイアウォールが接続をブロックしている、Upstreamサーバーがダウンしている、あるいはネットワークが到達不能です。
- cURLを使用する方法は、特にHTTP/HTTPSサービスの場合に有効です。ヘルスチェックに使われる可能性のあるパスにリクエストを送ってみます。(詳細は後述の「高度なトラブルシューティングツール」を参照)
-
ファイアウォール(クライアント側、ネットワーク、サーバー側)
- ファイアウォールは、意図しない通信をブロックすることでセキュリティを確保しますが、必要な通信までブロックしてしまうことがあります。
- クライアント側ファイアウォール: MATLABを実行しているコンピューターのファイアウォール(Windows Defender Firewall, macOS Firewall, Linuxのiptables/firewalldなど)が、MATLABや関連プロセスが外部(プロキシやUpstreamサーバー)に接続することを許可しているか確認します。
- ネットワークファイアウォール: 組織のネットワーク境界やセグメント間に設置されているファイアウォールが、プロキシとUpstreamサーバー間の通信、あるいはMATLABクライアントとプロキシ/Upstreamサーバー間の通信(直接接続の場合)をブロックしていないか確認します。必要なポート(例: ライセンスサーバーのポート、HTTP/Sポートなど)が開放されていることを確認します。
- サーバー側ファイアウォール: Upstreamサーバー自体のファイアウォールが、プロキシサーバーからの接続(あるいは直接接続の場合はMATLABクライアントからの接続)をブロックしていないか確認します。Upstreamサービスが使用するポート(例: HTTP/Sの80/443番、ライセンスサーバーの特定のポート範囲など)が、プロキシサーバーのIPアドレス(または必要に応じてクライアントIPアドレス範囲)からのアクセスに対して開放されている必要があります。
- ファイアウォール設定の確認と変更には、管理者権限が必要です。社内のIT部門に協力してもらう必要があるかもしれません。
-
DNS解決の問題 (nslookup, dig)
- Upstreamサーバーやプロキシサーバーをホスト名で指定している場合、そのホスト名が正しいIPアドレスに解決できる必要があります。
- MATLABクライアント、プロキシサーバー、Upstreamサーバーのそれぞれから、対象のホスト名に対してDNSルックアップを実行します。
bash
nslookup <ホスト名>
# または Linux/macOS: dig <ホスト名> - 期待されるIPアドレスが返ってくるか確認します。もし返ってこない、あるいは間違ったIPアドレスが返ってくる場合、DNSサーバーの設定ミス、キャッシュの問題、またはネットワーク経路上のDNS関連の問題が考えられます。
- hostsファイル (
/etc/hosts
on Linux/macOS,%SystemRoot%\System32\drivers\etc\hosts
on Windows) に間違ったエントリがないかも確認します。
4.2. Upstreamサーバー自体の問題
Upstreamサーバーが正常に稼働していない場合、プロキシからのヘルスチェックに応答できず、unhealthyと判断されます。
- サーバーの稼働状況:
- Upstreamサーバーがそもそも起動しているか確認します。物理サーバーであれば電源が入っているか、仮想マシンであればハイパーバイザー上で起動しているか確認します。
- 対象サービスの稼働状況:
- Upstreamサーバー上で、MATLABがアクセスしようとしているサービス(例: ライセンスマネージャー、Webサーバーソフトウェア如 Nginx/Apache、特定のJava/Pythonアプリケーションなど)が実行されているか確認します。
- Windowsであればタスクマネージャーやサービス一覧、Linuxであれば
systemctl status <service_name>
やps aux | grep <service_name>
コマンドなどを使用します。 - サービスが停止している場合は、起動を試みます。起動に失敗する場合は、そのサービス自体のログを確認して原因を特定する必要があります。
- サーバーのリソース(CPU, メモリ, ディスク):
- Upstreamサーバーが、CPU使用率100%に近い状態、メモリ不足によるスワッピングの多発、ディスク容量の枯渇といったリソース不足に陥っている場合、サービスが応答不能になり、ヘルスチェックに失敗する可能性があります。
- サーバーのシステムリソース使用状況を監視ツールやOSのコマンド (
top
,htop
,free
,df
on Linux/macOS; タスクマネージャー, リソースモニター on Windows) で確認します。
- サーバー上のサービスログの確認:
- Upstreamサーバー上で稼働している対象サービス自体のログファイルを確認します。
- 例えば、Webサービスであればアプリケーションログ、ライセンスマネージャーであればベンダーデーモンのログなどです。
- エラー発生時刻前後のログに、サービスクラッシュ、エラーメッセージ、異常終了などの兆候がないか調べます。これにより、Upstreamサービス自体の内部的な問題を特定できる場合があります。
4.3. プロキシ/ロードバランサーの設定問題
プロキシやロードバランサー自体の設定に誤りがある場合、たとえUpstreamサーバーが正常でも、ヘルスチェックに失敗したり、リクエストを正しく転送できなかったりします。
- プロキシサーバーの確認:
- どのプロキシサーバーを経由しているのかを特定します。これはネットワーク構成によって異なりますが、MATLABクライアントの設定(プロキシ設定)や、アクセス先のURLから推測できる場合があります。社内システムであればIT部門に確認するのが確実です。
-
プロキシ設定ファイルの確認 (Nginx, Apache, Traefik, HAProxyなど)
- プロキシサーバー上で、その設定ファイルを確認します。ファイルパスはプロキシソフトウェアやOSによって異なります。(例: Nginx:
/etc/nginx/nginx.conf
やconf.d/*.conf
, Apache:/etc/httpd/conf/httpd.conf
やconf.d/*.conf
, Traefik:traefik.yml
/traefik.toml
, HAProxy:/etc/haproxy/haproxy.cfg
) - Upstream定義の確認: 設定ファイル内に、MATLABがアクセスしようとしているサービスに対応するUpstreamサーバープール(Nginxの
upstream
ブロック、ApacheのProxyPass
やProxyPassReverse
で指定されるターゲットURL、HAProxyのbackend
セクションなど)の定義を確認します。ここにリストされているUpstreamサーバーのIPアドレスやポート番号が正しいか、Typoがないか確認します。 - ヘルスチェック設定の確認: プロキシがUpstreamサーバーに対してどのようなヘルスチェックを実行しているか、その設定を確認します。チェックの方法(TCP接続、HTTP GET/HEADリクエストなど)、チェックの間隔、タイムアウト時間、失敗と判定する回数などが定義されています。これらの設定が適切でない場合(例: チェック間隔が長すぎる、タイムアウトが短すぎる、間違ったパスをチェックしている)、Upstreamサーバーは正常でもunhealthyと誤判定される可能性があります。設定によっては、ヘルスチェックが完全に無効になっている場合もありますが、その場合は通常このエラーではなく別のエラー(例: connection refused, timeoutなど)になることが多いです。
- タイムアウト設定の確認: プロキシがUpstreamサーバーからの応答を待つタイムアウト設定(Nginxの
proxy_read_timeout
,proxy_connect_timeout
など)が短すぎる場合、Upstreamサーバーが少し応答に時間がかかっただけでタイムアウトし、プロキシがエラーを返す原因となります。 - これらの設定の確認と変更には、プロキシサーバーへの管理者権限が必要です。設定を変更した場合は、プロキシサービスをリロードまたは再起動する必要があります。設定ファイルの構文エラーにも注意してください。
- プロキシサーバー上で、その設定ファイルを確認します。ファイルパスはプロキシソフトウェアやOSによって異なります。(例: Nginx:
-
プロキシサーバーのログ確認:
- プロキシサーバー自体のログファイル(Nginxの
error.log
, Apacheのerror_log
など)は、この問題の診断において最も重要な情報源です。 - エラーが発生した正確なタイムスタンプに基づいて、ログファイルを確認します。プロキシがUpstreamサーバーに接続しようとして失敗した、ヘルスチェックが失敗した、タイムアウトが発生したといった記録が残されているはずです。
- ログに記録されているUpstreamサーバーのIPアドレスやポート番号、エラーコード、エラーメッセージなどを分析することで、問題の具体的な場所(どのUpstreamサーバーか、どのような理由で失敗したか)を特定できます。
- ログレベルを一時的に上げて、より詳細な情報を出力させることも有効な手段です(ただし、完了後は元に戻すのを忘れないように)。
- プロキシサーバー自体のログファイル(Nginxの
4.4. MATLAB固有のシナリオにおける追加の確認事項
これまでの一般的な原因を踏まえつつ、MATLABの特定のシナリオにおける追加の確認事項を挙げます。
- ライセンスサーバーの場合:
- MATLABが使用するライセンスファイル (
license.dat
または環境変数LM_LICENSE_FILE
で指定されるファイル) の内容を確認します。ライセンスサーバーのホスト名とポート番号が正しく記述されているか確認します。通常、SERVER <hostname> <HostID> <port>
の形式です。 - MATLABのライセンスマネージャーソフトウェア(通常FlexNet)のバージョンが、ライセンスファイルやライセンスサーバーのバージョンと互換性があるか確認します。
- ライセンスサーバー上で、
lmgrd
(ライセンスマネージャーデーモン) およびMLM
(MathWorks Vendor Daemon) プロセスが実行されているか確認します。 - ライセンスサーバーのログファイル (
lmgrd.log
など) に、ライセンスの貸し出しに関するエラーや、デーモン自体のクラッシュ、ポート関連のエラーなどが記録されていないか確認します。 - もしライセンスサーバーが社内プロキシ/ロードバランサーの背後にある場合、そのプロキシ設定がライセンスポート(通常27000番台やライセンスファイルで指定されたポート)を正しくUpstreamサーバーに転送しているか、ヘルスチェックが適切に行われているかを確認します(これは前述のプロキシ設定確認に含まれます)。
- MATLABコマンドウィンドウで
license('checkout', 'MATLAB')
のようなコマンドを実行してみて、詳細なエラーメッセージが得られないか試すことも有効です。
- MATLABが使用するライセンスファイル (
- MathWorksオンラインサービスの場合:
- このシナリオで「no healthy upstream」エラーに遭遇した場合、多くの場合問題はMathWorks側のインフラストラクチャか、あなたがいる場所からMathWorksまでのインターネット経路にあります。
- まず、MathWorksのウェブサイト(mathworks.com)にウェブブラウザからアクセスできるか確認します。特定のサービス(例: MathWorksアカウントページ、ドキュメンテーションサイト)にもアクセスできるか確認します。
- 他のユーザーも同じ問題に遭遇しているか確認します。もし広範囲で発生している場合は、MathWorks側での一時的なサービス障害の可能性があります。MathWorksのサポートサイトやコミュニティで告知が出ていないか確認します。
- あなたのネットワーク環境(企業ネットワーク、自宅ネットワークなど)から外部インターネットへの接続に問題がないか、プロキシサーバー(ユーザー側のプロキシ設定)を経由している場合はそのプロキシが正常か確認します。MATLABのProxy Preferences (
webpreferences('AutoDetectProxy')
など) も確認できますが、「no healthy upstream」エラーは通常、MATLABが設定しているクライアント側プロキシよりも、アクセス先のサービスの手前にあるリバースプロキシで発生する可能性が高いです。 - Tracerouteを使用して、mathworks.com までの経路を確認し、途中で通信が途切れていないか確認します。
- このケースでは、ユーザー側でUpstreamサーバーやプロキシ設定を変更することはできません。問題が解決しない場合は、詳細な状況(エラーメッセージ、発生時刻、MATLABバージョン、ネットワーク環境)を添えてMathWorksサポートに連絡するのが最善です。
- カスタムアプリケーション/APIの場合:
- MATLABコードが呼び出している正確なURLを確認します。
- そのURLに、ウェブブラウザや
curl
コマンドなど、MATLAB以外のクライアントからアクセスできるか確認します。アクセスできない場合、問題はMATLABではなく、そのウェブサービス自体、あるいはその手前のプロキシにあります。 - ウェブサービスが稼働しているUpstreamサーバーと、その手前のプロキシサーバーのログを確認します。APIエンドポイントへのリクエストがUpstreamサーバーに到達しているか、エラーが返されていないかなどを確認します。
- プロキシ設定で、当該APIエンドポイントへのリクエストが正しいUpstreamサーバープールに転送されているか、パスの書き換え(URL Rewriting)などが正しく設定されているか確認します。
- MATLABの
weboptions
で設定されているオプション(タイムアウト、ヘッダー、プロキシ設定など)が、ターゲットAPIの要求と矛盾していないか確認します。
- PCT環境の場合:
- クラスターマネージャーやワーカーノードが、MATLABクライアントや他の必要なサービス(共有ストレージ、データベースなど)と通信できるか確認します。
- クラスターマネージャーやワーカーノードがプロキシ経由で通信している場合、そのプロキシ設定が正しく、Upstreamとなるサービス(例えば、MATLAB Job Schedulerのポート)への接続が許可されているか確認します。
- クラスターマネージャーやワーカーノードのログファイルを確認し、通信に関するエラーやサービス起動時の問題がないか調べます。
- ファイアウォール設定が、クライアント、クラスターマネージャー、ワーカー間の必要なポートを開放しているか確認します。PCTが使用するポート範囲は設定可能です。
4.5. システムレベルの問題
稀ではありますが、MATLABを実行しているクライアントOS自体のネットワークスタックの問題や、リソース枯渇が間接的に通信エラーを引き起こす可能性もゼロではありません。
- OSのネットワークスタック: OSのネットワーク関連サービス(DNSクライアント、TCP/IPスタックなど)に一時的な問題が発生している場合、ネットワーク通信全般が不安定になることがあります。OSの再起動で解決することがあります。
- ローカルリソースの枯渇: MATLABが大量のメモリやCPUを消費しており、OSがネットワーク通信に必要なリソース(例: ソケットバッファ)を確保できない、あるいはMATLAB以外のネットワーク関連プロセス(例: ファイアウォールサービス、VPNクライアント)がリソース不足で正常に機能しない、といった状況も考えられます。タスクマネージャーやリソースモニターでシステムリソースの使用状況を確認します。
5. 高度なトラブルシューティングツール
上記に加え、より詳細なネットワーク問題を診断するために役立つツールがあります。
- cURLコマンド:
- HTTP/HTTPSサービスへのリクエストを詳細に制御し、送信できます。プロキシを経由した場合と直接アクセスした場合の両方で、Upstreamサーバーの応答を確認するのに非常に強力です。
- 例:プロキシを経由してテストURLにアクセス
bash
curl -v -x http://<プロキシホスト>:<プロキシポート> http://<ターゲットURL>
-v
オプションで詳細な通信情報(ヘッダー、SSLハンドシェイクなど)が表示されます。 - 例:Upstreamサーバーに直接アクセス (ヘルスチェックURLなど)
bash
curl -v http://<UpstreamサーバーIP>:<ポート>/<ヘルスチェックパス> - これにより、プロキシとUpstreamサーバー間の通信が成功するか、特定のエラー(例: 404 Not Found, 500 Internal Server Error, Connection Refused)が返されるかを確認できます。
- ネットワークパケットキャプチャ (tcpdump, Wireshark):
- ネットワークインターフェースを通過する実際のパケットをキャプチャし、分析します。
- プロキシサーバー上やUpstreamサーバー上で実行することで、プロキシとUpstreamサーバー間の通信が実際に行われているか、パケットが正しく送受信されているか、途中でどのようなエラー(例: TCP RSTパケット)が発生しているかなどを詳細に調べることができます。
- これは非常に高度な診断方法であり、ネットワークプロトコルに関する知識が必要ですが、他の方法では特定できない根深い問題を特定するのに役立ちます。
- Netstatコマンド:
- 現在アクティブなネットワーク接続、リスニングポート、ルーティングテーブル、ネットワークインターフェースの統計情報などを表示します。
- Upstreamサーバー上で、対象のサービスが期待されるポートで待ち受けているか確認できます。
bash
netstat -tulnp # Linux: TCP/UDPポートをLISTENしているプロセス表示 (root権限必要)
netstat -ano # Windows: アクティブな接続とリスニングポート、関連プロセスID表示 - プロキシサーバー上で、Upstreamサーバーへの接続が確立されているか、どのような状態になっているかを確認することもできます。
- Lsofコマンド (Linux/macOS):
- 開いているファイルを表示するコマンドですが、ネットワーク接続もファイルとして扱われます。特定のプロセスが開いているネットワークポートや接続先を確認できます。
bash
lsof -i :<ポート番号> # 指定ポートを使用しているプロセス
lsof -i tcp:<UpstreamサーバーホストまたはIP>:<ポート番号> # 特定のTCP接続 - これは、Upstreamサーバー上で特定のサービスが正しいポートでリッスンしているか、あるいはプロキシサーバー上でUpstreamへの接続が確立されているかを確認するのに役立ちます。
- 開いているファイルを表示するコマンドですが、ネットワーク接続もファイルとして扱われます。特定のプロセスが開いているネットワークポートや接続先を確認できます。
これらの高度なツールは、特に複雑なネットワーク環境や、プロキシ・Upstreamサーバー間の通信の詳細を調査する必要がある場合に役立ちます。
6. エラーの再発を防ぐための対策
一度解決しても、根本原因が解消されていないとエラーは再発します。「no healthy upstream」エラーの再発を防ぐためには、以下のような対策が有効です。
- ネットワークインフラストラクチャの監視: プロキシサーバー、Upstreamサーバー、それらを結ぶネットワーク経路上の機器(ルーター、スイッチ、ファイアウォール)に対して、可用性やパフォーマンスを監視するシステムを導入します。Ping応答、ポートの開放状況、CPU/メモリ使用率などを監視し、閾値を超えたらアラートを上げるように設定します。
- Upstreamサービスの冗長化: 可能な場合、Upstreamサーバーを複数台用意し、ロードバランサーの背後に配置します。これにより、1台のサーバーに障害が発生しても、他の正常なサーバーがリクエストを処理できるようになり、サービスの中断を防げます。
- 適切なヘルスチェックとアラート設定: プロキシ/ロードバランサーのヘルスチェック設定を適切に行います。Upstreamサービスの状態を正確に反映するようなチェック(例: 単なるTCP接続だけでなく、サービスの機能を確認するURLへのHTTPリクエスト)を設定し、ヘルスチェックが失敗した場合に迅速に担当者へアラートが飛ぶように設定します。これにより、Upstreamサーバーがunhealthyになったことを早期に検知し、ユーザーがエラーに遭遇する前に対応できます。
- 設定変更管理の徹底: プロキシサーバー、Upstreamサーバー、および関連するネットワーク機器の設定変更は、計画的に行い、変更内容を記録します。特にファイアウォールルールの変更や、プロキシのUpstream定義の変更は慎重に行い、変更後の影響を確認する手順を含めます。
- 十分なリソース確保: Upstreamサーバーには、予想される負荷を処理するのに十分なCPU、メモリ、ディスク、ネットワーク帯域幅を確保します。リソース不足が原因でサービスが不安定になるのを防ぎます。
7. 専門家やサポートへの相談
ここまでに説明した手順を試しても問題が解決しない場合や、プロキシサーバーやUpstreamサーバーへのアクセス権限がない場合は、専門家の助けを借りる必要があります。
- MathWorksサポートへの連絡:
- エラーがMathWorksのオンラインサービス(アドオンエクスプローラー、ドキュメンテーションなど)へのアクセス時に発生する場合。
- ライセンス認証に関する問題で、ライセンスサーバーがMathWorks Cloudでホストされている場合や、MathWorks提供のライセンスマネージャー(FlexNet)に関する問題の場合。
- 提供する情報:正確なエラーメッセージ、エラーが発生した日時、MATLABのバージョン、使用しているOS、エラー発生時の具体的な操作、これまでに試したトラブルシューティング手順(ネットワーク設定、ファイアウォール設定など)。可能であれば、エラー発生時のスクリーンショットや、MATLABのDiagnostic Report(
ver
コマンドの結果、ライセンス情報など)も添付します。
- 社内IT部門への連絡:
- エラーが社内のライセンスサーバー、カスタムアプリケーション、あるいはPCT環境など、組織内で管理されているインフラストラクチャへのアクセス時に発生する場合。
- プロキシサーバーやUpstreamサーバー、社内ネットワークのファイアウォールなどに関する調査や設定変更が必要な場合。
- 提供する情報:MATLABのバージョン、エラーメッセージ、発生日時、どのようなサービスにアクセスしようとしていたか、問題が発生しているユーザー名/コンピューター名、これまでに自分で確認したネットワーク関連の情報(Pingの結果、Telnetの結果など)。アクセス先のUpstreamサーバーのホスト名やポート番号が分かれば伝えます。
どちらの場合も、問題を正確に、かつ迅速に解決するためには、状況を詳細かつ正確に伝えることが非常に重要です。
8. まとめ
「no healthy upstream」エラーは、MATLAB自体に問題があるのではなく、MATLABがアクセスしようとしている外部サービスが、その手前にあるプロキシやロードバランサーから「正常でない」と判断されている状況を示しています。
このエラーの原因は、ネットワーク接続性の問題、Upstreamサーバー自体の不調、またはプロキシ/ロードバランサーの設定ミスに大別されます。MATLABの利用シーンでは、特にネットワークライセンスサーバーへのアクセス時や、カスタムのウェブサービスとの連携時に遭遇する可能性があります。
エラーを解決するための鍵は、体系的なアプローチ(特定、分離、診断、解決、検証)を取り、問題が クライアント、ネットワーク経路、プロキシ、Upstreamサーバーのどこにあるのか を切り分けることです。特に、プロキシサーバーおよびUpstreamサーバーの ログファイル は、原因を特定するための最も重要な情報源となります。
Ping, Telnet, cURL といった基本的なネットワークツールは、接続性を診断する上で非常に役立ちます。ファイアウォール設定やDNS設定も重要な確認ポイントです。より複雑なケースでは、パケットキャプチャツールが役立つこともあります。
自力での解決が困難な場合や、必要なアクセス権限がない場合は、MathWorksサポートまたは社内IT部門に速やかに相談することが、問題を解決するための最も効率的な方法です。
この詳細な解説が、「no healthy upstream」エラーに直面したMATLABユーザーにとって、問題解決のための道標となることを願っています。