ライセンスエラー
ライセンスエラー
先生、「License not available」で起動しません。
理論と物理
ライセンス管理の基本概念
ライセンスエラーって、ソフトが起動しない時に出る「ライセンスがありません」みたいなメッセージのことですか?
それも一つのケースですが、CAEではもっと複雑です。例えば、AnsysやAbaqusは「トークンベース」や「フローティングライセンス」という仕組みを使っています。ライセンスサーバーが持つ「トークン数」が、同時に使えるソルバー(例えばAnsys Mechanical APDL)の数を決めます。もしトークンが10個で、11人目が起動しようとすると、エラーになります。
トークン数はどう決まるんですか?HPCで1000コア使う計算と、ノートPCで1コアの計算では、消費するトークン数が同じなんですか?
いい着眼点です。実は、多くのベンダーは「パーティショニング」という考え方を採用しています。例えば、Ansys HPCパックでは、使用するソルバーコア数に応じてトークン消費量が変わります。基本は1コアあたり1トークンですが、128コア以上を使うと、消費トークン数が頭打ちになる「キャップ」がかかる契約もあります。一方、Abaqusの場合は「SIMULIA Execution Engine」のライセンスが別途必要で、これが並列計算の可否を制御します。
ライセンスファイルの中身は、単に「使っていいよ」という情報が書いてあるだけなんですか?
中身は結構複雑です。FlexNet Publisher(旧FLEXlm)という仕組みが一般的で、ライセンスファイル(.lic)には、SERVER行、VENDOR行、そしてFEATURE行やINCREMENT行があります。例えば、INCREMENT ANSYS_ADMIN ansyslmd 1.000 permanent 10 SIGN="XXXX" という行は、「Ansys_ADMIN」という機能を10トークン、永続的に提供する、という意味です。この「SIGN」の部分は暗号化された署名で、改ざんを防ぎます。
数値解法と実装
ライセンスチェックのアルゴリズム
ソフトは起動時に、どうやってライセンスサーバーに「使ってもいいですか?」と聞いているんですか?
クライアント(Ansys Workbenchなど)は、環境変数(LM_LICENSE_FILEやANSYSLMD_LICENSE_FILE)で指定されたサーバー(例:27000@license-server.univ.ac.jp)のポート27000にTCP/IPで接続を試みます。サーバー上で動く「ライセンスマネージャーデーモン(lmgrd)」がリクエストを受け、必要なFEATUREの空きトークン数をチェックします。この通信プロトコルは非公開ですが、Wiresharkでパケットをキャプチャすると、要求と応答の流れを観測できます。
バッチジョブで夜間に計算を回す時、ジョブがキューに入った時点と、実際に計算が始まる数時間後では、ライセンスの確保タイミングはどうなるんですか?
これが「ライセンス予約」の問題です。PBS ProやSlurmのようなジョブスケジューラでは、スクリプト内でansys195 -liccheckのようなオプションで起動前チェックだけ行い、実際のライセンス取得は計算実行直後に行うのが一般的です。もしキューイング時にライセンスを確保してしまうと、他の人が使えなくなり、リソース効率が悪化します。Ansysの「Shared Memory Parallel (SMP)」と「Distributed Memory Parallel (DMP)」でも、ライセンスチェックのタイミングが微妙に異なります。
ネットワークが一瞬切断されたら、ライセンスはどうなりますか?クライアントは5分間隔で「生きてます」という信号を送っていると聞きました。
その通りです。これは「ハートビート」や「ライセンスリース」と呼ばれます。クライアントは定期的(デフォルトで3分間隔)にサーバーに生存信号を送ります。サーバーは、例えば5分間信号が来ないクライアントのライセンスを「デッド」と判断し、トークンを回収(リリース)します。このタイムアウト時間は、サーバー側の設定ファイル(オプションファイル)でTIMEOUTALL 3600(秒)のように変更可能です。ネットワークが不安定な環境では、この値を大きく設定することがあります。
実践ガイド
エラー発生時のチェックリスト
「Failed to connect to license server」というエラーが出ました。まず何を確認すべきですか?
システマティックに確認しましょう。まず、クライアントPCからライセンスサーバーへのネットワーク接続をテストします。コマンドプロンプトでping license-server(ホスト名)で応答があるか。次に、ライセンスサーバーのポート27000が開いているかtelnet license-server 27000で確認。これで失敗するなら、サーバーマシン上のファイアウォール設定(Windows Defenderファイアウォールやiptables)を疑います。サーバー側でnetstat -an | findstr :27000(Windows)やss -ltn | grep 27000(Linux)でリスニング状態を確認します。
ネットワークは繋がっているようです。「No such feature exists」というエラーが出る場合は?
これは、要求した機能(FEATURE)がライセンスファイルに定義されていないか、名前が間違っているケースです。例えば、Ansys 2023R1で「ANSYS」というFEATUREを要求するのに、ライセンスファイルが古く「ANSYS」の定義がないとダメです。サーバー上でlmstat -a -c @license-serverを実行し、利用可能なFEATUREの一覧を表示させ、必要なもの(例:ANSYS、ANSHPC_PACK)が「count:」の数とともに表示されているか確認します。クライアントのバージョンとライセンスファイルのバージョンの互換性も要チェックです。
「License server does not support this version」と言われました。互換性のルールは?
FlexNetの一般的なルールとして、ライセンスファイルのバージョンは「クライアントソフトウェアのバージョン以上」である必要があります。Ansysの場合、2023R1のクライアントは、2023R1以降の日付が入ったライセンスファイルが必要です。逆に、古いクライアント(2021R2)が新しいライセンスファイル(2023R1)を使うことは可能な場合が多いです。ライセンスファイルの日付は、ベンダーから提供される「リリースキー」によって更新されます。このエラーは、ライセンスファイルの更新忘れでよく発生します。
ライセンスマネージャーのログはどこを見ればいいですか?
デフォルトのログファイルのパスは重要です。WindowsではC:\Program Files\ANSYS Inc\Shared Files\Licensing\logs\debug.log、Linuxでは/usr/ansys_inc/shared_files/licensing/logs/debug.logです。ログファイルは肥大化するので、定期的に削除またはローテーションする必要があります。ログの出力レベルは、ライセンスマネージャーの起動オプション(-log logfile_path)やオプションファイル内のDEBUGLOG行で制御できます。エラー時には、このログの末尾数十行に「OUT/IN:」で始まる通信記録や「DENIED」というキーワードが出力されているはずです。
ソフトウェア比較
主要CAEベンダーのライセンス体系
Ansys、Abaqus、COMSOLで、ライセンスの仕組みは大きく違うんですか?
はい、アーキテクチャが異なります。AnsysとAbaqus(Dassault Systèmes)は前述のFlexNetベースのフローティングライセンスが主流です。一方、COMSOLは「COMSOL License Manager」という独自のマネージャーを使用しています。大きな違いは、COMSOLが「ノードロック」と「フローティング」を明確に分けておらず、1つのライセンスファイルでどちらのモードでも動作可能な点です。また、Ansysは「HPCパック」で並列計算能力を販売しますが、COMSOLはコア数制限がより緩やかで、ライセンス1つで利用可能な最大コア数が決まっています。
無償の学生版(Ansys Student)や研究機関向け割引ライセンスは、仕組みが違いますか?
大きく異なります。Ansys Studentは完全なノードロック型で、ライセンスサーバーを必要とせず、マシンのハードウェアIDに紐づけてアクティベーションします。問題数やメッシュ数に制限(例えば、構造解析で32,000ノード以下)があります。研究機関向けの「Ansys Academic」は、フルバージョンと同等ですが、ライセンスファイルにACADEMICというフラグが入り、商用利用が禁止されます。これらのライセンスで作成した結果ファイルのヘッダーには「Academic」と記録され、商用ライセンスでは開けないことがあります。
オープンソースソルバー(CalculiX, OpenFOAM)にはライセンスエラーはないんですよね?
商用ライセンスマネージャーに起因するエラーはありませんが、別の「ライセンス」問題があります。例えば、OpenFOAMはGPL v3ライセンスです。これを用いて開発したカスタムソルバーを社内で使う分には問題ありませんが、それを外部に配布(販売を含む)する場合、ソースコードの開示が求められる場合があります。CalculiXはGPLライセンスの一部(ライブラリ)と独自ライセンスが混在しています。つまり、「法的なライセンス遵守」という別次元のエラーリスクは存在します。
トラブルシューティング
具体的なエラーメッセージと対策
「All licenses are in use」なのに、lmstatで見ると空きトークンがあるように見えます。なぜですか?
これは「ライセンスの残留」が最も疑われます。クライアントがクラッシュしたり、ネットワーク切断でライセンスが正常にリリースされず、サーバー側でトークンが「使用中」のまま固まっている状態です。対策は、まずサーバーでlmstat -aを実行し、使用しているユーザーとホストを特定します。その後、管理者がlmremoveコマンドを使って強制解放します。例:lmremove ANSYS 。ライセンスマネージャー自体を再起動(lmdown -c @license-server -forceしてからlmgrd再起動)するのが確実な場合もあります。
「Invalid host.」エラーが出ます。ホスト名が変わった時などですか?
その通りです。ライセンスファイルの先頭にあるSERVER 行のhostnameとip addr show、Windowsではhostnameとipconfig /allで物理アドレスを確認し、ライセンスファイルの情報と照合します。
「Clock skew detected」というエラーは?
これはライセンスサーバーとクライアントマシンのシステム時刻が大きくずれている時に出るエラーです。FlexNetライセンスマネージャーは、ライセンスの期限切れチェックなどにシステム時刻を利用するため、通常は数分以上のずれを許容しません。対策は、両マシンでNTP(Network Time Protocol)サービスを有効にし、同じタイムサーバー(例:ntp.nict.jp)と同期させることです。特に仮想マシン(VMware, VirtualBox)は、ホストとゲストの時刻同期設定がオフになっていると、すぐに時刻がずれます。
ライセンスサーバーを冗長化(フェイルオーバー)する設定は可能ですか?
可能です。FlexNetでは「ライセンスサーバートリプル」という仕組みがあります。環境変数LM_LICENSE_FILEに、複数のサーバーをセミコロンで区切って指定します。例:27000@server1;27000@server2;27000@server3。クライアントは最初のserver1に接続を試み、失敗した場合に自動的にserver2、server3へとフェイルオーバーします。ただし、これはあくまでサーバー障害に対する備えであり、ライセンストークン自体を複数サーバーで共有する「ライセンスのレプリケーション」とは別物です。レプリケーションには、より高価な「FlexNet Publisher高可用性オプション」が必要です。
関連トピック
なった
詳しく
報告