今天,我們性能測試的環境出現個奇怪現象,通過oci direct load回庫的進程似乎僵死了,應用端cpu 200%(兩個線程在跑,一個是一直在ocidirectload沒反應,另外一個是正在sem_trywait),如下:
oracle服務器端從一開始收到請求並執行完成之后,就沒有反應了,也沒有等待事件,session狀態為inactive(這沒有任何副作用),ash中在此之后就沒有這個session的任何記錄了,多個分庫都是一樣的現象(比較坑的是,這個動態庫是我們研發中心開發的,代碼不open)。
目前問題還沒有時間查,主要懷疑可能是表空間滿,今天又出來了,不同的位置,但是內部都是在調用oci direct load的邏輯沒有正常返回結果碼的問題,經測試,不是這個問題。今天的異常如下:
繼續查看了各服務器到數據庫的網絡連接狀態,oracle服務器節點都是keepalived,應用端為off,如下:
輸出各列的含義如下:
以前都是等待超時之類的,off的狀態網上介紹也比較少。它是通過-o選項出來的,也就是網絡計時器。經仔細查找,off的含義如下:
keepalive
- when the keepalive timer is ON for the socketon
- when the retransmission timer is ON for the socketoff
- none of the above is ON
如上述所示,Recv-Q Send-Q 都是0。man也沒有寫timer的含義。所以這個問題基本上推測就在Timer身上。
連接狀態轉換圖如下:
參考:
https://superuser.com/questions/240456/how-to-interpret-the-output-of-netstat-o-netstat-timers
https://github.com/netty/netty/issues/7292