国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

JVM 性能調(diào)優(yōu)

這篇具有很好參考價值的文章主要介紹了JVM 性能調(diào)優(yōu)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

JVM 性能調(diào)優(yōu)

在高性能硬件上部署程序,目前主要有兩種方式:

  • 通過 64 位 JDK 來使用大內(nèi)存;
  • 使用若干個 32 位虛擬機建立邏輯集群來利用硬件資源。

使用 64 位 JDK 管理大內(nèi)存

堆內(nèi)存變大后,雖然垃圾收集的頻率減少了,但每次垃圾回收的時間變長。 如果堆內(nèi)存為 14 G,那么每次 Full GC 將長達數(shù)十秒。如果 Full GC 頻繁發(fā)生,那么對于一個網(wǎng)站來說是無法忍受的。

對于用戶交互性強、對停頓時間敏感的系統(tǒng),可以給 Java 虛擬機分配超大堆的前提是有把握把應(yīng)用程序的 Full GC 頻率控制得足夠低,至少要低到不會影響用戶使用。

可能面臨的問題:

  • 內(nèi)存回收導(dǎo)致的長時間停頓;
  • 現(xiàn)階段,64 位 JDK 的性能普遍比 32 位 JDK 低;
  • 需要保證程序足夠穩(wěn)定,因為這種應(yīng)用要是產(chǎn)生堆溢出幾乎就無法產(chǎn)生堆轉(zhuǎn)儲快照(因為要產(chǎn)生超過 10GB 的 Dump 文件),哪怕產(chǎn)生了快照也幾乎無法進行分析;
  • 相同程序在 64 位 JDK 消耗的內(nèi)存一般比 32 位 JDK 大,這是由于指針膨脹,以及數(shù)據(jù)類型對齊補白等因素導(dǎo)致的。

使用 32 位 JVM 建立邏輯集群

在一臺物理機器上啟動多個應(yīng)用服務(wù)器進程,每個服務(wù)器進程分配不同端口, 然后在前端搭建一個負載均衡器,以反向代理的方式來分配訪問請求。

考慮到在一臺物理機器上建立邏輯集群的目的僅僅是為了盡可能利用硬件資源,并不需要關(guān)心狀態(tài)保留、熱轉(zhuǎn)移之類的高可用性能需求, 也不需要保證每個虛擬機進程有絕對的均衡負載,因此使用無 Session 復(fù)制的親合式集群是一個不錯的選擇。 我們僅僅需要保障集群具備親合性,也就是均衡器按一定的規(guī)則算法(一般根據(jù) SessionID 分配) 將一個固定的用戶請求永遠分配到固定的一個集群節(jié)點進行處理即可。

可能遇到的問題:

  • 盡量避免節(jié)點競爭全局資源,如磁盤競爭,各個節(jié)點如果同時訪問某個磁盤文件的話,很可能導(dǎo)致 IO 異常;
  • 很難高效利用資源池,如連接池,一般都是在節(jié)點建立自己獨立的連接池,這樣有可能導(dǎo)致一些節(jié)點池滿了而另外一些節(jié)點仍有較多空余;
  • 各個節(jié)點受到 32 位的內(nèi)存限制;
  • 大量使用本地緩存的應(yīng)用,在邏輯集群中會造成較大的內(nèi)存浪費,因為每個邏輯節(jié)點都有一份緩存,這時候可以考慮把本地緩存改成集中式緩存。

調(diào)優(yōu)案例分析與實戰(zhàn)

場景描述

一個小型系統(tǒng),使用 32 位 JDK,4G 內(nèi)存,測試期間發(fā)現(xiàn)服務(wù)端不定時拋出內(nèi)存溢出異常。 加入 -XX:+HeapDumpOnOutOfMemoryError(添加這個參數(shù)后,堆內(nèi)存溢出時就會輸出異常日志), 但再次發(fā)生內(nèi)存溢出時,沒有生成相關(guān)異常日志。

分析

在 32 位 JDK 上,1.6G 分配給堆,還有一部分分配給 JVM 的其他內(nèi)存,直接內(nèi)存最大也只能在剩余的 0.4G 空間中分出一部分, 如果使用了 NIO,JVM 會在 JVM 內(nèi)存之外分配內(nèi)存空間,那么就要小心“直接內(nèi)存”不足時發(fā)生內(nèi)存溢出異常了。

直接內(nèi)存的回收過程

