catapult-service-bootstrapでexit 132エラーになるときはCPUが古い可能性がある
きっかけ
そらりすさんとのやりとりの中で、ノードのコンテナーがログ出力がほとんどない状態で落ちてしまうということがあったので、調べていました。
これの経緯とかもう少し詳しくとか書いてみたいと思います。
はじめに
catapult-service-bootstrapやsymbol-service-bootstrapを起動したときに、ノードが何もログを出力せずに終了してしまうことがあります。
Exit 132
で異常終了して、
特にヒントとなるようなログが出力されていない。
これの原因には、古いCPUで動いているマシンで起こるような気がしています。
Intel AVX2がないと動かない?
そらりすさんの見立てでは、Intel AVX2
の対応可否あたりに原因がありそうだということでした。
それで、いろいろやってみた結果、Haswell
以降のCPUだとうごくっぽいことがわかっています。
CPUのことを見てみます。
Intel AVX2
というのが、Haswell
から搭載されています。
AWSのEC2を見てみます。
CPU比較結果一覧
の箇所を参照。
https://dev.classmethod.jp/cloud/aws/ec2-instance-detail/
m3.medium
がIntel(R) Xeon(R) CPU E5-2670 v2
を使っており、これはIvy Bridge
です。
Nehalem
-> Sandy Bridge
-> Ivy Bridge
-> Haswell
-> Haswell Refresh
という順番で新しくなっているので、このm3.medium
はAVX2は対応していないはずです。
エラーの再現
AWSのEC2で、m3.medium
の古い(現行世代ではない)インスタンスタイプでマシンを起動してみます。
CPU情報を見てみます。
$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 62
model name : Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz
catapult-service-bootstrap
今回はこちらのコミットを使います。
commit 73acef917b8beb667d6c0bdf058a59455fd605b6 (HEAD -> master, tag: 0.9.2.1, origin/master, origin/HEAD)
Author: kaiyzen <[email protected]>
Date: Fri Jan 24 20:08:50 2020 +0000
readme update
それではcatapult-service-bootstrap
を起動してみます。
$ docker-compose -f cmds/docker/docker-compose.yml up -d --build
$ docker-compose -f cmds/docker/docker-compose.yml ps
Name Command State Ports
----------------------------------------------------------------------------------------------------
docker_api-node-0-nemgen_1 bash -c /bin-mount/wait /s ... Up
docker_api-node-0_1 bash -c /bin-mount/wait /s ... Up
docker_api-node-broker-0_1 bash -c /bin-mount/wait /s ... Up
docker_db_1 docker-entrypoint.sh bash ... Up 27017/tcp
docker_generate-raw-addresses_1 bash -c /bin-mount/generat ... Exit 132
docker_init-db_1 docker-entrypoint.sh bash ... Exit 0
docker_peer-node-0-nemgen_1 bash -c /bin-mount/wait /s ... Up
docker_peer-node-0_1 bash -c /bin-mount/wait /s ... Up
docker_peer-node-1-nemgen_1 bash -c /bin-mount/wait /s ... Up
docker_peer-node-1_1 bash -c /bin-mount/wait /s ... Up
docker_rest-gateway_1 ash -c /bin-mount/wait /st ... Up 0.0.0.0:3000->3000/tcp
docker_setup-network_1 ash -c /bin-mount/wait /ad ... Up
docker_store-addresses_1 ash -c /bin-mount/wait /ad ... Exit 1
ログを見てみます。よくわかりません。
$ docker-compose -f cmds/docker/docker-compose.yml logs generate-raw-addresses
Attaching to docker_generate-raw-addresses_1
generate-raw-addresses_1 | /bin-mount/generate-raw-addresses-if-needed: line 8: 6 Illegal instruction (core dumped) /usr/catapult/bin/catapult.tools.address --generate=${num_addresses} -n public-test > ${raw_addresses_path}
dmesg
で何かないか探してみます。
$ dmesg
...
[ 1902.850651] traps: Tool Main[5585] trap invalid opcode ip:7f28225e555c sp:7ffc2fa861e0 error:0 in libboost_program_options.so.1.71.0[7f282259a000+88000]
...
invalid opcode
とあるので、CPU命令が存在しない的なエラーだと思いました。(詳しくないので誰か教えて)
symbol-testnet-bootstrap
こちらのコミットを使います
commit 536d131d123a89b564d095afc12308e7b9cc6992 (HEAD -> master, tag: 0.9.2.1-beta4, origin/master, origin/HEAD)
Author: kaiyzen <[email protected]>
Date: Sat Feb 8 00:35:44 2020 +0000
readme update
起動してみます。
$ cd api-harvest-assembly
$ docker-compose up -d --build
$ docker-compose ps
Name Command State Ports
-----------------------------------------------------------------------------------------------------
api-harvest-assembly_api-broker_1 bash -c /bin-mount/wait /s ... Exit 132
api-harvest-assembly_api-node_1 bash -c /bin-mount/wait /s ... Exit 132
api-harvest-assembly_db_1 docker-entrypoint.sh bash ... Up 27017/tcp
api-harvest-assembly_generate-raw-addresses_1 bash -c /bin-mount/generat ... Exit 132
api-harvest-assembly_init-db_1 docker-entrypoint.sh bash ... Exit 1
api-harvest-assembly_rest-gateway_1 ash -c /bin-mount/wait /st ... Exit 1
api-harvest-assembly_store-addresses_1 ash -c /bin-mount/wait /ad ... Exit 0
api-harvest-assembly_update_vars_1 ash -c /bin-mount/wait /ad ... Exit 0
Exit 132
となったコンテナのログを見てみます。
$ docker-compose logs api-node api-broker generate-raw-addresses
Attaching to api-harvest-assembly_api-node_1, api-harvest-assembly_api-broker_1, api-harvest-assembly_generate-raw-addresses_1
api-node_1 | No index.dat file, creating now....
api-node_1 | !!!! Going to start api node now....
generate-raw-addresses_1 | /bin-mount/generate-raw-addresses-if-needed: line 8: 6 Illegal instruction (core dumped) /usr/catapult/bin/catapult.tools.address --generate=${num_addresses} -n public-test > ${raw_addresses_path}
api-broker_1 | rm: cannot remove '/data/startup/datadir-initialized': No such file or directory
dmesg
を見てみます。
...
[ 2856.881428] traps: catapult.server[23093] trap invalid opcode ip:7f8559a7df70 sp:7ffe32454680 error:0 in librocksdb.so.6.2.4[7f85598fb000+55f000]
...
invalid opcode
とあるので、CPU命令が存在しない的なエラーだと思いました。(詳しくないので誰か教えて)
おわりに
exit 132
エラーが起きるときは、たぶんCPUが古いということがわかりました。
クラウドを使っている場合は、新しい世代のものを使うとか、別のサービスを利用するとかを検討する必要があるかもしれません。
あと
AVX2に対応していないマシンで、ソースからコンパイルした場合にどうなるのかは、よくわかっていません。(誰か教えて)
追記
This is SIGILL signal, which is CPU generated exception.
That is the outcome of compiling for target that supports AVX2 (Skylake) and - as you've investigsated - running on machine that doesn't support avx2.
side-note: compilation does NOT need to happen on machine with AVX2
— gimre 👁️ (@NCOSIGIMCITYNRE) February 14, 2020
P.S. quick way to check if cpu supports given feature looks like this:
`cat /proc/cpuinfo | grep flags | head -1 | grep avx2`
— gimre 👁️ (@NCOSIGIMCITYNRE) February 14, 2020
追記
This is SIGILL signal, which is CPU generated exception.
That is the outcome of compiling for target that supports AVX2 (Skylake) and - as you've investigsated - running on machine that doesn't support avx2.
side-note: compilation does NOT need to happen on machine with AVX2
P.S. quick way to check if cpu supports given feature looks like this:
`cat /proc/cpuinfo | grep flags | head -1 | grep avx2`
HaswellであるCPUのIntel(R) Celeron(R) CPU G1820で試したところ、うまく動きませんでした。
このCPUはAVX2をサポートしていません。
$ dmesg
[44210875.478242] traps: catapult.broker[12089] trap invalid opcode ip:7f998ce1f40a sp:7ffffcb04240 error:0 in librocksdb.so.6.2.4[7f998cc9f000+560000]
コードネームでは一意に決められないようです。
Author And Source
この問題について(catapult-service-bootstrapでexit 132エラーになるときはCPUが古い可能性がある), 我々は、より多くの情報をここで見つけました https://qiita.com/planethouki/items/81a36e30e11eac90afe1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .