編譯安裝nmon

2022-12-21 06:01:27

nmon 是什麼?

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

參考: