程式中啟用多個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 ...