Linux 記憶體分析工具——free命令

来源:https://www.cnblogs.com/54chensongxia/archive/2020/02/19/12330592.html
-Advertisement-
Play Games

在 系統經常被用作伺服器系統。當伺服器記憶體吃緊的時候, 命令是我們最常使用的記憶體分析工具。 使用介紹 命令可以顯示 系統中空閑的、已用的物理記憶體及 記憶體,及被內核使用的 。在 系統監控的工具中, 命令是最經常使用的命令之一。 free命令使用起來非常簡單。 下麵列舉一個我最常用的命令格式 輸出顯示如 ...


Linux系統經常被用作伺服器系統。當伺服器記憶體吃緊的時候,free命令是我們最常使用的記憶體分析工具。

free使用介紹

free命令可以顯示Linux系統中空閑的、已用的物理記憶體及swap記憶體,及被內核使用的buffer。在Linux系統監控的工具中,free命令是最經常使用的命令之一。

free命令使用起來非常簡單。

# 命令格式
free [參數]
# 可選參數
-b  以Byte為單位顯示記憶體使用情況。 
-k  以KB為單位顯示記憶體使用情況。 
-m  以MB為單位顯示記憶體使用情況。
-g   以GB為單位顯示記憶體使用情況。
-h   根據記憶體大小自動選擇合適的單位顯示
-o  不顯示緩衝區調節列。 
-s<間隔秒數>  持續觀察記憶體使用狀況。
-c<顯示次數>   和-s配合使用
-t  顯示記憶體總和列。 
-V  顯示版本信息。

下麵列舉一個我最常用的命令格式

#顯示所有的記憶體信息,每隔兩秒顯示一次,一共顯示兩次
free -ah -s 2 -c 2

輸出顯示如下

             total       used       free     shared    buffers     cached  available
Mem:          6.6G       5.5G       1.0G       1.1M       247M       3.5G         0B
-/+ buffers/cache:       1.8G       4.8G 
Swap:         5.0G       106M       4.9G 

下麵對這些參數做下說明。

free輸出參數說明

先對上面紅框中的數據做下說明。Men表示具體的物理記憶體,free從多個維度統計了物理記憶體的情況,每個維度的含義如下:

  • total:總計物理記憶體的大小。
  • used:已使用的物理記憶體的大小。
  • free:可用物理記憶體有多少。
  • shared:多個進程共用的記憶體總額。
  • buffers:寫入磁碟記憶體緩衝區的大小(經常進行磁碟IO的效率比較低,所以先將要寫入磁碟的文件進行一定數量的緩衝,等緩衝數據到達一定大小是一次性寫進磁碟,提升效率)
  • cached:從磁碟中讀取內容的緩存大小(原理差不多)。
  • available:下麵會介紹。

  • -buffers/cache:表示被程式實實在在吃掉的記憶體,比如上圖中used記憶體是5.5G,但是真正被應用程式使用的記憶體才1.8G,其他被占據的記憶體主要用來cache數據了,也就是上面的3.5G。
  • +buffers/cache:表示應用程式還可以可以申請的記憶體總數。

上圖中最後一行是swap分區的使用情況,下麵會詳細介紹。

free參數和available參數的區別

在 free 命令的輸出中,有一個 free 列,同時還有一個 available 列。這二者到底有何區別?

free 是真正尚未被使用的物理記憶體數量。至於 available 就比較有意思了,它是從應用程式的角度看到的可用記憶體數量。Linux 內核為了提升磁碟操作的性能,會消耗一部分記憶體去緩存磁碟數據,就是我們介紹的 buffer 和 cache。所以對於內核來說,buffer 和 cache 都屬於已經被使用的記憶體。當應用程式需要記憶體時,如果沒有足夠的 free 記憶體可以用,內核就會從 buffer 和 cache 中回收記憶體來滿足應用程式的請求。所以從應用程式的角度來說,available = free + buffer + cache。請註意,這隻是一個很理想的計算方式,實際中的數據往往有較大的誤差。

但是上面的available參數為什麼輸出是0呢?請看官方文檔的說明

The -a switch shows the available memory (if supported by the running kernel and enabled with sysctl -w vm.meminfo_legacy_layout=0 ; shows zero when unsupported or disabled). The produced output is wider than 80 characters.

這個參數的輸出需要操作系統內核支持,如果內核不支持的話就固定輸出一個0。

