5

编译安装nmon - 东北小狐狸

 1 year ago
source link: https://www.cnblogs.com/hellxz/p/16995193.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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,也可以在编译指南列表里取最新的下载

1149398-20221220202516379-805609933.png

准备好这两个文件是第一步,接下来还需要问自己几个问题,通过以下几个问题就能知道该使用哪几个编译参数如何修改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,看看是否可以找到如下图类似脚本:

1149398-20221220203640095-514849780.png

红框中的标签名由三部分组成,nmon + AMD64 + ubuntu1804,表示 x86_64的ubuntu18.04的 nmon,这个标签名一般与下边cc命名行的-o后的参数名一致,即最终也会打出同名目标文件。

找到需要的脚本,这里用lmon16n.c,则命令如下:

sudo apt updatesudo apt install -y gcc* ncurses-dev* makeln lmon16n.c lmon.cmake nmon_AMD64_ubuntu1804

编译完成后,会生成名为nmon_AMD64_ubuntu1804的目标文件,可以把它改名为nmon 放到需要使用 nmon 的操作系统上做监控了。

ps: 如果有对应的编译脚本,后边就不用看了。

问题1不包含所需脚本

如果没有对应的脚本,那只好再深入一点点看看makefile的结构,了解下参数都有啥:

1149398-20221220205046243-1311986769.png

如图,红框表示目标文件名或makefile标签名;蓝框表示必需的文件,可不写;黄框表示传入CPU架构参数;绿框指定脚本中对某发行版做的优化。一般-D和后边紧跟的参数 就相当于 C 语言中的 #define XXX。所以源码中肯定有条件判断,如下图UBUNTU

1149398-20221220210049049-883827847.png

既然这些都明白了,我们只需要确认有哪些可用参数,可不就能编译出需要的版本了么。

1149398-20221220210525445-899357717.png

简单看了下源码,整理下常用的参数。

常用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制表符

1149398-20221220213129813-2117022896.png

1149398-20221220213527278-1806850647.png

目标文件已经编译成功了,可以 mv 改名复制到需要的环境中了,当然不改也行随你。

简单介绍了下 nmon 是什么、编译安装它的原因,以及如何编译 nmon,如果对你有所帮助,欢迎点赞、关注、评论。本文就到这里了。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK