テストケースでプロセスハングがあり、どうやろうかと調べたので簡単にメモします。
プロセスの一時停止
対象のプロセスにSIGSTOPを送るとプロセスが一時停止します。これでプロセスのハングアップ状況を作ります。
※ アプリ側でSIGSTOPを受け付けないよう実装されている場合は効かないです。
sudo kill -s SIGSTOP <対象プロセスのPID>
プロセスの再開
再開する場合は対象のプロセスにSIGCONTを送ります。ただ正常に再開してくれるかは該当アプリの実装によります。
なのでサービスであればsystemctl restart XXXXX
で再起動してしまったほうが確実です。
sudo kill -s SIGCONT <対象プロセスのPID>
なんで調べたのか
kubernetes(EKS+ワーカーノードEC2構成)の障害テストで、kubeletのハング時を再現したくて調べたものです。
ちなみにテスト結果は以下のとおりです。
- EC2インスタンスは正常稼働のママ(インスタンスやOSは正常なので、AutoScalingでは当然検知できない)
- kubernetesで該当ノードは
NotReady
状態になる - 該当ノード上のPodは検証では
Terminating
になり、最終的に別のノードに再配置され復旧する - アプリ(ALB経由の簡易的なhttpdのPod)は一時的にエラー(50x)が発生する場合も