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