日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

一次线上内存报警的研究

發(fā)布時(shí)間:2025/7/25 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一次线上内存报警的研究 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一丶背景

項(xiàng)目出現(xiàn)內(nèi)存報(bào)警,當(dāng)我們導(dǎo)出大文件excel的時(shí)候。以下是相關(guān)參數(shù)與猜想。

jvm參數(shù):-Xms8192m

excel文件大小:一個(gè)二十多萬行的excel數(shù)據(jù)。

報(bào)警條件:物理內(nèi)存高于80%會(huì)觸發(fā)報(bào)警

相關(guān)猜想:按理說堆內(nèi)存我們一來就分配好8個(gè)g的物理內(nèi)存,導(dǎo)出文件觸發(fā)的堆內(nèi)存增長應(yīng)該不會(huì)引起物理內(nèi)存的增長。

二丶結(jié)論

此次報(bào)警,屬于正常能預(yù)期到的現(xiàn)象,我們線上程序并未受到影響。我們jvm參數(shù)配置Xms8192m,實(shí)際上分配的是虛擬地址空間,并不是實(shí)際的物理內(nèi)存,導(dǎo)出excel的時(shí)候堆空間大量增長,那么對(duì)應(yīng)的虛擬地址就會(huì)去大量的命中實(shí)際的物理內(nèi)存,所以就算我們堆空間的內(nèi)存降下去后,實(shí)際命中的物理內(nèi)存也分配給了對(duì)應(yīng)的堆內(nèi)存,導(dǎo)致物理內(nèi)存永久下降。

三丶虛擬地址空間

我們的進(jìn)程其實(shí)是運(yùn)行在虛擬地址空間里,cpu的尋物理內(nèi)存址過程其實(shí)是對(duì)虛擬地址的地址翻譯后再找到實(shí)際的物理地址。

