1. 程式人生 > >Shell指令碼程式設計——監控系統記憶體之free

Shell指令碼程式設計——監控系統記憶體之free

    應用程式設計中,比較常見的錯誤是記憶體方面的問題,比如記憶體洩漏。記憶體問題帶來的影響較廣泛,大至記憶體耗盡(OutOfMemory)或系統崩潰,小至拖慢程序的執行速度。而且,很多系統為了加快程序的啟動速度,採用了預載入技術,當諸多預載入的守護程序長時間不用的時候,這也會佔用系統的一部分資源,包括記憶體。為了發現問題或除錯程式,就很有必要監控系統的記憶體使用狀況。系統記憶體的監控方法有free、ps、pmap、procfs等。

    先看下眾所周知的free工具。

    free命令顯示物理記憶體和交換空間的記憶體統計資料。指定-t引數可以顯示總記憶體數量,指定-b引數可以按位元組為單位進行顯示,使用-m則以兆為單位顯示,預設情況下是以kB(千位元組)為單位的。free命令也可以使用-s引數加一個延遲時間(單位:秒)連續執行,如下所示:
[workbox: /home/luojianh ]

$ free -s 1
[workbox: /home/luojianh ]$ free -s 1
             total       used       free     shared    buffers     cached
Mem:      33264720    7356628   25908092     0     306756    3866276
-/+ buffers/cache:       3183596  30081124
Swap:     32764556               0   32764556

    free加-t引數統計total值。
[workbox: /home/luojianh ]$ free -t


             total       used       free     shared    buffers     cached
Mem:      33264720   23963860    9300860          0     321508    4725668
-/+ buffers/cache:   18916684   14348036
Swap:     32764556          0   32764556
Total:    66029276   23963860   42065416

    第一行Mem和第二行的差別在於buffers/cached,這兩個是實際上未必在使用的記憶體。他們的關係是:
used1-used2=free2-free1=buffers+cached


總共的實體記憶體為:total1=used1+free1=used2+free2。(1表示第一行,2表示第二行)

    重點說明其中的buffers和cached欄位。buffers是block device cache,cached是memory paging cache。前者是用於訪問不同速度裝置的緩衝,後者是用於訪問檔案的快取(比訪問flash等disk裝置快得多!)。

    用free命令監控系統的總體記憶體使用狀況,shell指令碼如下:

LOG_FILE=/tmp/memory_status.log
echo "Total  Used  UsingRate" >> ${LOG_FILE}
free -s 3 >> ${LOG_FILE}.tmp
while true; do
    TOTAL=$(free -t | grep Mem | awk '{print $2}')
    USED=$(free -t | grep cache: | awk '{print $3}')
    RATE_USED=`expr $USED / $TOTAL`
    echo "$TOTAL $USED $RATE_USED" >> ${LOG_FILE}
    sleep 3
done

    附帶提一下,vmstat、top等系統命令也包含部分記憶體資訊。如下所示。
[email protected]:/root ]$ vmstat 1
procs    -----------memory----------     ---swap--   -----io----  --system--   -----cpu------ 
 r  b   swpd   free   buff  cache   si   so     bi   bo   in    cs    us sy id wa st
 8  1   0 2563344 467536 7745908    0    0     5   35    2    6    3  20 77  0 0
 7  0   0 2564116 467576 7747912    0    0  2036  632  6620 437995  30  51 17  2 0
 2  1   0 2589984 467632 7749200    0    0   408    0  3680 469111  24  58 17  2 0
 8  0   0 2557996 467648 7750060    0    0   160    0  2187 480338  28  54 14  3 0

[email protected]:/root ]$ top
top - 11:51:54 up 4 days, 11:11,  1 user,  load average: 0.27, 0.37, 0.39
Tasks: 200 total,   1 running, 198 sleeping,   0 stopped,   1 zombie
Cpu(s):  0.1%us,  0.6%sy,  0.0%ni, 99.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   2543164k total,  1296080k used,  1247084k free,     7388k buffers
Swap:        0k total,        0k used,        0k free,   916580k cached

……
……

相關推薦

Shell指令碼程式設計——監控系統記憶體free

    應用程式設計中,比較常見的錯誤是記憶體方面的問題,比如記憶體洩漏。記憶體問題帶來的影響較廣泛,大至記憶體耗盡(OutOfMemory)或系統崩潰,小至拖慢程序的執行速度。而且,很多系統為了加快程序的啟動速度,採用了預載入技術,當諸多預載入的守護程序長時間不用的時候,

Shell指令碼程式設計——監控程序記憶體pmap

> pmap 9389 9389:   /usr/local/bin/proc_mgr -f 08048000      8K r-x--  /usr/local/bin/proc_mgr 0804a000      4K rw---  /usr/local/bin/proc_mgr 0804b000 

shell 指令碼監控系統記憶體佔用率、主備機等

執行結果 shell 指令碼實現 #!/bin/sh ########################################################## #作者:LINU_BW #時間:2016-10-28 #功能:監控伺服器系統IP cpu 記憶體 磁碟 主備&nb

從新手到系統管理員(四):Linux Shell指令碼程式設計數學(Part I)

本文由 [茶話匯] – [Qing] 編譯自 [Avishek Kumar] 轉載請註明出處 這部分主要討論數學相關的shell指令碼程式設計。 加法運算 新建一個檔案“Addition.sh”,輸入下面的內容並賦予其可執行的許可權。 [code language=”bash”] #!/bin/b

