排查獲取服務版本請求http介面耗時50s

2021-10-09 10:30:09 字數 2718 閱讀 9356

背景:

運營發現請求異常,簡單的獲取版本需要46s,改介面未訪問資料庫等其他額外元件,僅僅記憶體獲取值返回,正常是幾毫秒的時間。

請求 time curl http://localhost/getver

客戶端請求花了46秒,服務端記錄的時間才39ms,看起來像大部分時間都花在等待,同時沒有監控的metric資訊,監控面板看不到資料

檢視監控的ss請求,40分之前 經常有很多syn-recv的連線占用佇列,導致建聯很慢

原因分析:

運維初步判斷是網路的問題,想調大accept;

登入機器初步檢視,等待服務端 accept() 的 tcp 連線滿了,backlog 128

正常情況下recv-q 為0,send-q表示backlog的大小。

傳送異常時候,待accept佇列堆積:

同時accept佇列溢位:

觀察堆疊,看到三組nioeventloopgroup,可以看到都是正常的,也就是不存在nio接收執行緒卡主導致不能接收,另外react模型可以支援c10k問題,我們併發很小不是這個原因。

"nioeventloopgroup-2-2" #68 prio=10 os_prio=0 tid=0x0000000003f9f000 nid=0x1554e runnable [0x00007f73e413a000]

"nioeventloopgroup-2-1" #67 prio=10 os_prio=0 tid=0x0000000003fb0000 nid=0x1554d runnable [0x00007f7424064000]

"nioeventloopgroup-4-4" #489 prio=10 os_prio=0 tid=0x00007f72a03ba800 nid=0x202b1 runnable [0x00007f7288cec000]

"nioeventloopgroup-4-3" #477 prio=10 os_prio=0 tid=0x00007f7388003800 nid=0x1f104 runnable [0x00007f7288f6e000]

"nioeventloopgroup-4-2" #466 prio=10 os_prio=0 tid=0x00007f73b411f000 nid=0x1dc3d runnable [0x00007f7288f2d000]

"nioeventloopgroup-4-1" #443 prio=10 os_prio=0 tid=0x00007f73188e2000 nid=0x1b637 runnable [0x00007f7288faf000]

"nioeventloopgroup-3-120" #214 prio=10 os_prio=0 tid=0x00007f73a80d4000 nid=0x17bd0 runnable [0x00007f728bc2f000]

"nioeventloopgroup-3-119" #213 prio=10 os_prio=0 tid=0x00007f73a80d2000 nid=0x17bcf runnable [0x00007f728bc70000]

"nioeventloopgroup-3-118" #212 prio=10 os_prio=0 tid=0x00007f73a80d1000 nid=0x17bcd runnable [0x00007f728bcb1000]

"nioeventloopgroup-3-117" #201 prio=10 os_prio=0 tid=0x00007f73a80cf800 nid=0x173f2 runnable [0x00007f728bcf2000]

看下當前的狀態:

匯出堆疊的時候很慢,懷疑是機器的問題,看gc日誌,記憶體溢位,full gc導致的問題

果然看到gc出現異常,full gc頻繁,並且不能釋放記憶體,說明記憶體洩漏了。

看jmap

發現都是metric相關的類,找到對應的日誌目錄,傳送確實沒有列印改日誌,懷疑執行緒跑飛或者沒啟動。最終去過濾日誌,找到啟動當前的啟動日誌,發現確實是metric的問題,沒有列印導致堆積。

檢視**發現是初始化的異常**獲但是沒有繼續丟擲,只列印了異常,導致即使錯誤也能正常啟動服務。

解決:當初始化出現問題的時候應該直接丟擲異常,避免未正確初始化導致的問題,比如本次的metric執行緒未啟動,或者部分引數沒有正常初始化導致。

AngularJs服務 http請求

http 本質是對xmlhttprequest物件封裝 開啟乙個鏈結 介面方式 soap restful 傳遞的資料可以是 key val key val 形式,這種形式叫formdata 當請求資料型別不一樣,後端在接收的時採取方法也不一樣 假如上述方式以php為例可以使用 post接收 requ...

php獲取http請求原文

可以從超級變數 server中獲得,三個變數的值如下 server request method server request uri server server protocol r n php有個內建函式getallheader 是apache request headers 函式的乙個別名,可...

伺服器請求大量COLSE WAIT排查

生產環境的伺服器突然訪問無響應,而我的服務是用來接收上游推送資料用的,功能也是最近新上線的 heap configuration minheapfreeratio 40 maxheapfreeratio 70 maxheapsize 8589934592 8192.0mb newsize 10737...