Upgrade to Pro — share decks privately, control downloads, hide ads and more …

goroutine で panic すると親プロセスをまきこんで落ちる

9c23bec5e8b0aa1d9458d40800987347?s=47 uji
February 21, 2021
130

goroutine で panic すると親プロセスをまきこんで落ちる

9c23bec5e8b0aa1d9458d40800987347?s=128

uji

February 21, 2021
Tweet

Transcript

  1. goroutine で panic すると
 親プロセスをまきこんで落ちる
 uji @uji_rb


  2. panic とは
 • 回復不能だと判断された実行時のエラーを発生させる機構 • panicが生じるとプロセスが止まる
 
 • 組み込み関数のpanicを呼び出すと発生する

  3. panic のハンドリング
 • panic は defer + recover でハンドリングできる
 https://play.golang.org/p/sXEcmsxtV_Z


  4. しかし...
 goroutine で panic が起こった場合
 親プロセスからはハンドリングできない
 


  5. goroutine の panic
 • goroutine 内で panic のハンドリングがされていないと
 親プロセスごと落ちる
 https://play.golang.org/p/HUY-sN8PK-X


  6. ぶち当たった問題
 • api サーバーで goroutine を使った処理が panic が起こすとプロ セスがまるごと落ちてしまう
 apiサーバー


    メインプロセス
 リクエスト
 プロセス
 リクエスト
 プロセス
 リクエスト
 プロセス
 リクエスト
 子プロセス
 リクエスト
 子プロセス

  7. 解決策
 
 • goroutine 内ではなるべく panic が
 起こらないようにする
 (error によるハンドリングを徹底)


    • goroutine 内で panic の恐れがある場合は
 recover 処理を忘れない
 →汎用的につかえる並列処理実行関数をつくった

  8. 参考
 • プログラミング言語Go完全入門 https://docs.google.com/presentation/d/1HW3wG8J_Q2536Iu__7HGr_mhurHajC7IOGjCnn3kZmg/edit?usp=sharing