交換空間(swap space)

swap space 是磁碟上的一塊區域,可以是一個分區,也可以是一個文件。所以具體的實現可以是 swap 分區也可以是 swap 文件。當系統物理記憶體吃緊時(所謂的吃緊,應該是指當釋放了Cache和Buffer的記憶體,記憶體還是不夠用~),Linux 會將記憶體中不常訪問的數據保存到 swap 上,這樣系統就有更多的物理記憶體為各個進程服務,而當系統需要訪問 swap 上存儲的內容時,再將 swap 上的數據載入到記憶體中,這就是常說的換出和換入。交換空間可以在一定程度上緩解記憶體不足的情況,但是它需要讀寫磁碟數據,所以性能不是很高。

現在的機器一般都不太缺記憶體,如果系統預設還是使用了 swap 是不是會拖累系統的性能?理論上是的,但實際上可能性並不是很大。並且內核提供了一個叫做 swappiness 的參數,用於配置需要將記憶體中不常用的數據移到 swap 中去的緊迫程度。這個參數的取值範圍是 0~100,0 告訴內核儘可能的不要將記憶體數據移到 swap 中,也即只有在迫不得已的情況下才這麼做,而 100 告訴內核只要有可能,儘量的將記憶體中不常訪問的數據移到 swap 中。在 ubuntu 系統中,swappiness 的預設值是 60。如果我們覺著記憶體充足,可以在 /etc/sysctl.conf 文件中設置 swappiness:

vm.swappiness=10

如果系統的記憶體不足,則需要根據物理記憶體的大小來設置交換空間的大小。

參考


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 我們經常會有這樣的需求,外出出差需要訪問公司內部網路資源;分佈在各地的分公司需要組建網路連通;在國內訪問google等國家防火牆屏蔽的網站。架設專線對絕大多數我們來說觸不可及,VPN技術應運而生。目前應用最為廣泛的區域網聯網技術是虛擬專用網技術,這是建立在internet基礎上的一種價格低廉的隧道技 ...
  • write 解釋 語法 示例 wall 解釋 語法 示例 ping 解釋 語法 示例 ifconfig 解釋 語法 示例 mail 解釋 語法 mail命令不存在 示例 last 解釋 語法 示例 lastlog 解釋 語法 示例 traceroute 解釋 語法 traceroute命令不存在 示 ...
  • shutdown 解釋 語法 示例 其他關機命令 其他重啟命令 系統運行級別 查看運行級別的方法 logout 解釋 ...
  • 目錄 gzip gunzip tar(打包壓縮) tar(解包解壓) zip unzip bzip2 bunzip2 gzip 解釋 語法 示例 gzip只能壓縮文件,而且壓縮後,原文件不在了 gunzip 解釋 語法 示例 tar 解釋 語法 示例 打包並壓縮文件 tar czf Japan.ta ...
  • 電腦系統概論 電腦系統 電子數字電腦,是一種能夠自行按照已設定的程式進行數據處理的電子設備,是軟體與硬體相結合、面向系統、側重應用的自動化求解工具,電腦技術迅猛發展,從科學計算、數據處理等應用領域,迅速擴展到實時控制、輔助設計、智能模擬等諸多領域,今天電腦無所不在,深入社會生活的各個領域, ...
  • everspin提供了8/16-bit的DDR4-1333MT/s(667MHz)介面,但與較舊的基於DDR3的MRAM組件一樣,時序上的差異使得其難以成為DRAM(動態隨機存取器)的直接替代品。 最新的1Gb容量STT-MRAM擴大了MRAM的吸引力,但Everspin仍需努力追趕DRAM的存儲密 ...
  • 如果忘記了root密碼可以進入緊急模式恢復密碼。 centos7中如下: 重啟後進入救援模式,按下e鍵進入 找到ro改為rw init=/sysroot/bin/sh 改完按下ctrl+X進入緊急模式,此時只是啟動一個shell環境,並沒有真正的啟動系統。 進入emergency mode。 換根, ...
  • 常見的虛擬機有2個: VM VirtualBox,這個是Oracle的,免費 VMware 收費 VMware的下載 不要點菜單欄的“下載”,那個要註冊|登錄,很麻煩。 CentOS的下載 要開啟虛擬化 新建虛擬機 我使用的是VMware-15.5.1、CentOS-8.1.1911-x86_64- ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...