面試官追問(wèn)的STW,到底什么是STW?有什么影響?
STW,即Stop-The-World的縮寫(xiě),指的是系統(tǒng)在執(zhí)行特定操作時(shí)需暫停(停止)所有應(yīng)用程序線程。
有提到過(guò)(如圖)。
圖片
提到過(guò)(如圖):
圖片
步入正題
所謂的STW,在Java中,當(dāng)需要執(zhí)行垃圾回收時(shí),垃圾回收器會(huì)停止應(yīng)用程序的所有線程,以便安全地識(shí)別和回收不再使用的對(duì)象。這個(gè)過(guò)程被稱(chēng)為“Stop The World”。
STW事件會(huì)暫時(shí)中斷應(yīng)用程序的運(yùn)行。對(duì)于需要高響應(yīng)性或?qū)崟r(shí)性能的應(yīng)用程序,這可能引發(fā)性能問(wèn)題,因?yàn)樗鼤?huì)導(dǎo)致響應(yīng)延遲。
在STW期間,應(yīng)用程序的響應(yīng)時(shí)間(RT)和吞吐量(QPS)都會(huì)受到影響,這可能導(dǎo)致性能表現(xiàn)的不確定性,特別是在負(fù)載較高的情況下。
為了減少STW帶來(lái)的影響,需要對(duì)垃圾收集器的配置進(jìn)行優(yōu)化,例如選擇不同類(lèi)型的垃圾收集器、調(diào)整堆大小或其他垃圾收集器參數(shù)。
例如,選擇并發(fā)回收器作為垃圾回收器,如CMS、G1等,因?yàn)椴l(fā)回收器主要關(guān)注的是減少STW的時(shí)長(zhǎng)。它允許垃圾收集線程在應(yīng)用程序線程運(yùn)行的同時(shí)執(zhí)行部分垃圾收集工作,從而減少了STW的時(shí)間。在并發(fā)回收期間,只會(huì)在特定的收集階段發(fā)生短暫的STW。
關(guān)于Java虛擬機(jī)的垃圾收集器可參考文章
帶你走近Java虛擬機(jī)到底有哪些經(jīng)典的垃圾收集器
其它STW場(chǎng)景
除了垃圾收集(GC)中的STW事件之外,STW這個(gè)術(shù)語(yǔ)在其他上下文中也可能被引用。
舉例來(lái)說(shuō):
- 操作系統(tǒng)和硬件升級(jí)/維護(hù):在執(zhí)行操作系統(tǒng)升級(jí)或硬件維護(hù)時(shí),可能需要完全暫停系統(tǒng)功能,以確保安全地進(jìn)行更新和維護(hù)。這種情況下的STW意味著所有在系統(tǒng)上運(yùn)行的應(yīng)用和服務(wù)都會(huì)被臨時(shí)停止。
- 數(shù)據(jù)庫(kù)維護(hù):在某些數(shù)據(jù)庫(kù)操作中,如重組索引、執(zhí)行特定類(lèi)型的備份或升級(jí)數(shù)據(jù)庫(kù)系統(tǒng)時(shí),可能需要暫時(shí)停止數(shù)據(jù)庫(kù)服務(wù),這也可以被視為一種STW事件,因?yàn)樗鼤?huì)中斷所有數(shù)據(jù)庫(kù)操作。
- 消息隊(duì)列的重新平衡:在分布式消息隊(duì)列系統(tǒng)(例如Kafka)中,重新平衡是指在消費(fèi)者群體中添加或刪除消費(fèi)者時(shí)重新分配分區(qū)的過(guò)程。在這個(gè)過(guò)程中,消息消費(fèi)可能會(huì)暫時(shí)停止,直到重新平衡完成,確保所有分區(qū)正確地重新分配給新的消費(fèi)者群體。






























