1. 程式人生 > >Linux記憶體 效能調優

Linux記憶體 效能調優

記憶體是影響Linux效能的主要因素之一,記憶體資源的充足與否直接影響應用系統的使用效能。

free命令:監控Linux記憶體使用狀況。

由上圖可知,空閒記憶體是free+buffers+cached=155MB

一般來說如果空閒記憶體/實體記憶體>70%,記憶體效能優;如果小於20%,則效能差,需要新增記憶體。

vmstat命令:顯示關於系統各種資源之間相關效能的簡要資訊。

如果si和so數值很大的話,可能是出現系統資源緊缺。

sat命令:可以對每個方面進行單獨的統計,但是增加了系統開銷,但是對系統的統計結果不會有很大影響。

r是檢視記憶體和交換分割槽的使用率的。

%commit:應用程式使用記憶體百分比。

kbcommit:應用程式使用記憶體的大小。

由上面2行就可以看出系統目前的記憶體使用情況。

kbmemfree:空閒實體記憶體的大小。

kbmemused:已經使用實體記憶體的大小。

%memused:已使用記憶體佔總記憶體大小的百分比。

==========================

#free -m

                       used         free
-/+ buffers/cache:    2571840    1480216


- buffers/cache 反應的是被程式實實在在吃掉的記憶體
+ buffers/cache 反應的是可以挪用的記憶體總數

$ free
              total      used       free        sharedbuffers    cached
Mem:   255268     238332     16936      0      85540   126384
-/+ buffers/cache:26408      228860
Swap:  265000     0          265000

Mem:表示實體記憶體統計
-/+ buffers/cached:表示實體記憶體的快取統計
Swap:表示硬碟上交換分割槽的使用情況,這裡我們不去關心。
系統的總實體記憶體:255268Kb(256M),但系統當前真正可用的記憶體b並不是第一行free 標記的16936Kb,它僅代表未被分配的記憶體。
我們使用total1、used1、free1、used2、free2 等名稱來代表上面統計資料的各值,1、2分別代表第一行和第二行的資料。   total1:   表示實體記憶體總量。
used1:    表示總計分配給快取(包含buffers 與cache )使用的數量,但其中可能部分快取並未實際使用。
free1:    未被分配的記憶體。
shared1:  共享記憶體,一般系統不會用到,這裡也不討論。
buffers1: 系統分配但未被使用的buffers 數量。
cached1:   系統分配但未被使用的cache數量。
buffer 與cache 的區別見後面。 used2:    實際使用的buffers 與cache 總量,也是實際使用的記憶體總量。
free2:    未被使用的buffers 與cache 和未被分配的記憶體之和,這就是系統當前實際可用記憶體。   可以整理出如下等式:
total1 = used1 + free1
total1 = used2 + free2
used1   = buffers1 + cached1 +used2
free2   = buffers1 + cached1 +free1
  buffer 與cache 的區別
A buffer is something that has yet to be "written" to disk.
A cache is something that has been "read" from the disk and storedfor later use.   更詳細的解釋參考:Difference Between Buffer andCache
對於共享記憶體(Shared memory),主要用於在UNIX環境下不同程序之間共享資料,是程序間通訊的一種方法,一般的應用程式不會申請使用共享記憶體,筆者也沒有去驗證共享記憶體對上面等式的影響。如果你有興趣,請參考:What is Shared Memory?   cache 和 buffer的區別:
Cache: 快取記憶體,是位於CPU與主記憶體間的一種容量較小但速度很高的儲存器。由於CPU的速度遠高於主記憶體,CPU直接從記憶體中存取資料要等待一定時間週期,Cache中儲存著CPU剛用過或迴圈使用的一部分資料,當CPU再次使用該部分資料時可從Cache中直接呼叫,這樣就減少了CPU的等待時間,提高了系統的效率。Cache又分為一級Cache(L1 Cache)和二級Cache(L2 Cache),L1Cache整合在CPU內部,L2 Cache早期一般是焊在主機板上,現在也都整合在CPU內部,常見的容量有256KB或512KB L2Cache。
Buffer:緩衝區,一個用於儲存速度不同步的裝置或優先順序不同的裝置之間傳輸資料的區域。通過緩衝區,可以使程序之間的相互等待變少,從而使從速度慢的裝置讀入資料時,速度快的裝置的操作程序不發生間斷。   Free中的buffer和cache:(它們都是佔用記憶體):
buffer: 作為buffercache的記憶體,是裝置的讀寫緩衝區
cache: 作為page cache的記憶體,檔案系統的cache   如果 cache的值很大,說明cache住的檔案數很多。如果頻繁訪問到的檔案都能被cache住,那麼磁碟的讀IObi會非常小。 Buffer和Cache的區別    快取(cached)是把讀取過的資料儲存起來,重新讀取時若命中(找到需要的資料)就不要去讀硬碟了,若沒有命中就讀硬碟。其中的資料會根據讀取頻率進行組織,把最頻繁讀取的內容放在最容易找到的位置,把不再讀的內容不斷往後排,直至從中刪除。    緩衝(buffers)是根據磁碟的讀寫設計的,把分散的寫操作集中進行,減少磁碟碎片和硬碟的反覆尋道,從而提高系統性能。linux有一個守護程序定期清空緩衝內容(即寫如磁碟),也可以通過sync命令手動清空緩衝。舉個例子吧:我這裡有一個ext2的U盤,我往裡面cp一個3M的MP3,但U盤的燈沒有跳動,過了一會兒(或者手動輸入sync)U盤的燈就跳動起來了。解除安裝裝置時會清空緩衝,所以有些時候解除安裝一個裝置時要等上幾秒鐘。

修改/etc/sysctl.conf中的vm.swappiness右邊的數字可以在下次開機時調節swap使用策略。該數字範圍是0~100,數字越大越傾向於使用swap。預設為60,可以改一下試試。
兩者都是RAM中的資料。簡單來說,buffer是即將要被寫入磁碟的,而cache是被從磁碟中讀出來的。
buffer是由各種程序分配的,被用在如輸入佇列等方面,一個簡單的例子如某個程序要求有多個欄位讀入,在所有欄位被讀入完整之前,程序把先前讀入的欄位放在buffer中儲存。
cache經常被用在磁碟的I/O請求上,如果有多個程序都要訪問某個檔案,於是該檔案便被做成cache以方便下次被訪問,這樣可提供系統性能。

Linux的記憶體管理,實際上跟windows的記憶體管理有很相像的地方,都是用虛擬記憶體這個的概念,說到這裡不得不罵MS,為什麼在很多時候還有很大的實體記憶體的時候,卻還是用到了pagefile.所以才經常要跟一幫人吵著說Pagefile的大小,以及如何分配這個問題,在Linux大家就不用再吵什麼swap大小的問題,我個人認為,swap設個512M已經足夠了,如果你問說512M的SWAP不夠用怎麼辦?只能說大哥你還是加記憶體吧,要不就檢查你的應用,是不是真的出現了memoryleak.

在Linux下檢視記憶體我們一般用command free
[[email protected] ~]# free
                 total          used      free    shared   buffers    cached
Mem:   386024     377116    8908      0          21280    155468
-/+buffers/cache:    200368   185656
Swap:   393552           0         393552
下面是對這些數值的解釋:
第二行(mem):
total:總計實體記憶體的大小。
used:已使用多大。
free:可用有多少。
Shared:多個程序共享的記憶體總額。
Buffers/cached:磁碟快取的大小。
第三行(-/+ buffers/cached):
used:已使用多大。
free:可用有多少。
第四行就不多解釋了。
區別:
第二行(mem)的used/free與第三行(-/+ buffers/cache) used/free的區別。
這兩個的區別在於使用的角度來看,第一行是從OS的角度來看,因為對於OS,buffers/cached都是屬於被使用,所以他的可用記憶體是8908KB,已用記憶體是377116KB,其中包括,核心(OS)使用+Application(X,oracle,etc)使用的+buffers+cached.
第三行所指的是從應用程式角度來看,對於應用程式來說,buffers/cached是等於可用的,因為buffer/cached是為了提高檔案讀取的效能,當應用程式需在用到記憶體的時候,buffer/cached會很快地被回收。
所以從應用程式的角度來說,可用記憶體=系統free( memory+buffers+cached.)
如上例:
185656=8908+21280+155468
接下來解釋什麼時候記憶體會被交換,以及按什麼方交換。
當可用記憶體少於額定值的時候,就會開會進行交換.
如何看額定值(RHEL4.0):
#cat /proc/meminfo
交換將通過三個途徑來減少系統中使用的物理頁面的個數: 
1.減少緩衝與頁面cache的大小,
2.將系統V型別的記憶體頁面交換出去, 
3.換出或者丟棄頁面。(Application 佔用的記憶體頁,也就是實體記憶體不足)。
事實上,少量地使用swap是不是影響到系統性能的。

轉自: http://zhengdl126.iteye.com/blog/1144600

相關推薦

Linux記憶體 效能調

記憶體是影響Linux效能的主要因素之一,記憶體資源的充足與否直接影響應用系統的使用效能。 free命令:監控Linux記憶體使用狀況。 由上圖可知,空閒記憶體是free+buffers+cached=155MB 一般來說如果空閒記憶體/實體記憶體>70%,記憶體效能優;如果小於20%,則效能差,

Linux工具效能調系列一:效能調泛談

一,為什麼需要效能調優 我們平時中,總會遇到各種各種的效能問題,有應用層面的,網路層面的,作業系統層面的等等。在我看來,我們需要效能調優的原因有以下幾個: (1) 這些問題如果不解決,會直接影響到我們的系統性能,甚至造成我們服務的不可用 (2) 加大我們的伺服器成本 (3) 迅速定位問題原因,迅速解決,降低

Linux工具效能調系列二:buffer和cache

一,案例入門 我們來看一個例子,我們來看free輸出,free採集資料來源是:/proc/meminfo檔案,對於這個檔案,會貫穿這個系列。 [email protected]:~# free total used free sh

Linux工具效能調系列三:swap問題定位

一,預備知識 1.1 什麼是swap swap當我們指的名詞的時候,它可以是一個分割槽,也可以是一個檔案,是作業系統中一個存放從記憶體中置換出的資料的地方。 當我們指的是一個動詞時候,代表的是從實體記憶體交換資料到swap分割槽這個動作。 1.2 為什麼會swap (1) 當實體記憶體不夠用時候,會根

系統技術非業餘研究 » Linux常用效能調工具索引

霸爺您好,麻煩請教個問題,我們最近一個專案上有個奇怪的問題,基於實時linux系統,兩個實時執行緒通過mq_send傳送訊息,A發訊息給B,是非阻塞的訊息佇列,A傳送訊息B進行處理,A傳送訊息後發現mq_send的開銷與B對該訊息的處理時延相關,也就是說B處理的快,那麼A呼叫的mq_send返回

Nginx效能調之快取記憶體

Nginx可以快取一些檔案(一般是靜態檔案),減少Nginx與後端伺服器的IO,提高使用者訪問速度。而且當後端伺服器宕機時,Nginx伺服器能給出相應的快取檔案響應相關的使用者請求。 一 Nginx靜態快取基本配置 在tomcat的webapps目錄下建立hello.html,內容

1.linux使用自帶的命令執行spoon寫好的job命令以及效能調策略

1. [[email protected] data_integration]# nohup ./kitchen.sh /file file/desktopstatistics.kjb &[1] 16537 [[email protected] data_integrat

Linux效能調指南

在很久以前,就對效能調優有非常濃厚的興趣。雖然之前也在做過一些效能調優的工作,但是主要集中在程式碼層面,以及業務層面。對如何從Linux作業系統方面進行調優,一直都沒有一個清晰的認識。不過,最近偶然發現了一本IBM出的Linux調優指南,於是就拜讀了一下。 讀完一些之後,就發現這本書確實就是我所

JVM記憶體管理及JAVA效能調相關筆記

JVM篇 1.JVM記憶體分配:方法區、Java棧、本地方法棧、堆、程式計數器。方法區:在方法區中,儲存了每個類的資訊(包括類的名稱、方法資訊、欄位資訊)、靜態變數、常量以及編譯器編譯後的程式碼等。Java棧:用來儲存方法中的區域性變數(包括在方法中宣告的非靜態變數以及函式形參)。對於基本資料型別的

Yarn 記憶體分配管理機制及相關引數配置(yarn效能調)

