gc 吞吐量和停顿时间_GC对吞吐量和延迟的影响
gc 吞吐量和停頓時間
每個Java應用程序都必須解決的一種類型的問題與垃圾回收有關。 當垃圾收集器工作時,它代表了一項奇妙的發明。 如果不是這樣,或者GC做家務的方式變得不可預測,那么您就有一個朋友變成了敵人。
這篇文章是關于垃圾收集暫停時間的。 或更準確地說-為什么您要關心停頓。
之前,我曾通過蘋果首席執行官蒂姆·庫克 ( Tim Cook)先生針對iPad需求進行規劃并建立工廠來解釋吞吐量和延遲 。 我將堅持同樣的說明性故事:
- 我們有一條工廠線,每秒生產一臺iPad。 每秒,每秒。 因此,該生產線的吞吐量為每天86,400個iPad
- 從完成外殼成型的一開始到完成iPad的驗收測試,整個過程需要四個小時。 因此,該線路的等待時間為四個小時 。
上面的系統和計算是基于這樣的假設,即工廠生產線每天每天24小時都在運行。 但是所有工廠生產線都需要維護,這相當于在JVM內部運行垃圾回收。
舉個例子–讓我們承擔一些小的維護任務,這些任務可以處理而不會造成很多干擾。 例如,可以在機器中加油或從成型設備旁邊的地板上撿拾多余的垃圾。 這些操作與JVM中的次要GC相似–它是您必須處理的維護,但是實現非常聰明,以至于不會影響系統性能。
但是在同一個工廠里 蒂姆·庫克(Tim Cook)也將面臨長期的維護任務。 這些任務涉及停止整個生產線,并且等效于Full GC運行,在JVM中,JVM需要停止服務線程以執行一些重要的內部管理任務。
現在,讓我們假設經過數月不間斷的服務后,我們假設的工廠生產線被堵塞,技術團隊需要四個小時才能解決問題。 在此期間,線路停止。 我們如何衡量效果? 與往常一樣,可以通過兩種不同的方式來衡量影響:
- 對吞吐量的影響 。 四個小時的停止表示我們有14,400秒的時間沒有完成iPad。 就吞吐量而言,這意味著我們已將這一天的系統容量從86,400減少至72,000。 這意味著吞吐量損失約16.5% 。
- 對延遲的影響 。 現在,如果我們拿著一臺在中斷發生時仍在生產中的iPad,則完成該過程所花的時間不是四個,而是八個小時。 這表示最壞情況下的延遲增加了100% 。
如果您還記得,那么先生。 庫克并不關心延遲 。 對他來說重要的是較長時間內的總吞吐量,所以先生。 Cook將決定以使其對生產量的影響最小的方式優化其流程。
在軟件開發中也需要做出類似的決定。 如果您有負責訂單處理的Java EE應用程序,則GC暫停四秒鐘將肯定會降低系統的吞吐量。 但是對于我們大多數人來說,這將不是主要問題。 另一方面,試圖在四秒鐘內停止執行清理任務的用戶試圖完成任務的用戶會感到我們的系統很慢。 并且,運營一種被用戶視為遲鈍的服務是一種倒閉的好方法。
故事的士氣? 明智地選擇目標,并確保不要將吞吐量與延遲混淆。 然后,通過監視GC日志,查找意外的完整GC并調整您的應用程序和/或GC來最大程度地減少影響,以確保您了解GC對這兩個方面的影響。
翻譯自: https://www.javacodegeeks.com/2014/01/gc-impact-on-throughput-and-latency.html
gc 吞吐量和停頓時間
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的gc 吞吐量和停顿时间_GC对吞吐量和延迟的影响的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTTP缓存与Spring示例
- 下一篇: Python基础——continute与