Goroutine 嚴重故障處理

2021-09-10 02:24:52 字數 1389 閱讀 5097

程式中啟用多個goroutine,如果其中乙個goroutine因為一些隱式的執行時錯誤將呼叫panic,如果沒有合適的處理,將導致所有的goroutine終止。

當在乙個goroutine中發生panic呼叫時會終止整個程式,如下,建立多個goroutine,由於panic導致整個程式崩潰,其它goroutine沒有執行

package main

import

("fmt"

)func

test

(n int

, c chan

int)()

panic

(fmt.

sprintf

("panic: %d"

, n))}

func

main()

for i :=

0; i <

10; i++

}

列印報錯:

test:

9 test:

1panic

:panic:9

goroutine 14

[running]

: main.

test

(0x9

,0xc000062060

)/users/chicheng/

go/src/work/main.go:

16+0x106

created by main.main

/users/chicheng/

go/src/work/main.go:

23+0x6f

exit status 2

recover在panic執行後會獲得goroutine控制權,其它goroutine可以繼續執行

package main

import

("fmt"

)func

test

(n int

, c chan

int)

c <- n }(

)panic

(fmt.

sprintf

("panic: %d"

, n))}

func

main()

for i :=

0; i <

10; i++

}

列印結果:

panic:9

panic:3

panic:1

panic:0

panic:4

panic:6

panic:7

panic:2

panic:8

panic

:5

線上故障處理

於 2016 年 12 月 09 日 處理流程 故障後處理 前段時間在團隊內整理了乙份線上事故處理的流程,修改後在這裡分享。1.1 系統 業務報警 這個是獲取故障最常用的手段。一般的系統正常運營過程中都會有一定的指標監控。如 在系統層面某種報錯出現的次數,系統常規指標,如可用記憶體,jvm gc,連...

RAC 故障處理

rac的故障定位 比單節點資料庫更複雜 日誌的儲存位置更多 日誌的資訊量更大 故障更複雜 rac的核心程序,cssd,crsd 這兩個程序出現問題,那麼 rac就宕了。rac比單例項資料庫程序要複雜的多。rac日誌存放的位置也多,種類也多,相對於單例項。對於單例項資料庫,所有的關於資料庫的資訊幾乎都...

shell處理故障

以下是shell處理故障的一點積累,將來可能有用,先mark一下 1 匯出userid不為空,且下單日在2014 01 03日 含 以後的訂單 mysql u h p3307 p e use set names utf8 select distinct user id,user name from ...