一、相關配置情況關於Yarn記憶體分配與管理,主要涉及到了ResourceManage、ApplicationMatser、NodeManager這幾個概念,相關的優化也要緊緊圍繞著這幾方面來開展。這裡還有一個Container的概念,現在可以先把它理解為執行map/redu

視訊:深入理解Java虛擬機器(jvm效能調+記憶體模型+虛擬機器原理)共110集

龍果學院深入理解Java虛擬機器(Jvm效能調優+記憶體模型+虛擬機器原視訊 Java虛擬機器視訊教程一套不錯的視訊,課程一共有110課,課程目錄較多隻展示部分出來,喜歡的朋友下載看下 課程目錄(課程較多,只展示部分目錄) 課程大綱 第1節說在前面的話 [免費觀看]

JVM記憶體模型,以及JVM效能調

轉載批註:最近因與別人討論問題時,問到JVM記憶體模型,但是苦於只知道JVM的大概內容,不知道詳細,也罷,近期會逐漸有充足的自己的時間,好好整理學習學習。以下內容為轉載別人的資料,個人認為寫的很好,就全文拷貝了。 ===================華麗的分割線==

sql server 效能調之 邏輯記憶體消耗最大資源分析1 (自sqlserver服務啟動以後)

原文: sql server 效能調優之 邏輯記憶體消耗最大資源分析1 (自sqlserver服務啟動以後) 一.概述   IO 記憶體是sql server最重要的資源,資料從磁碟載入到記憶體,再從記憶體中快取,輸出到應用端,在sql server 記憶體初探中有介紹。在明白了sqlserver記憶體原

spark效能調(四)調節堆外記憶體和等待時長

調節堆外記憶體!!! executor堆外記憶體 spark底層shuffle使用netty傳輸,所以使用了堆外記憶體!1.2之前是NIO就是socket,之後預設使用netty 有時候,如果你的spark作業處理的資料量特別特別大,幾億資料量;然後spark作業一執行,時

ES03--效能調02(檔案數、記憶體、root靜默啟動)

一、“Too many open files” 方式1: 發現日誌中大量出現這個錯誤 執行 curl http://  localhost:9200 /_nodes/process\?pretty 可以看到 "max_file_descriptors" : 4096,

spark效能調(三)shuffle的map端記憶體緩衝reduce端記憶體佔比

效能優化 shuffle spark.shuffle.file.buffer,預設32k spark.shuffle.memoryFraction,0.2 map端記憶體緩衝,reduce端記憶體佔比;很多資料、網上視訊,都會說,這兩個引數, 是調節shuff

Tomcat效能調及JVM記憶體工作原理

本章聊聊Tomcat如何進行調優。 Java效能優化方向:程式碼運算效能、記憶體回收、應用配置。 注:影響Java程式主要原因是垃圾回收,下面會重點介紹這方面 程式碼層優化:避免過多迴圈巢狀、呼叫和複雜邏輯。 Tomcat調優主要內容如下: 1、增加最大連線數 2、調整工作模式 3、啟用gzip壓

linux下修改核心引數進行Tcp效能調 -- 高併發

前言: Tcp/ip協議對網路程式設計的重要性,進行過網路開發的人員都知道,我們所編寫的網路程式除了硬體,結構等限制,通過修改Tcp/ip核心引數也能得到很大的效能提升, 下面就列舉一

linux系統性能調第一步——效能分析(vmstat)

4)使系統資源使用達到最大的平衡。(一般情況下系統良好執行的時候恰恰各項資源達到了一個平衡體,任何一項資源的過渡使用都會造成平衡體系破壞,從而造成系統負載極高或者響應遲緩。比如CPU過渡使用會造成大量程序等待CPU資源,系統響應變慢,等待會造成程序數增加,程序增加又會造成記憶體使用增加,記憶體耗盡又會造成虛擬

iOS效能調(全)---記憶體優化和UI優化

iOS應用效能調優的25個建議和技巧 本文來自iOSTutorial Team 的 Marcelo Fabri,他是Movile的一名 iOS 程式設計師。這是他的個人網站:,你還可以在Twitter上關注。 效能對 iOS 應用的開發尤其重要,如果你