nmon 是什麼?
nmon(Nigel's performance Monitor for Linux)是一種Linux效能監視工具,當前它支援 Power/x86/x86_64/Mainframe/ARM 這五種 CPU 架構的 Linux,能將監控到的資料儲存為 JSON 格式便於其他工具進行分析和展示。
為什麼要編譯安裝 nmon?
雖然 nmon 對很多Linux發行版(如Red Hat, SUSE, Ubuntu, Fedora, OpenSUSE 等)進行了支援,你可以在這些發行版的源中找到它的包並安裝它。
對於未提供預編譯包的發行版就需要編譯安裝它了。
如何編譯安裝 nmon?
nmon 官方提供了編譯安裝指南,即透過修改makefile + 一個原始碼檔案 來編譯 nmon,地址如下:
原始碼一般名稱為 lmon版本號.c,如當前最新的是 lmon16n.c,也可以在編譯指南列表裡取最新的下載
準備好這兩個檔案是第一步,接下來還需要問自己幾個問題,透過以下幾個問題就能知道該使用哪幾個編譯引數如何修改makefile:
- 問題1:makefile 中是否包含我需要的環境的指令碼(標籤)?
- 問題2:nmon 將執行環境的CPU架構是什麼?
- 問題3:nmon 將執行環境的Linux核心版本是否小於2.6.18?
問題1包含所需指令碼
問題1中如果是包含,可以直接放到編譯環境(安裝有gcc*
、ncurses-dev*
、make
的Linux環境,以Ubuntu舉例就是 :sudo apt update && sudo apt install -y gcc* ncurses-dev* make
),將原始碼放到 makefile 同級目錄,進入目錄執行 ln lmon版本.c lmon.c && make 標籤名
。舉個例子,需要Ubuntu18.04 x86_64架構的nmon,只需要開啟makefile,看看是否可以找到如下圖類似指令碼:
紅框中的標籤名由三部分組成,nmon + AMD64 + ubuntu1804,表示 x86_64的ubuntu18.04的 nmon,這個標籤名一般與下邊cc命名行的-o後的引數名一致,即最終也會打出同名目標檔案。
找到需要的指令碼,這裡用lmon16n.c,則命令如下:
sudo apt update
sudo apt install -y gcc* ncurses-dev* make
ln lmon16n.c lmon.c
make nmon_AMD64_ubuntu1804
編譯完成後,會生成名為nmon_AMD64_ubuntu1804的目標檔案,可以把它改名為nmon 放到需要使用 nmon 的作業系統上做監控了。
ps: 如果有對應的編譯指令碼,後邊就不用看了。
問題1不包含所需指令碼
如果沒有對應的指令碼,那隻好再深入一點點看看makefile的結構,瞭解下引數都有啥:
如圖,紅框表示目標檔名或makefile標籤名;藍框表示必需的檔案,可不寫;黃框表示傳入CPU架構引數;綠框指定指令碼中對某發行版做的最佳化。一般-D
和後邊緊跟的引數 就相當於 C 語言中的 #define XXX
。所以原始碼中肯定有條件判斷,如下圖UBUNTU
既然這些都明白了,我們只需要確認有哪些可用引數,可不就能編譯出需要的版本了麼。
簡單看了下原始碼,整理下常用的引數。
常用CPU架構引數:
- POWER - PowerPC
- MAINFRAME - Mainframe
- X86 - x86 與 x86_64 通用
- ARM - arm通用
常用發行版引數:
- SLES/SLES12/SLES113 - Suse Linux Enterprise Server
- RHEL6/RHEL7 - RedHat6 和 RedHat7與8
- UBUNTU - Ubuntu全系列
Linux核心版本相關引數:
- PRE_KERNEL_2_6_18/KERNEL_2_6_18 - 用於Linux核心版本等於或低於2.6.18版本,前者用於16j及之後版本,後者用於之前的版本
英偉達顯示卡相關引數:
- NVIDIA_GPU
再舉個編譯ARM架構CentOS7.8 核心版本5.4.200的nmon例子:
在makefile指令碼最下新增兩行:
nmon_ARM_centos7:
cc -o nmon_ARM_centos7 $(FILE) $(CFLAGS) $(LDFLAGS) -D ARM
主要兩點考慮,是arm架構 用引數
-D ARM
,核心版本大於2.6.18不用加核心相關引數。注意:cc那行前邊不是空格,必須是TAB製表符
目標檔案已經編譯成功了,可以 mv
改名複製到需要的環境中了,當然不改也行隨你。
總結
簡單介紹了下 nmon 是什麼、編譯安裝它的原因,以及如何編譯 nmon,如果對你有所幫助,歡迎點贊、關注、評論。本文就到這裡了。
參考: