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,如果對你有所幫助,歡迎點贊、關注、評論。本文就到這裏了。
參考: