Armadilloフォーラム

コンテナ内のアプリケーションが止まる原因の特定方法

nakayama244

2023年6月9日 13時59分

podman のコンテナ内にpython アプリケーションを作成しているのですが
ある程度の時間、連続起動していると止まってしまします。

ソースの例:
print('計測値xxxx')
# この間で止まっていた。
print('取得成功')

ソースの例ですが、例外で落ちたとは思えない箇所でログが途切れており
ソース以外の停止要因があるのではないかと検討しています。

原因として
podman logs でログを確認するためにconf ファイルに
set_command /bin/bash -c "/usr/sbin/sshd; if [ -e /root/python_app/src/main.py ]; then python3 -u /root/python_app/src/main.py; fi; exec sleep infinity"
として「-u」オプションを付けてバッファにログが出力するようにしていて
ログの容量制限をしていないのでメモリ不足になって落ちている可能性があると考えました。

しかし、これが原因であるかは明確に特定できてはいません。
コンテナ内のpythonアプリケーションが停止した場合に原因を特定する方法を教えていただけないでしょうか。

コメント

koga

2023年6月15日 7時18分

アットマークテクノの古賀です。

nakayama244さん(2023年6月9日 13時59分):
>podman のコンテナ内にpython アプリケーションを作成しているのですが
>ある程度の時間、連続起動していると止まってしまします。

どの程度の連続稼働で停止する状況でしょうか?

>ソースの例:
>print('計測値xxxx')
># この間で止まっていた。
>print('取得成功')
>
>ソースの例ですが、例外で落ちたとは思えない箇所でログが途切れており
>ソース以外の停止要因があるのではないかと検討しています。
>
>原因として
>podman logs でログを確認するためにconf ファイルに
>set_command /bin/bash -c "/usr/sbin/sshd; if [ -e /root/python_app/src/main.py ]; then python3 -u /root/python_app/src/main.py; fi; exec sleep infinity"
>として「-u」オプションを付けてバッファにログが出力するようにしていて
>ログの容量制限をしていないのでメモリ不足になって落ちている可能性があると考えました。
>
>しかし、これが原因であるかは明確に特定できてはいません。
>コンテナ内のpythonアプリケーションが停止した場合に原因を特定する方法を教えていただけないでしょうか。

podman_start による自動起動ではなく、'podman exec -it <コンテナ名> /bin/sh' でシェルを対話起動して、シェルから Python アプリケーションを実行してみるというのは、いかがでしょうか?
 https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…
print() によるログ出力が停止した時点で、Python アプリケーションが動作中なのか、あるいは動作終了してシェルに戻っているのかを見ることができれば、要因切り分けの手始めになるのではないかと思います。

また、Python アプリケーションを実行する際に、

[container ~]# python3 -u /root/python_app/src/main.py&

としてバックグラウンド実行すれば、アプリケーションの動作中に、ログ領域の使用状況などをチェックすることもできるかと思います。

以上、ひとまずのコメントです。

nakayama244

2023年6月16日 17時47分

古賀様
ご回答ありがとうございます。

[container ~]# python3 -u /root/python_app/src/main.py&

> としてバックグラウンド実行すれば、アプリケーションの動作中に、ログ領域の使用状況などをチェックすることもできるかと思います。

python の起動方法について & を末尾に付ける方法について知らなかったので勉強になりました。
PIDや終了コードをもとに原因について手掛かりになると思います。