為什么我們使用虛擬地址呢?

  • 讓每個(gè)進(jìn)程擁有了相同的、獨(dú)立內(nèi)存空間,相互之間不會(huì)干擾

    • 如果沒有虛擬地址,每個(gè)進(jìn)程直接對(duì)物理內(nèi)存進(jìn)行操作,勢(shì)必會(huì)存在各個(gè)進(jìn)程相互影響而無法正常進(jìn)行。
  • 方便各個(gè)進(jìn)程之間內(nèi)存共享

    • 可以映射到不同的物理內(nèi)存。其實(shí)不同進(jìn)程的虛擬地址也可以映射到相同的物理內(nèi)存以實(shí)現(xiàn)內(nèi)存共享。
    • 比如每個(gè)操作系統(tǒng)的進(jìn)程,都會(huì)需要跟內(nèi)核程序打交道。有了內(nèi)存共享,多個(gè)進(jìn)程間就可以共用內(nèi)核程序,而不需要為每一個(gè)進(jìn)程在物理內(nèi)存里加載一份內(nèi)核程序。
  • 不連續(xù)的物理空間可以映射成連續(xù)的虛擬地址空間

    • 可以將碎片化的物理內(nèi)存映射到連續(xù)的虛擬地址。
  • 進(jìn)程分配的內(nèi)存空間只有在實(shí)際使用時(shí),才會(huì)觸發(fā)缺頁異常來分配實(shí)際物理空間,從而最大程度減少了內(nèi)存空間的浪費(fèi)。

    • 在我們使用虛擬地址空間時(shí),如果沒有對(duì)應(yīng)的物理內(nèi)存,就會(huì)出現(xiàn)我們常見的緩存不命中的情況。專業(yè)術(shù)語叫缺頁異常。這時(shí)內(nèi)核的缺頁異常處理程序,將會(huì)幫助我們分配物理內(nèi)存,如果物理內(nèi)存不足,它將會(huì)選擇一個(gè)物理內(nèi)存頁作為犧牲,寫回磁盤上,這也就是我們所說的交換分區(qū)(linux叫做交換區(qū),window上叫做虛擬內(nèi)存)。
  • 四丶jvm與虛擬地址空間

    JVM進(jìn)程,本質(zhì)上就是一個(gè)用c++寫的普通進(jìn)程,起開始申請(qǐng)的地址其實(shí)是一個(gè)虛擬地址空間,并不是實(shí)際的物理內(nèi)存,必須在分配的虛擬地址空間實(shí)際使用才會(huì)觸發(fā)分配實(shí)際的物理內(nèi)存。

    五丶相關(guān)佐證

    從下圖可以看出我們生產(chǎn)環(huán)境配置的物理內(nèi)存的使用是遠(yuǎn)遠(yuǎn)小于我們分配的jvm參數(shù)配置Xms8192m,說明并不是隨著程序的啟動(dòng)就分配了對(duì)應(yīng)的物理內(nèi)存。

    六丶總結(jié)

    我們生產(chǎn)環(huán)境監(jiān)控的物理內(nèi)存是監(jiān)控包含了一部分的堆內(nèi)存的大小,但是我們堆內(nèi)存設(shè)置為-Xms8192m -Xmx8192m -Xmn2048m。實(shí)際上這個(gè)監(jiān)控意義不大,因?yàn)檫@個(gè)年老代內(nèi)存的增長是隨著程序的運(yùn)行時(shí)必定增長的。

    七丶擴(kuò)展-缺頁

    看完上述后相信有人肯定還有一些疑問,缺頁到命中物理內(nèi)存是怎么一個(gè)過程,那么首先我們的需要了解一些概念,虛擬內(nèi)存,虛擬頁,物理頁,物理內(nèi)存,頁表,DRAM。

    虛擬內(nèi)存

    • 虛擬內(nèi)存被組織為一個(gè)由存放在磁盤上的N個(gè)連續(xù)的字節(jié)大小的單元組成的數(shù)組,本質(zhì)時(shí)磁盤上的對(duì)象,而每個(gè)自己對(duì)應(yīng)的地址,我們就理解為虛擬地址。

    虛擬頁

    • 就是虛擬內(nèi)存分割為固定大小的塊,我們就叫做虛擬頁,由上可以得知。虛擬頁實(shí)際上時(shí)在磁盤上的

    物理頁:

    • 物理內(nèi)存分割為固定大小的塊,叫做物理頁

    DRAM:

    • 虛擬內(nèi)存系統(tǒng)的緩存,在主存中緩存虛擬頁,說通俗點(diǎn),就是物理內(nèi)存對(duì)應(yīng)的虛擬系統(tǒng)(自己理解)

    頁表

    • 頁表就是一個(gè)頁表?xiàng)l目的數(shù)組,功能是將虛擬頁映射到物理頁,我們每次讀取虛擬地址時(shí),實(shí)際上讀取的就是頁表。頁表可以形象的理解為虛擬頁和物理頁的一個(gè)管理,DRAM緩存內(nèi)存時(shí),如果緩存了物理地址,那么虛擬地址就能直接映射到物理地址,如果頁表上沒有緩存物理頁,那么就是缺頁異常,需要進(jìn)行一次頁面調(diào)度

    頁面調(diào)度過程缺頁異常

    • 當(dāng)我們?nèi)ビ锰摂M內(nèi)存地址時(shí),我們DRAM沒有緩存到物理頁時(shí),會(huì)觸發(fā)一個(gè)缺頁異常,內(nèi)核會(huì)選擇一個(gè)空閑的物理頁作為犧牲頁,并且將虛擬頁磁盤的上復(fù)制到對(duì)應(yīng)的物理頁,那么這個(gè)虛擬頁就緩存到了對(duì)應(yīng)的物理頁,虛擬地址就能直接映射物理地址了,完成了一次頁面調(diào)度

    八丶參考書籍

    《深入理解計(jì)算機(jī)系統(tǒng)-第三版》

    總結(jié)

    以上是生活随笔為你收集整理的一次线上内存报警的研究的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。