一次 HashSet 所引起的併發問題

2021-08-31 14:00:18 字數 1924 閱讀 1660

github 熱門開源作者

來自:,其實系統挺猥瑣。

執行緒和記憶體同時重啟應用,還好重啟之後恢復正常。於是開始著手排查問題。

中取出資料然後丟到後面的業務執行緒池中做具體的業務處理。

threadpoolexecutor

executor

=new

threadpoolexecutor

(coresize

,maxsize

,

0l,

timeunit

.milliseconds

,

newlinkedblockingqueue

<

runnable

>());;

put

(poolname

,executor

);

並沒有指定大小(這也是個坑),於是這個佇列的預設大小為integer

.max_value

分析了記憶體,的到了如下報告。

,還有乙個則是hashset

一會兒再看。

,看這個堆疊是在查詢key是否存在。通過檢視 312 行的業務**確實也是如此。

了上面的證據。

的時候執行了 6 7 個小時都沒有返回。.7

,所以我初步認為應該是在查詢 key 的時候進入了hashmap的環形鍊錶導致cpu高負載同時也進入了死迴圈。

//執行緒池

private

executorservice

executor

;

private

set<

string

>

set

=new

hashset

();

private

void

execute

()

}

public

class

worker

extends

thread

@override

private

void

run()

}

//達到某種條件時清空 set

if(

flag

)

}

}

其實本質上就是hashmap,所以它肯定是執行緒不安全的,所以會出現兩個問題:

()),觀察上文的堆疊情況:

的 465 行,來看看 1.7 中那裡具體在做什麼:

.next

永遠不為空,所以這個迴圈也不會退出了。

那台伺服器的io壓力也比較大。

的死迴圈問題在網上層出不窮,沒想到還真被我遇到了。現在要滿足這個條件還是挺少見的,比如 1.8 以下的jdk這一條可能大多數人就碰不到,正好又證實了一次墨菲定律。

鍵詞↓得隨機解決方案↓

記一次加班所引起的深思

昨天公司進行上線前整合im聊天工具,我負責這塊的除錯,忙了一下午加上一晚上。實際上沒有難度的,但給我帶來了很多麻煩。讓我一一道來吧。除錯工作主要是在js端進行的,im又只能用ie來除錯,ie的debug工具我又不會用,我就是用了最原始的alert 場景是這樣的,當使用者已經登入 平台的時候,如果發起...

一次老闆發話引起的思考

1.員工被重視的感覺是怎樣形成的?一般老闆都希望員工有被重視的感覺,而員工有了這種感覺,也確實可以大大地加強員工的效率和工作的積極性。關鍵是,這種感覺是怎樣形成的呢?其實所謂的被重視的感覺,說白了就是認同感。被肯定,就是被領導贊同 被公認,就是周圍的同事或者team member能相互賞識和尊重,被...

Tomcat響應https請求引起的一次Bug

問題描述 接到乙個需求,也是很簡單。如果是https請求重定向到乙個位址,是http請求重定向到另乙個位址。很快寫完了,開始測試。為了除錯,把請求路徑的日誌列印出來 string url request.getrequesturl tostring logger.info url url https...