成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

聽說 JVM 性能優化很難?今天我小試了一把!

云計算 虛擬化
對于 Java 開發的同學來說,JVM 性能優化可以說是比較難掌握的知識點。這不僅因為 JVM 性能優化需要掌握晦澀難懂的 JVM 知識,還因為 JVM 性能優化很難有使用場景。

[[403396]]

對于 Java 開發的同學來說,JVM 性能優化可以說是比較難掌握的知識點。這不僅因為 JVM 性能優化需要掌握晦澀難懂的 JVM 知識,還因為 JVM 性能優化很難有使用場景。

這導致了許多人對 JVM 性能優化不熟悉,感覺就像是空中樓閣的天物一樣不可觸及。這幾天工作中做了一次 JVM 性能優化,我想這對于 JVM 調優的初學者會有較大幫助。

背景

我們都知道 JVM 分為了新生代和老年代,并且我們在啟動應用的時候都會配置對應的參數,為應用程序運行的 JVM 調整內存大小。但我們都知道,很多時候我們都只是大致估計一個數,隨便填填,然后就上線了。

作者所在的公司同樣存在這種情況,JVM 內存大小基本上都設得挺大的,畢竟內存大總比內存溢出好,因此就造成了不少的內存浪費。所以作者收到的任務就是對所有的應用進行一次排查,調整合適的內存參數,優化 JVM 的性能。

調優實戰

要對應用進行 JVM 性能調優,那么首先得知道其運行的情況。這就像去醫院看醫生,去開藥之前需要醫生先望聞問切一樣。在 Java 中,有很多方式可以觀察到 JVM 的內部情況,例如 JDK 提供的各種命令工作。作者所在公司使用的是 Prometheus 進行監控,因此我們可以直接在 Prometheus 上看到應用的 JVM 運行情況。

Prometheus 面板中與 JVM 相關的主要有四塊內容:JVM Misc、JVM Memory Pools(Heap)、JVM Memory Pools(Non-Heap)、Garbage Collection。其中與我們此次較為相關的主要是:JVM Memory Pools(Heap)和 Garbage Collection。

JVM Memory Pools(Heap) 展示 JVM 堆內存的使用情況,主要包括了新生代的 Survivor 區、Eden Space 區、老年代。

JVM Memory Pools(Heap)

Garbage Collection 展示 JVM 的垃圾回收情況,主要包括垃圾回收頻率(ops 表示一秒回收幾次,一般 0.5 是比較合理的值)、每次 GC 停頓時長(一般 80ms 以下是合理值)、分配到新生代/晉升老年代的內存。

Garbage Collection

我們要進行 JVM 性能優化,那么最簡單的一個方法就是觀察 Garbage Collection 的 GC 頻率以及停頓時間,我們大致就能判斷出應用的內存利用效率。之后根據這兩個值的實際情況,將其調整到合理的范圍內,提高 JVM 的利用率。

如果一個應用的 GC 頻率只有 0.02,即每秒 GC 0.02 次,那么需要 50 秒才 GC 一次,那么其 GC 頻率是很低的。這時候很可能是分配了較大的新生代空間,這使得其很久才需要 GC 一次。這時候我們再看看其停頓時間,如果停頓時間也很短的話,那我們就可以判定該應用的內存有優化的空間。

在這種情況下,一般都是縮小分配的新生代的空間。新生代空間一旦變小了,那么其分配完的時間就會縮減。一旦空間被分配完,那么就會啟動進行 GC 操作。從而 GC 次數就會提升,提高應用的內存利用率。

在進行內存空間調整的時候,為了避免內存劇烈波動導致的問題,一般我們都是小步快跑地一點點調整。先調整一點試一試,沒太大問題之后再調整到目標值。 畢竟是生產環境,要是出了什么岔子,那就得提桶跑路了,還是謹慎為好!

看到這里,想必大家應該也知道怎么做了。接下來無非就是調整 JVM 內存空間的三個參數(-Xmx -Xms -Xmn),使 GC 頻率與 GC 停頓時間處于合理的區間。

應用層面優化

除了 GC 頻率、GC 停頓時間,我們還能從應用的類型來分析 JVM 的內存消耗情況。

例如對于接口類型的系統來說,很多請求都是 1 秒之內就結束。對于這種類型的請求,他們進入應用時會分配內存,結束時內存就會立刻被回收,留存下來的對象很少。這種應用的 JVM 內存情況大概是這樣的:新生代消耗比較大,并且隨著周期性回收內存,但老年代的內存消耗則更小。

對于那些持續性處理的應用,例如持續時間長的應用處理。因為其存活時間較久,所以可能會有更多的對象晉升到老年代,因此老年代的內存消耗就比較大。

通過觀察 JVM 年輕代與老年代的內存消耗情況,再結合應用本身的特性,我們可以發現應用中不合理的地方,再對應用進行針對性的優化。例如:應用某個地方每次都會存儲大量的臨時數據到內容中,這樣就造成了 JVM 可能爆發 GC,從而導致應用卡頓。

總結

總結一下本篇文章的調優方法:通過觀察 GC 頻率和停頓時間,來進行 JVM 內存空間調整,使其達到最合理的狀態。調整過程記得小步快跑,避免內存劇烈波動影響線上服務。 這其實是最為簡單的一種 JVM 性能調優方式了,可以算是粗調吧。但 JVM 性能調優還有更多、更詳細的參數,后續有機會我們再聊聊。

此外,通過觀察 JVM 年輕代與老年代的情況,也可以幫助我們對應用進行針對性的優化,從而提升應用本身的性能。

如果你之前沒了解過 JVM 的基礎理論知識,那么你可能看不懂這篇文章。那么我推薦你看看我的「JVM 基礎入門系列」,文章由淺入深、循序漸進,可以讓你對 JVM 有個感性的理解。看完之后再來看這篇文章,你肯定有種豁然開朗的感覺!

JVM 基礎入門系列傳送門:JVM 基礎入門系列

關于 JVM 性能調優,就分享到這里吧。

本文轉載自微信公眾號「陳樹義」,可以通過以下二維碼關注。轉載本文請聯系陳樹義公眾號。

 

責任編輯:武曉燕 來源: 陳樹義
相關推薦

2024-01-04 14:16:05

騰訊紅黑樹Socket

2019-06-12 15:20:25

Redis高性能線程

2021-03-17 11:29:20

Linux操作系統

2017-11-21 09:51:46

應用性能應用性能管理

2020-08-05 07:27:54

SQL優化分類

2020-03-02 17:04:47

戴爾

2016-07-15 10:37:37

云性能云計算

2021-02-05 15:35:21

Redis數據庫命令

2011-05-04 17:11:12

打印機

2011-11-08 08:14:40

WLANWi-Fi

2020-07-20 07:16:47

Python編程語言工具

2020-07-23 07:26:49

JVM類加載器

2021-06-09 10:15:26

優化性能顆粒度

2022-10-25 15:25:22

網關并行Flowable

2010-10-28 08:43:07

App StoreSymbian

2021-11-02 22:35:46

配置DubboLoadbalance

2017-06-14 17:39:40

微服務架構服務器

2024-02-22 17:08:03

騰訊架構RocketMQ

2013-09-24 10:20:14

Windows SerWindows Ser

2013-10-16 10:45:29

JVMJava
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩www | 日韩精品一区二区三区中文在线 | 国产视频线观看永久免费 | 97日日碰人人模人人澡分享吧 | 激情网站在线观看 | 亚洲欧美日韩精品久久亚洲区 | 国产在线播放一区二区三区 | 欧美日本一区 | 激情毛片 | 亚洲 欧美 综合 | 黄免费观看 | 97国产精品视频人人做人人爱 | 天天天操操操 | 亚洲综合在线播放 | 亚洲成人av| 亚洲精品自在在线观看 | 日韩免费视频 | 国产网站在线播放 | 能免费看的av | 日韩精品在线一区 | 久久精品国产99国产精品 | 美女黄视频网站 | 成人免费av在线 | 在线免费小视频 | 97视频成人 | 毛片一区二区三区 | 深夜福利影院 | 国产黄色小视频在线观看 | 国产一级淫片免费视频 | 欧美视频免费在线 | 女生羞羞视频 | 91国产视频在线 | 综合精品 | 孰女乱色一区二区三区 | 午夜视频免费在线观看 | 欧美福利 | 久久国产视频播放 | 综合国产在线 | 精品久久九九 | 国产精品福利一区二区三区 | 久久综合久久综合久久综合 |