直接內(nèi)存雖然不是 JVM 內(nèi)存空間,但它的垃圾回收也由 JVM 負責(zé)。

垃圾收集進行時,虛擬機雖然會對直接內(nèi)存進行回收, 但是直接內(nèi)存卻不能像新生代、老年代那樣,發(fā)現(xiàn)空間不足了就通知收集器進行垃圾回收, 它只能等老年代滿了后 Full GC,然后“順便”幫它清理掉內(nèi)存的廢棄對象。 否則只能一直等到拋出內(nèi)存溢出異常時,先 catch 掉,再在 catch 塊里大喊 “System.gc()”。 要是虛擬機還是不聽,那就只能眼睜睜看著堆中還有許多空閑內(nèi)存,自己卻不得不拋出內(nèi)存溢出異常了。

JVM 性能調(diào)優(yōu)

在高性能硬件上部署程序,目前主要有兩種方式:

  • 通過 64 位 JDK 來使用大內(nèi)存;
  • 使用若干個 32 位虛擬機建立邏輯集群來利用硬件資源。

使用 64 位 JDK 管理大內(nèi)存

堆內(nèi)存變大后,雖然垃圾收集的頻率減少了,但每次垃圾回收的時間變長。 如果堆內(nèi)存為 14 G,那么每次 Full GC 將長達數(shù)十秒。如果 Full GC 頻繁發(fā)生,那么對于一個網(wǎng)站來說是無法忍受的。

對于用戶交互性強、對停頓時間敏感的系統(tǒng),可以給 Java 虛擬機分配超大堆的前提是有把握把應(yīng)用程序的 Full GC 頻率控制得足夠低,至少要低到不會影響用戶使用。

可能面臨的問題:

  • 內(nèi)存回收導(dǎo)致的長時間停頓;
  • 現(xiàn)階段,64 位 JDK 的性能普遍比 32 位 JDK 低;
  • 需要保證程序足夠穩(wěn)定,因為這種應(yīng)用要是產(chǎn)生堆溢出幾乎就無法產(chǎn)生堆轉(zhuǎn)儲快照(因為要產(chǎn)生超過 10GB 的 Dump 文件),哪怕產(chǎn)生了快照也幾乎無法進行分析;
  • 相同程序在 64 位 JDK 消耗的內(nèi)存一般比 32 位 JDK 大,這是由于指針膨脹,以及數(shù)據(jù)類型對齊補白等因素導(dǎo)致的。

使用 32 位 JVM 建立邏輯集群

在一臺物理機器上啟動多個應(yīng)用服務(wù)器進程,每個服務(wù)器進程分配不同端口, 然后在前端搭建一個負載均衡器,以反向代理的方式來分配訪問請求。

考慮到在一臺物理機器上建立邏輯集群的目的僅僅是為了盡可能利用硬件資源,并不需要關(guān)心狀態(tài)保留、熱轉(zhuǎn)移之類的高可用性能需求, 也不需要保證每個虛擬機進程有絕對的均衡負載,因此使用無 Session 復(fù)制的親合式集群是一個不錯的選擇。 我們僅僅需要保障集群具備親合性,也就是均衡器按一定的規(guī)則算法(一般根據(jù) SessionID 分配) 將一個固定的用戶請求永遠分配到固定的一個集群節(jié)點進行處理即可。

可能遇到的問題:

  • 盡量避免節(jié)點競爭全局資源,如磁盤競爭,各個節(jié)點如果同時訪問某個磁盤文件的話,很可能導(dǎo)致 IO 異常;
  • 很難高效利用資源池,如連接池,一般都是在節(jié)點建立自己獨立的連接池,這樣有可能導(dǎo)致一些節(jié)點池滿了而另外一些節(jié)點仍有較多空余;
  • 各個節(jié)點受到 32 位的內(nèi)存限制;
  • 大量使用本地緩存的應(yīng)用,在邏輯集群中會造成較大的內(nèi)存浪費,因為每個邏輯節(jié)點都有一份緩存,這時候可以考慮把本地緩存改成集中式緩存。

調(diào)優(yōu)案例分析與實戰(zhàn)

場景描述

一個小型系統(tǒng),使用 32 位 JDK,4G 內(nèi)存,測試期間發(fā)現(xiàn)服務(wù)端不定時拋出內(nèi)存溢出異常。 加入 -XX:+HeapDumpOnOutOfMemoryError(添加這個參數(shù)后,堆內(nèi)存溢出時就會輸出異常日志), 但再次發(fā)生內(nèi)存溢出時,沒有生成相關(guān)異常日志。

分析

在 32 位 JDK 上,1.6G 分配給堆,還有一部分分配給 JVM 的其他內(nèi)存,直接內(nèi)存最大也只能在剩余的 0.4G 空間中分出一部分, 如果使用了 NIO,JVM 會在 JVM 內(nèi)存之外分配內(nèi)存空間,那么就要小心“直接內(nèi)存”不足時發(fā)生內(nèi)存溢出異常了。

直接內(nèi)存的回收過程

直接內(nèi)存雖然不是 JVM 內(nèi)存空間,但它的垃圾回收也由 JVM 負責(zé)。

垃圾收集進行時,虛擬機雖然會對直接內(nèi)存進行回收, 但是直接內(nèi)存卻不能像新生代、老年代那樣,發(fā)現(xiàn)空間不足了就通知收集器進行垃圾回收, 它只能等老年代滿了后 Full GC,然后“順便”幫它清理掉內(nèi)存的廢棄對象。 否則只能一直等到拋出內(nèi)存溢出異常時,先 catch 掉,再在 catch 塊里大喊 “System.gc()”。 要是虛擬機還是不聽,那就只能眼睜睜看著堆中還有許多空閑內(nèi)存,自己卻不得不拋出內(nèi)存溢出異常了。

本文由 mdnice 多平臺發(fā)布文章來源地址http://www.zghlxwxcb.cn/news/detail-513742.html

到了這里,關(guān)于JVM 性能調(diào)優(yōu)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Linux C++性能優(yōu)化秘籍:從編譯器到代碼,探究高性能C++程序的實現(xiàn)之道

    Linux C++性能優(yōu)化秘籍:從編譯器到代碼,探究高性能C++程序的實現(xiàn)之道

    隨著大數(shù)據(jù)、人工智能等技術(shù)的飛速發(fā)展,程序性能優(yōu)化的重要性愈發(fā)突出。優(yōu)化性能可以降低資源消耗、提高系統(tǒng)響應(yīng)速度,從而在有限的硬件資源下,實現(xiàn)更高的吞吐量和處理能力。此外,性能優(yōu)化也有助于降低能耗、減少散熱問題,延長硬件使用壽命。 Linux操作系統(tǒng)具

    2023年04月09日
    瀏覽(47)
  • 【linux高性能服務(wù)器編程】項目實戰(zhàn)——仿QQ聊天程序源碼剖析

    【linux高性能服務(wù)器編程】項目實戰(zhàn)——仿QQ聊天程序源碼剖析

    hello !大家好呀! 歡迎大家來到我的Linux高性能服務(wù)器編程系列之項目實戰(zhàn)——仿QQ聊天程序源碼剖析,在這篇文章中, 你將會學(xué)習(xí)到如何利用Linux網(wǎng)絡(luò)編程技術(shù)來實現(xiàn)一個簡單的聊天程序,并且我會給出源碼進行剖析,以及手繪UML圖來幫助大家來理解,希望能讓大家更能了

    2024年04月28日
    瀏覽(33)
  • 《高性能MySQL》——創(chuàng)建高性能的索引(筆記)

    《高性能MySQL》——創(chuàng)建高性能的索引(筆記)

    索引(在MySQL中也叫做“鍵(key)”) 是存儲引擎用于快速找到記錄的一種數(shù)據(jù)結(jié)構(gòu)。 索引對于良好的性能非常關(guān)鍵。尤其是當(dāng)表中的數(shù)據(jù)量越來越大時,索引對性能的影響愈發(fā)重要。 在數(shù)據(jù)量較小且負載較低時,不恰當(dāng)?shù)乃饕龑π阅艿挠绊懣赡苓€不明顯,但當(dāng)數(shù)據(jù)量逐漸增大時

    2024年02月07日
    瀏覽(99)
  • 【騰訊云HAI域探秘】搭建一個永不宕機的本地SD文本生成圖像應(yīng)用--喂飯級高性能應(yīng)用HAI部署stable diffusion webui 一鍵文生圖

    【騰訊云HAI域探秘】搭建一個永不宕機的本地SD文本生成圖像應(yīng)用--喂飯級高性能應(yīng)用HAI部署stable diffusion webui 一鍵文生圖

    本次有幸受邀作為新品先鋒體驗官參加了【 騰訊云HAI域探秘 】活動,沉浸式體驗高性能應(yīng)用服務(wù)HAI產(chǎn)品 + Stable Diffusion WebUI部署。 騰訊云高性能應(yīng)用服務(wù)(Hyper Application Inventor, HAI),是一款面向AI、科學(xué)計算的GPU應(yīng)用服務(wù)產(chǎn)品,為開發(fā)者量身打造的澎湃算力平臺?;隍v訊云

    2024年02月06日
    瀏覽(29)
  • 【Linux高性能服務(wù)器編程】——高性能服務(wù)器框架

    【Linux高性能服務(wù)器編程】——高性能服務(wù)器框架

    ? hello !大家好呀! 歡迎大家來到我的Linux高性能服務(wù)器編程系列之高性能服務(wù)器框架介紹,在這篇文章中, 你將會學(xué)習(xí)到高效的創(chuàng)建自己的高性能服務(wù)器,并且我會給出源碼進行剖析,以及手繪UML圖來幫助大家來理解,希望能讓大家更能了解網(wǎng)絡(luò)編程技術(shù)?。?! 希望這篇

    2024年04月25日
    瀏覽(101)
  • 讀高性能MySQL(第4版)筆記08_創(chuàng)建高性能索引(上)

    讀高性能MySQL(第4版)筆記08_創(chuàng)建高性能索引(上)

    2.4.2.1.?按照索引列中的數(shù)據(jù)大小順序存儲的 2.4.3.1.?鍵前綴查找只適用于根據(jù)最左前綴的查找 2.4.4.1.?在查詢某些條件的數(shù)據(jù)時,存儲引擎不再需要進行全表掃描 2.4.4.2.?通過比較節(jié)點頁的值和要查找的值可以找到合適的指針進入下層子節(jié)點,這些指針實際上定義了子節(jié)點頁中

    2024年02月08日
    瀏覽(98)
  • 讀高性能MySQL(第4版)筆記09_創(chuàng)建高性能索引(下)

    讀高性能MySQL(第4版)筆記09_創(chuàng)建高性能索引(下)

    1.4.4.1.?InnoDB的二級索引在葉子節(jié)點中保存了記錄的主鍵值,所以如果二級索引能夠覆蓋查詢,則可以避免對主鍵索引的二次查詢 7.1.5.1.?常見的類似錯誤通常是由于嘗試使用rsync備份InnoDB導(dǎo)致的 7.3.3.1.?否則,對于范圍查詢、索引覆蓋掃描等操作來說,速度可能會降低很多 7

    2024年02月08日
    瀏覽(103)
  • 《高性能MYSQL》-- 查詢性能優(yōu)化

    《高性能MYSQL》-- 查詢性能優(yōu)化

    查詢性能優(yōu)化 深刻地理解MySQL如何真正地執(zhí)行查詢,并明白高效和低效的原因何在 查詢的生命周期(不完整):從客戶端到服務(wù)器,然后服務(wù)器上進行語法解析,生成執(zhí)行計劃,執(zhí)行,并給客戶端返回結(jié)果。 一條查詢,如果查詢得很慢,原因大概率是訪問的數(shù)據(jù)太多 對于低

    2024年03月11日
    瀏覽(99)
  • 高性能MySQL實戰(zhàn)(三):性能優(yōu)化

    大家好,我是 方圓 。這篇主要介紹對慢 SQL 優(yōu)化的一些手段,而在講解具體的優(yōu)化措施之前,我想先對 EXPLAIN 進行介紹,它是我們在分析查詢時必要的操作,理解了它輸出結(jié)果的內(nèi)容更有利于我們優(yōu)化 SQL。為了方便大家的閱讀,在下文中規(guī)定類似 key1 的表示二級索引,key_

    2024年02月11日
    瀏覽(97)
  • 《高性能MySQL》——查詢性能優(yōu)化(筆記)

    《高性能MySQL》——查詢性能優(yōu)化(筆記)

    將查詢看作一個任務(wù),那么它由一系列子任務(wù)組成,實際我們所做的就是: 消除一些子任務(wù) 減少子任務(wù)的執(zhí)行次數(shù) 讓子任務(wù)運行更快 查詢的生命周期大概可分為 = { 客戶端 服務(wù)器 : 進行解析 , 生成執(zhí)行計劃 執(zhí)行:包括到存儲引擎的調(diào)用,以及用后的數(shù)據(jù)處理 { 排序 分組

    2024年02月13日
    瀏覽(95)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包