web-dev-qa-db-ja.com

ubuntu 18.04で終了する前にプロセスがハングする

Ubuntu 18.04でABAQUS 6.14(およびABAQUS 2018)を使用する場合、standardプロセス( 暗黙 分析の実行時に開始されるプロセス)の終了を除いて、すべて正常に動作するようです。これに精通していなくても構いません)。

分析は、ログファイル(.staファイル、abaqusに精通している人向け)でメッセージTHE ANALYSIS HAS COMPLETED SUCCESSFULLYでも確認できるように、実際に機能します。出力データベースには分析結果が含まれます。ただし、分析の完了後、プロセスstandardは、0%CPUを使用し、同じ量の_を保持して、sleeping状態のままになります。RAM実行中のとき。

straceから:

[pid 23191] close(8)                    = 0
[pid 23185] <... select resumed> )      = 0 (Timeout)
[pid 23185] select(0, NULL, NULL, NULL, {tv_sec=0, tv_usec=50000} <unfinished ...>
[pid 23193] <... select resumed> )      = 0 (Timeout)
[pid 23193] futex(0x7f3acd917db0, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
[pid 23191] futex(0x7f3acd917db0, FUTEX_WAIT_PRIVATE, 2, NULL <unfinished ...>
[pid 23193] <... futex resumed> )       = 0
[pid 23191] <... futex resumed> )       = -1 EAGAIN (Resource temporarily unavailable)
[pid 23191] futex(0x7f3acd917db0, FUTEX_WAKE_PRIVATE, 1) = 0
[pid 23193] select(7, [4 5 6], NULL, NULL, {tv_sec=0, tv_usec=20000} <unfinished ...>
[pid 23191] munmap(0x7f3ab130b000, 327680) = 0
[pid 23191] munmap(0x7f3ab136b000, 1114112) = 0
[pid 23191] munmap(0x7f3ab16db000, 1114112) = 0
[pid 23191] munmap(0x7f3ab0fbb000, 1114112) = 0
[pid 23191] munmap(0x7f3ab0ddb000, 1114112) = 0
[pid 23191] munmap(0x7f3ab0a0b000, 1114112) = 0
[pid 23191] munmap(0x7f3ab03fb000, 1114112) = 0
[pid 23191] munmap(0x7f3ab050b000, 1114112) = 0
[pid 23191] munmap(0x7f3ab00cb000, 1114112) = 0
[pid 23191] munmap(0x7f3ab02eb000, 1114112) = 0
[pid 23191] munmap(0x7f3ab14eb000, 1114112) = 0
[pid 23191] futex(0x7f3ab8a5dd44, FUTEX_WAIT_PRIVATE, 8, NULL) = -1 EAGAIN (Resource temporarily unavailable)
[pid 23191] futex(0x7f3ab8a5dd44, FUTEX_WAIT_PRIVATE, 12, NULL <unfinished ...>
[pid 23193] <... select resumed> )      = 0 (Timeout)
[pid 23193] select(7, [4 5 6], NULL, NULL, {tv_sec=0, tv_usec=20000}) = 0 (Timeout)
[pid 23193] select(7, [4 5 6], NULL, NULL, {tv_sec=0, tv_usec=20000} <unfinished ...>
[pid 23185] <... select resumed> )      = 0 (Timeout)
[pid 23185] select(10, [5 6 8 9], NULL, NULL, {tv_sec=0, tv_usec=20000} <unfinished ...>
[pid 23193] <... select resumed> )      = 0 (Timeout)
[pid 23193] select(7, [4 5 6], NULL, NULL, {tv_sec=0, tv_usec=20000} <unfinished ...>
[pid 23185] <... select resumed> )      = 0 (Timeout)
[pid 23185] select(0, NULL, NULL, NULL, {tv_sec=0, tv_usec=50000} <unfinished ...>
[pid 23193] <... select resumed> )      = 0 (Timeout)
[pid 23193] select(7, [4 5 6], NULL, NULL, {tv_sec=0, tv_usec=20000}) = 0 (Timeout)
[pid 23193] select(7, [4 5 6], NULL, NULL, {tv_sec=0, tv_usec=20000} <unfinished ...>
[pid 23185] <... select resumed> )      = 0 (Timeout)
[pid 23185] select(10, [5 6 8 9], NULL, NULL, {tv_sec=0, tv_usec=20000} <unfinished ...>
[pid 23193] <... select resumed> )      = 0 (Timeout)
[pid 23193] select(7, [4 5 6], NULL, NULL, {tv_sec=0, tv_usec=20000} <unfinished ...>
[pid 23185] <... select resumed> )      = 0 (Timeout)
[pid 23185] select(0, NULL, NULL, NULL, {tv_sec=0, tv_usec=50000} <unfinished ...>
[pid 23193] <... select resumed> )      = 0 (Timeout)
[pid 23193] select(7, [4 5 6], NULL, NULL, {tv_sec=0, tv_usec=20000}) = 0 (Timeout)
[pid 23193] select(7, [4 5 6], NULL, NULL, {tv_sec=0, tv_usec=20000}) = 0 (Timeout)
[pid 23193] select(7, [4 5 6], NULL, NULL, {tv_sec=0, tv_usec=20000} <unfinished ...>

2つのプロセスがデッドロック状態にあるかのように。また、コマンド

pid -p 7002

そして

pid -p 7010

空の出力を行います。ディレクトリ/proc/7002および/proc/7010は存在しません。

実行するabaqus関連のプロセスは

david  6995  0.0  0.1 295428 51388 pts/0    S    17:00   0:00 /opt/abaqus/6.14-1/code/bin/python /opt/abaqus/6.14-1
david  6998  0.0  0.2 368744 97948 pts/0    S    17:00   0:00 /opt/abaqus/6.14-1/code/bin/python std_inst.com
david  7001  0.1  0.0 122076 20096 pts/0    Sl   17:00   0:03 /opt/abaqus/6.14-1/code/bin/eliT_DriverLM -job std_in
david  7008  0.4  0.5 735812 185364 pts/0   Sl   17:00   0:07 /opt/abaqus/6.14-1/code/bin/standard -standard -acade

Ubuntu 16.04では、まったく同じバージョンがチャームのように機能します。ここで、ubuntu 16.04と同じstrace(私の18.04と同じカーネルバージョン、つまり4.15.0-29):

3890  close(8)                          = 0
3892  <... select resumed> )            = 0 (Timeout)
3892  futex(0x7f29e43e1db0, FUTEX_WAIT_PRIVATE, 2, NULL <unfinished ...>
3890  futex(0x7f29e43e1db0, FUTEX_WAKE_PRIVATE, 1) = 0
3892  <... futex resumed> )             = -1 EAGAIN (Resource temporarily unavailable)
3892  futex(0x7f29e43e1db0, FUTEX_WAIT_PRIVATE, 2, NULL <unfinished ...>
3890  futex(0x7f29e43e1db0, FUTEX_WAKE_PRIVATE, 1) = 0
3892  <... futex resumed> )             = -1 EAGAIN (Resource temporarily unavailable)
3892  futex(0x7f29e43e1db0, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
3890  futex(0x7f29e43e1db0, FUTEX_WAIT_PRIVATE, 2, NULL <unfinished ...>
3892  <... futex resumed> )             = 0
3890  <... futex resumed> )             = -1 EAGAIN (Resource temporarily unavailable)
3890  futex(0x7f29e43e1db0, FUTEX_WAKE_PRIVATE, 1) = 0
3892  select(7, [4 5 6], NULL, NULL, {0, 20000} <unfinished ...>
3890  munmap(0x7f29c7adb000, 327680)    = 0
3890  munmap(0x7f29c7b3b000, 1114112)   = 0
3890  munmap(0x7f29c7eab000, 1114112)   = 0
3890  munmap(0x7f29c778b000, 1114112)   = 0
3890  munmap(0x7f29c75ab000, 1114112)   = 0
3890  munmap(0x7f29c71db000, 1114112)   = 0
3890  munmap(0x7f29c6bcb000, 1114112)   = 0
3890  munmap(0x7f29c6cdb000, 1114112)   = 0
3890  munmap(0x7f29c689b000, 1114112)   = 0
3890  munmap(0x7f29c6abb000, 1114112)   = 0
3890  munmap(0x7f29c7cbb000, 1114112)   = 0
3890  exit_group(0)                     = ?
3891  +++ exited with 0 +++
3893  +++ exited with 0 +++
3892  +++ exited with 0 +++
3890  +++ exited with 0 +++
3880  <... wait4 resumed> [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 3890
3880  --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=3890, si_uid=1000, si_status=0, si_utime=107, si_stime=7} ---

誰かがこれを解決する良いアイデアを持っていますか?または、どの方向でさらに調査する必要があります。

3
David

ここでウィル・ファーナスが提案した特異性コンテナを使用して、デッドロックを回避するソリューションを見つけました: http://learningpatterns.me/posts-output/2018-01-30-abaqus-singularity/

そもそも少し複雑ですが、適切にセットアップすると魅力のように機能します。ホストシステム(Manjaro/Arch Linux)上のabaqusのエイリアスを変更して、特異性コンテナー内のインストールを指し、コンテナー環境でコマンドを実行するようにしました。ただし、インテルFortranコンパイラーが必要なため、基本的なCentOS 7コンテナーを生成し、その後、Will Furnassが提案する.defスクリプトを使用するのではなく、コンパイラーとabaqus(この場合はv2019)をインストールするように変更しました。

セットアップには少し時間がかかりますが、今では特異性を実行するシステムで作業できるコンテナイメージがあります。

編集:作業中のインストールを最新のLinuxシステムにコピーすることもテストしました(そしてabaqusの新規インストールを回避しました)。これは私のケースでは機能しなかったことを確認できます(CentOS 7インストールをManajaroシステムにコピーしました)。

1
A. Bernath

Linux mint 19でもこの問題に遭遇しました。 Linux Mint 19にインストールされたAbaqus 6.14-5。自動的に終了することはできませんが、.staファイルから確認でき、分析は完了です。この問題はカーネルに関連していると思います。ところで、今、解決策はありますか?

0
leileilei

この問題の回避策を紹介したいと思います。 .staファイルの完全性をチェックするabq2018ソルバー用のpythonラッパーを作成しました。 .staファイルが完成すると、standardという名前のプロセスはすべて強制終了されます。標準が終了して解析が完了すると、ソルバーが正常に終了することがわかりました。

この回避策は完璧な解決策ではありません。この回避策の現在の問題

  1. abq2018ソルバー呼び出しを直接置き換えることはできません
  2. gUIからは動作しません。シェルから実行する必要があります
  3. job =引数のみを解析します
  4. すべてのstandardプロセスが強制終了されるため、一度に実行できる分析は1つだけです
  5. .staファイルが作成または変更されない場合、abqは永久にハングします

この回避策の使用方法

  1. Abqという名前のPythonファイルを作成します。 abqのコードの詳細は次のとおりです。 abq2018以外のソルバーを使用している場合は、cmd = 'abq20xx ..の行を使用しているソルバーに置き換えます。
  2. Abqを実行可能にし、パスで使用可能にします。 Abaqusコマンドフォルダーにabqを配置し、chmod +x abqを実行しました
  3. abq job=Job-1を実行して、Abaqus標準ジョブを実行します。これによりJob-1.inpが実行され、Job-1.staが完了すると標準ソルバーが終了します。

Abqのコードは次のとおりです

#!/usr/bin/python
import subprocess
import sys
import time
arguments = sys.argv
jobname = arguments[1].split('job=')[-1]
cmd = 'abq2018 cpus=4 ask_delete=OFF background job=' + jobname
p = subprocess.call(cmd, Shell=True)

complete = False
termination_criteria = [' THE ANALYSIS HAS COMPLETED SUCCESSFULLY\n',
                        ' THE ANALYSIS HAS NOT BEEN COMPLETED\n']

while complete is False:
    # wait every 5 seconds
    time.sleep(5)
    try:
        with open(jobname + '.sta', 'r') as f:
            last = f.readlines()[-1]
            if last in termination_criteria:
                # this will kill any process named standard
                subprocess.call('pgrep standard | xargs kill', Shell=True)
                complete = True
    except IOError:
        # model.sta has been deleted or doesn't exist
        # try again in 5 seconds
        time.sleep(5)

0
Charles Jekel