Linux系統記憶體監控全面講解free命令

   [[email protected] tmp]# free total used free shared buffers cached Mem: 3266180 3250004 16176 0 110652 2668236 -/+ buffers/cache: 471116 2795

使用shell 指令碼對 Linux 系統程序的CPU使用率與記憶體資源進行監控

Shell 簡介 Shell 語言對於接觸 LINUX 的人來說都比較熟悉,它是系統的使用者介面,提供了使用者與核心進行互動操作的一種介面。它接收使用者輸入的命令並把它送入核心去執行。實際上 Shell 是一個命令直譯器,它解釋由使用者輸入的命令並且把它們送到核心。它沒有一般程式語言的“編譯 - 連結 - 

shell指令碼實現linux系統監控

一、系統監控要監控什麼? 硬體 CPU: [[email protected] ~]# top | sed -n '3p' 記憶體: 檢視系統記憶體的使用情況: 硬碟: 檢視磁碟的使用情況 系統 負載: 系統執行時間: 檢視作業系統的版

LinuxShell指令碼程式設計

Shell概念  一、概念 Shell 是一個用 C 語言編寫的程式,這個應用程式提供了一個介面,使用者通過這個介面訪問作業系統核心 的服務。Ken Thompson 的 sh 是第一種 Unix Shell,Windows Explorer 是一

Linuxshell指令碼程式設計例項--遍歷所有檔案,並按月份打成zip包

原始檔案形式如下圖: 經過shell指令碼處理之後,按月生成的zip包如下圖: 完成上述工作的shell指令碼如下: #下面這行程式碼並不是註釋,它的作用是表名該指令碼使用哪個shell直譯器 #! /bin/sh #變數賦值,等號=兩邊不能有空格 #需要處理的檔案目錄

Shell指令碼程式設計(一)Shell指令碼簡介

什麼是Shell指令碼 shell script 是利用 shell 的功能所寫的一個『程式 (program)』,這個程式是使用純文字檔案,將一些 shell 的語法與指令(含外部指令)寫在裡面, 搭配正則表示式、管線命令與資料流重導向等功能,以達到我們所想要的處理目的 s

Shell指令碼程式設計(三)執行方式差異(source, sh script, ./script)

利用直接方式或bash執行 該 指令碼 都會使用一個新的 bash 環境來執行指令碼內的指令!也就是說,使用這種執行方式時, 其實 script 是在子程式的 bash 內執行的 知識點 當子程式完成後,在子程式內的各項變數或動作將會結束而不會傳回到父程式中

Shell指令碼程式設計(二)簡單的Shell指令碼練習

練習題1:互動式指令碼(使用者決定變數內容) 程式碼 [[email protected] bin]$ vim showname.sh #!/bin/bash # Program: # User inputs his first name and last

從新手到系統管理員(二):Linux新手學習Shell指令碼程式設計的五個例子

本文由 [茶話匯] – [Qing] 編譯自 [Avishek Kumar] 轉載請註明出處 例子一:繪製特殊圖形 [code language=”bash”] #!/bin/bash MAX_NO=0 echo -n "Enter Number between (5 to 9) : " re

Shell指令碼程式設計——瞭解你的Linux系統必須掌握的20個命令

    要想詳細瞭解你的Linux系統,為系統評估和效能調化提供準確的資訊,那麼,你會經常用到這幾組命令。一. 系統資訊    1. 檢視核心版本、編譯主機、編譯器版本和編譯時間的資訊   cat /proc/version                         

Linux系統shell指令碼程式設計——生產實戰案例(批量檢查線上IP與開放埠)

Linux系統shell指令碼程式設計——生產實戰案例 在日常的生產環境中,可能會遇到需要批量檢查內網目前線上的主機IP地址有哪些,還可能需要檢查這些線上的主機哪些埠是開放狀態,因此依靠手工來

Shell指令碼實現Linux系統和程序資源監控

在伺服器運維過程中,經常需要對伺服器的各種資源進行監控,例如:CPU的負載監控,磁碟的使用率監控,程序數目監控等等,以在系統出現異常時及時報警,通知系統管理員。本文介紹在Linux系統下幾種常見的監控需求及其shell指令碼的編寫。 文章目錄: 1.Linux使用 She

Linux思維導圖shell指令碼程式設計基礎、習題

思維導圖百度雲分享:連結:https://pan.baidu.com/s/1UMvudlv-xEG_pFtOPdCWhg密碼:x6oa 路徑:     外部命令指令碼執行需在路下,cp到路徑某個路徑下或將外部命令路徑加到路徑裡在其他任何地方均可執行;或絕對路徑相對路徑都可以

linux基礎shell指令碼程式設計3 函式陣列

本章主要寫shell有關函式陣列使用 七 函式 7.1 函式的介紹 函式function是由若干條shell命令組成的語句塊,實現程式碼重用和模組化程式設計。  它與shell程式形式上是相似的,不同的是它不是一個單獨的 程序,不能獨立執行,而是shel

Shell指令碼程式設計函式

2016/06/10 1. 指令碼中使用函式建立函式的格式,有兩種:function name {commands}或name() {commands} #!/bin/bash#using a fu

Linux shell指令碼程式設計函式

在編寫功能比較複雜的shell指令碼時,完成具體任務的程式碼有時會被重複使用,bash shell指令碼提供函式特性實現程式碼複用,函式是被賦予名稱的指令碼程式碼塊。 一、建立函式 在bash shell指令碼中建立函式的格式如下: function name() {