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,如果对你有所帮助,欢迎点赞、关注、评论。本文就到这里了。

参考:

编译安装nmon的更多相关文章

  1. Centos6.5下编译安装mysql 5.6

    一:卸载旧版本 使用下面的命令检查是否安装有MySQL Server rpm -qa | grep mysql 有的话通过下面的命令来卸载掉 rpm -e mysql //普通删除模式 rpm -e ...

  2. CENTOS 6.5 平台离线编译安装 PHP5.6.6

    一.下载php源码包 http://cn2.php.net/get/php-5.6.6.tar.gz/from/this/mirror 二.编译 编译之前可能会缺少一些必要的依赖包,加载一个本地yum ...

  3. Linux下编译安装Vim8.0

    什么是Vim? Vim 是经典的 UNIX 编辑器 Vi 的深度改良版本.它增加了许多功能,包括:多级撤销.格式高亮.命令行历史.在线帮助.拼写检查.文件名补完.块操作.脚本支持,等等.除了字符界面版 ...

  4. OpenSUSE下编译安装OpenFoam

    在不是Ubuntu系统下安装OpenFoam,需要采用编译安装的方式.以下以OpenSuSE为例进行编译安装. 1 软件包准备 需要下载两个程序包: OpenFOAM-4.x-version-4.1. ...

  5. 不要着急改代码,先想想--centos 6.8下编译安装tmux

    诸位读者新年好,2017开年第一篇博客,请允许我先问候一下看到这篇博客的诸位.写博客是我2017年定下的目标之一,希望我会坚持下去. 最近打算尝试一下tmux这个神器,于是有了这一篇关于思维方式的Bl ...

  6. protobuf的编译安装

    github地址:https://github.com/google/protobuf支持多种语言,有多个语言的版本,本文采用的是在centos7下编译源码进行安装. github上有详细的安装说明: ...

  7. 编译安装mysql

    参考:http://www.centoscn.com/CentosServer/www/2015/0422/5245.html 安装mysql5.6.17 1.按照标准需要给mysql创建所属用户和用 ...

  8. 编译安装zabbix3.2

    1.1 环境准备 系统环境准备:redhat 6.6 64位mysql-5.6.34php-5.6.28zabbix-3.2.1配置前先关闭iptables和SELINUX,避免安装过程中报错. # ...

  9. centos系统编译安装nginx+php环境另加独立mysql教程

    以前看过的安装nginx+php环境都带了mysql数据库了,这个是因为很多站长都是nginx+php+mysql都在同一台服务器了,那么今天我们是单独处理了,一个是nginx+php环境,然后mys ...

  10. Nginx编译安装(Centos)

    前言 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大 ...

随机推荐

  1. PAT (Basic Level) Practice 1014 福尔摩斯的约会 分数 20

    大侦探福尔摩斯接到一张奇怪的字条: 我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm   大侦探很快就明白了,字 ...

  2. FastJson序列化对象复杂时出错问题解决

    FastJson序列化对象复杂时出错问题解决 针对复杂的对象,如Map<String, List<Map<String, XxxObject<A, B, C>>&g ...

  3. MatrixOne从入门到实践02——源码编译

    MatrixOne从入门到实践--源码编译 ​ 在部署MatrixOne前,我们可能会比较纠结使用哪个版本合适,MatrixOne在github上有各个版本的Releases,包含源码包和适用于Lin ...

  4. 8.RabbitMQ系列之RPC

    1. RPC Remote Procedure Call:远程过程调用,一次远程过程调用的流程即客户端发送一个请求到服务端,服务端根据请求信息进行处理后返回响应信息,客户端收到响应信息后结束 2. C ...

  5. Linux学习记录---(1、基本命令)

    文章目录 1 .基本命令 1.1.查看当前文件夹下的文件 1.2.进入某一个文件夹 1.3.一次进入多个文件夹 1.4.返回上一级 1.5.直接进入根目录 1.6.创建一个目录 2.Redis中的相关 ...

  6. 设计模式常用的UML图------类图

    关系 UML将事物之间的联系归纳为6种,对应响应的图形 关联 定义:表示拥有的关系,具有方向性,一个类单向访问一个类,为单向关联.两个类可以相互访问,为双向关联. 聚合 定义:整体与部分的关系. 组合 ...

  7. Fibonacci数列 与 杨辉三角

    Fibonacci数列:除第一个与第二个数之外,其余数均由前两个数相加得到: 1, 1, 2, 3, 5, 8, 13, 21, 34, ... 通过生成器,程序如下: def fib(max): m ...

  8. 自动化运维?看看Python怎样完成自动任务调度⛵

    作者:韩信子@ShowMeAI Python3◉技能提升系列:https://www.showmeai.tech/tutorials/56 本文地址:https://www.showmeai.tech ...

  9. 定制ASP.NET Core的身份认证

    大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进. 在本章,我们将学习如何定制ASP.NET Core认证机制.微软把安全认证当做AS ...

  10. vue3和vue2 的区别,vue3和vu2到底哪个好呢?

    vue3 正式发布有两年多了,之前也做过一些学习和研究.vue3 发布后给某培训机构开发了一套vue3课程课件,自己也开源了一套基于vue3的后台管理系统(因为个人懒的原因,半年后才上传到gitHub ...