一、堆內(nèi)存相關(guān)配置
桐鄉(xiāng)網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,桐鄉(xiāng)網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為桐鄉(xiāng)數(shù)千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的桐鄉(xiāng)做網(wǎng)站的公司定做!
設(shè)置堆初始值
指令1:-Xms2g
指令2:-XX:InitialHeapSize=2048m
設(shè)置堆區(qū)最大值
指令1:`-Xmx2g`
指令2: -XX:MaxHeapSize=2048m
縮小堆內(nèi)存的時(shí)機(jī)
-XX:MaxHeapFreeRatio=70//堆內(nèi)存使用率大于70時(shí)擴(kuò)張堆內(nèi)存,xms=xmx時(shí)該參數(shù)無效,默認(rèn)值70
擴(kuò)張堆內(nèi)存的時(shí)機(jī)
-XX:MinHeapFreeRatio=40//堆內(nèi)存使用率小于40時(shí)縮減堆內(nèi)存,xms=xmx時(shí)該參數(shù)無效,默認(rèn)值40
新生代內(nèi)存配置
指令1:-Xmn512m
指令2:-XX:MaxNewSize=512m
2個(gè)survivor區(qū)和Eden區(qū)大小比率
指令:-XX:SurvivorRatio=6 //S區(qū)和Eden區(qū)占新生代比率為1:6,兩個(gè)S區(qū)2:6
新生代和老年代的占比
-XX:NewRatio=4 //表示新生代:老年代 = 1:4 即老年代占整個(gè)堆的4/5;默認(rèn)值=2
二、方法區(qū)內(nèi)存配置常用參數(shù)
初始化的Metaspace大小,
-XX:MetaspaceSize :
Metaspace最大值
-XX:MaxMetaspaceSize
三、線程棧內(nèi)存配置常用參數(shù)
每個(gè)線程棧最大值
指令1:-Xss256k
指令2:-XX:ThreadStackSize=256k
注意:
棧設(shè)置太大,會(huì)導(dǎo)致線程創(chuàng)建減少。
棧設(shè)置小,會(huì)導(dǎo)致深入不夠,深度的遞歸會(huì)導(dǎo)致棧溢出。
建議棧深度設(shè)置在3000-5000
四、配置垃圾收集器
Serial垃圾收集器(新生代)
開啟:-XX:+UseSerialGC
關(guān)閉:-XX:-UseSerialGC
//新生代使用Serial 老年代則使用SerialOld
ParNew垃圾收集器(新生代)
開啟 -XX:+UseParNewGC
關(guān)閉 -XX:-UseParNewGC
//新生代使用功能ParNew 老年代則使用功能CMS
Parallel Scavenge收集器(新生代)
開啟 -XX:+UseParallelOldGC
關(guān)閉 -XX:-UseParallelOldGC
//新生代使用功能Parallel Scavenge 老年代將會(huì)使用Parallel Old收集器
ParallelOl垃圾收集器(老年代)
開啟 -XX:+UseParallelGC
關(guān)閉 -XX:-UseParallelGC
//新生代使用功能Parallel Scavenge 老年代將會(huì)使用Parallel Old收集器
CMS垃圾收集器(老年代)
開啟 -XX:+UseConcMarkSweepGC
關(guān)閉 -XX:-UseConcMarkSweepGC
G1垃圾收集器
開啟 -XX:+UseG1GC
關(guān)閉 -XX:-UseG1GC
五、GC策略配置
GC并行執(zhí)行線程數(shù)
-XX:ParallelGCThreads=16
新生代可容納的最大對(duì)象
-XX:PretenureSizeThreshold=1000000 //大于此值的對(duì)象直接會(huì)分配到老年代,設(shè)置為0則沒有限制。 //避免在Eden區(qū)和Survivor區(qū)發(fā)生大量的內(nèi)存復(fù)制,該參數(shù)只對(duì)Serial和ParNew收集器有效,Parallel Scavenge并不認(rèn)識(shí)該參數(shù)
進(jìn)入老年代的GC年齡
進(jìn)入老年代最小的GC年齡
-XX:InitialTenuringThreshol=7 //年輕代對(duì)象轉(zhuǎn)換為老年代對(duì)象最小年齡值,默認(rèn)值7,對(duì)象在堅(jiān)持過一次Minor GC之后,年齡就加1,每個(gè)對(duì)象在堅(jiān)持過一次Minor GC之后,年齡就增加1
進(jìn)入老年代最大的GC年齡
-XX:MaxTenuringThreshold=15 //年輕代對(duì)象轉(zhuǎn)換為老年代對(duì)象最大年齡值,默認(rèn)值15
六、GC日志信息配置
配置GC文件路徑
-Xloggc:/data/gclog/gc.log//固定路徑名稱生成 -Xloggc:/home/GCEASY/gc-%t.log //根據(jù)時(shí)間生成
滾動(dòng)生成日志
日志文件達(dá)到一定大小后,生成另一個(gè)文件。須配置Xloggc
開啟 -XX:+UseGCLogFileRotation
關(guān)閉 -XX:-UseGCLogFileRotation
-XX:NumberOfGCLogFiles=4 //滾動(dòng)GC日志文件數(shù),默認(rèn)0,不滾動(dòng) -XX:GCLogFileSize=100k //GC文件滾動(dòng)大小,需配置UseGCLogFileRotation,設(shè)置為0表示僅通過jcmd命令觸發(fā)
Linux系統(tǒng)基本的內(nèi)存管理知識(shí)講解
內(nèi)存是Linux內(nèi)核所管理的最重要的資源之一。內(nèi)存管理系統(tǒng)是操作系統(tǒng)中最為重要的部分,因?yàn)橄到y(tǒng)的物理內(nèi)存總是少于系統(tǒng)所需要的內(nèi)存數(shù)量。虛擬內(nèi)存就是為了克服這個(gè)矛盾而采用的策略。系統(tǒng)的虛擬內(nèi)存通過在各個(gè)進(jìn)程之間共享內(nèi)存而使系統(tǒng)看起來有多于實(shí)際內(nèi)存的內(nèi)存容量。Linux支持虛擬內(nèi)存, 就是使用磁盤作為RAM的擴(kuò)展,使可用內(nèi)存相應(yīng)地有效擴(kuò)大。核心把當(dāng)前不用的內(nèi)存塊存到硬盤,騰出內(nèi)存給其他目的。當(dāng)原來的內(nèi)容又要使用時(shí),再讀回內(nèi)存。
一、內(nèi)存使用情況監(jiān)測(cè)
(1)實(shí)時(shí)監(jiān)控內(nèi)存使用情況
在命令行使用“Free”命令可以監(jiān)控內(nèi)存使用情況
代碼如下:
#free
total used free shared buffers cached
Mem: 256024 192284 63740 0 10676 101004
-/+ buffers/cache: 80604 175420
Swap: 522072 0 522072
上面給出了一個(gè)256兆的RAM和512兆交換空間的'系統(tǒng)情況。第三行輸出(Mem:)顯示物理內(nèi)存。total列不顯示核心使用的物理內(nèi)存(通常大約1MB)。used列顯示被使用的內(nèi)存總額(第二行不計(jì)緩沖)。 free列顯示全部沒使用的內(nèi)存。Shared列顯示多個(gè)進(jìn)程共享的內(nèi)存總額。Buffers列顯示磁盤緩存的當(dāng)前大小。第五行(Swap:)對(duì)對(duì)換空間,顯示的信息類似上面。如果這行為全0,那么沒使用對(duì)換空間。在缺省的狀態(tài)下,free命令以千字節(jié)(也就是1024字節(jié)為單位)來顯示內(nèi)存使用情況??梢允褂谩猦參數(shù)以字節(jié)為單位顯示內(nèi)存使用情況,或者可以使用—m參數(shù)以兆字節(jié)為單位顯示內(nèi)存使用情況。還可以通過—s參數(shù)使用命令來不間斷地監(jiān)視內(nèi)存使用情況:
#free –b –s2
這個(gè)命令將會(huì)在終端窗口中連續(xù)不斷地報(bào)告內(nèi)存的使用情況,每2秒鐘更新一次。
(2)組合watch與 free命令用來實(shí)時(shí)監(jiān)控內(nèi)存使用情況:
代碼如下:
#watch -n 2 -d free
Every 2.0s: free Fri Jul 6 06:06:12 2007
total used free shared buffers cached
Mem: 233356 218616 14740 0 5560 64784
-/+ buffers/cache: 148272 85084
Swap: 622584 6656 615928
watch命令會(huì)每?jī)擅雸?zhí)行 free一次,執(zhí)行前會(huì)清除屏幕,在同樣位置顯示數(shù)據(jù)。因?yàn)?watch命令不會(huì)卷動(dòng)屏幕,所以適合出長(zhǎng)時(shí)間的監(jiān)測(cè)內(nèi)存使用率??梢允褂?-n選項(xiàng),控制執(zhí)行的頻率;也可以利用 -d選項(xiàng),讓命令將每次不同的地方顯示出來。Watch命令會(huì)一直執(zhí)行,直到您按下 [Ctrl]-[C] 為止。
二、虛擬內(nèi)存的概念
(1)Linux虛擬內(nèi)存實(shí)現(xiàn)機(jī)制
Linux虛擬內(nèi)存的實(shí)現(xiàn)需要六種機(jī)制的支持:地址映射機(jī)制、內(nèi)存分配回收機(jī)制、緩存和刷新機(jī)制、請(qǐng)求頁機(jī)制、交換機(jī)制、內(nèi)存共享機(jī)制。
首先內(nèi)存管理程序通過映射機(jī)制把用戶程序的邏輯地址映射到物理地址,在用戶程序運(yùn)行時(shí)如果發(fā)現(xiàn)程序中要用的虛地址沒有對(duì)應(yīng)的物理內(nèi)存時(shí),就發(fā)出了請(qǐng)求頁要求;如果有空閑的內(nèi)存可供分配,就請(qǐng)求分配內(nèi)存(于是用到了內(nèi)存的分配和回收),并把正在使用的物理頁記錄在緩存中(使用了緩存機(jī)制)。 如果沒有足夠的內(nèi)存可供分配,那么就調(diào)用交換機(jī)制,騰出一部分內(nèi)存。另外在地址映射中要通過TLB(翻譯后援存儲(chǔ)器)來尋找物理頁;交換機(jī)制中也要用到交換緩存,并且把物理頁內(nèi)容交換到交換文件中后也要修改頁表來映射文件地址。
(2)虛擬內(nèi)存容量設(shè)定
也許有人告訴你,應(yīng)該分配2倍于物理內(nèi)存的虛擬內(nèi)存,但這是個(gè)不固定的規(guī)律。如果你的物理保存比較小,可以這樣設(shè)定。如果你有1G物理內(nèi)存或更多的話,可以縮小一下虛擬內(nèi)存。Linux會(huì)把大量的內(nèi)存用做Cache的,但在資源緊張時(shí)回收回.。你只要看到swap為0或者很小就可以放心了,因?yàn)閮?nèi)存放著不用才是最大的浪費(fèi)。
三、使甩vmstat命令監(jiān)視虛擬內(nèi)存使用情況
vmstat是Virtual Meomory Statistics(虛擬內(nèi)存統(tǒng)計(jì))的縮寫,可對(duì)操作系統(tǒng)的虛擬內(nèi)存、進(jìn)程、CPU活動(dòng)進(jìn)行監(jiān)視。它是對(duì)系統(tǒng)的整體情況進(jìn)行統(tǒng)計(jì),不足之處是無法對(duì)某個(gè)進(jìn)程進(jìn)行深入分析。通常使用vmstat 5 5(表示在5秒時(shí)間內(nèi)進(jìn)行5次采樣)命令測(cè)試。將得到一個(gè)數(shù)據(jù)匯總它可以反映真正的系統(tǒng)情況。
代碼如下:
#vmstat 5 5
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 62792 3460 9116 88092 6 30 189 89 1061 569 17 28 54 2
0 0 62792 3400 9124 88092 0 0 0 14 884 434 4 14 81 0
0 0 62792 3400 9132 88092 0 0 0 14 877 424 4 15 81 0
1 0 62792 3400 9140 88092 0 0 0 14 868 418 6 20 74 0
1 0 62792 3400 9148 88092 0 0 0 15 847 400 9 25 67 0
vmstat命令輸出分成六個(gè)部分:
linux下的ulimit命令可以對(duì)shell進(jìn)程所用資源進(jìn)行限制。通過cgroup限制后,當(dāng)內(nèi)存達(dá)到限額,進(jìn)程會(huì)被kill。
1.在Linux下查看內(nèi)存:free
2.查看進(jìn)程
3.實(shí)時(shí)顯示系統(tǒng)中各個(gè)進(jìn)程的資源占用狀況 top
4.
5.df 用于顯示 Linux 系統(tǒng)的磁盤利用率
6.du 命令
du是用于查找文件和目錄的磁盤使用情況的命令。du 命令在與各種選項(xiàng)一起使用時(shí)能以多種格式提供結(jié)果。
swap是一塊磁盤空間或者一個(gè)本地文件
/proc/sys/vm/swappiness 可以設(shè)置服務(wù)器使用 swap 的積極程度。取值范圍為0-100,值越大,越積極使用swap,更傾向于回收匿名頁;值越小,越消極使用swap,更傾向于回收文件頁。
即使swap設(shè)置為0,當(dāng)剩余內(nèi)存+文件頁小于頁高閾值( pages_high )的時(shí)候,也會(huì)發(fā)生swap
Linux有專門的內(nèi)核線程 kswapd0 定期回收內(nèi)存,為了衡量?jī)?nèi)存的使用情況, kswapd0 定義了三個(gè)內(nèi)存閾值:頁最小閾值 pages_min 、頁低閾值 pages_low 和頁高閾值 pages_high ,剩余內(nèi)存使用 pages_free 表示。
kswapd0 定期掃描內(nèi)存的使用情況,并根據(jù)剩余內(nèi)存和這三個(gè)閾值的關(guān)系進(jìn)行內(nèi)存回收操作。
pages_free pages_min :進(jìn)程可用內(nèi)存耗盡,只有內(nèi)核才可以分配內(nèi)存
pages_min pages_free pages_low :內(nèi)存壓力較大, kswapd0 會(huì)執(zhí)行內(nèi)存回收,直到剩余內(nèi)存大于高閾值為止
pages_low pages_free pages_high :內(nèi)存有一定壓力,但還可以滿足新內(nèi)存請(qǐng)求
pages_free pages_high :剩余內(nèi)存較多,沒有內(nèi)存壓力。
這些閾值可以通過內(nèi)核選項(xiàng)來 proc/sys/vm/min_free_kbytes 間接設(shè)置。 min_free_kbytes 設(shè)置了頁最小閾值( pages_min )。 pages_low=pages_min*5/4 , pages_high=pages_min*3/2
/etc/security/limits.conf
通過這個(gè)配置文件可以對(duì)每個(gè)登錄的會(huì)話進(jìn)行限制,這種限制不是全局的,也不是永久的,只在會(huì)話期間起作用。
通常,對(duì)單個(gè)用戶的限制優(yōu)先級(jí)高于對(duì)用戶組的限制
可以使用以下方式限制內(nèi)存使用
語法
domain type item value
詳見 limits.conf(5) - Linux man page
/proc/sys/vm/overcommit_memory 控制內(nèi)核使用虛擬內(nèi)存的模式,可以設(shè)置為以下值