编译安装nmon
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,如果对你有所帮助,欢迎点赞、关注、评论。本文就到这里了。
参考:
- 《跟我一起写 Makefile》 作者:陈皓
- 《GCC 参数详解》菜鸟教程
- 《CompilingNmon nmon for Linux - Compiling from the Source Code》
编译安装nmon的更多相关文章
- Centos6.5下编译安装mysql 5.6
一:卸载旧版本 使用下面的命令检查是否安装有MySQL Server rpm -qa | grep mysql 有的话通过下面的命令来卸载掉 rpm -e mysql //普通删除模式 rpm -e ...
- CENTOS 6.5 平台离线编译安装 PHP5.6.6
一.下载php源码包 http://cn2.php.net/get/php-5.6.6.tar.gz/from/this/mirror 二.编译 编译之前可能会缺少一些必要的依赖包,加载一个本地yum ...
- Linux下编译安装Vim8.0
什么是Vim? Vim 是经典的 UNIX 编辑器 Vi 的深度改良版本.它增加了许多功能,包括:多级撤销.格式高亮.命令行历史.在线帮助.拼写检查.文件名补完.块操作.脚本支持,等等.除了字符界面版 ...
- OpenSUSE下编译安装OpenFoam
在不是Ubuntu系统下安装OpenFoam,需要采用编译安装的方式.以下以OpenSuSE为例进行编译安装. 1 软件包准备 需要下载两个程序包: OpenFOAM-4.x-version-4.1. ...
- 不要着急改代码,先想想--centos 6.8下编译安装tmux
诸位读者新年好,2017开年第一篇博客,请允许我先问候一下看到这篇博客的诸位.写博客是我2017年定下的目标之一,希望我会坚持下去. 最近打算尝试一下tmux这个神器,于是有了这一篇关于思维方式的Bl ...
- protobuf的编译安装
github地址:https://github.com/google/protobuf支持多种语言,有多个语言的版本,本文采用的是在centos7下编译源码进行安装. github上有详细的安装说明: ...
- 编译安装mysql
参考:http://www.centoscn.com/CentosServer/www/2015/0422/5245.html 安装mysql5.6.17 1.按照标准需要给mysql创建所属用户和用 ...
- 编译安装zabbix3.2
1.1 环境准备 系统环境准备:redhat 6.6 64位mysql-5.6.34php-5.6.28zabbix-3.2.1配置前先关闭iptables和SELINUX,避免安装过程中报错. # ...
- centos系统编译安装nginx+php环境另加独立mysql教程
以前看过的安装nginx+php环境都带了mysql数据库了,这个是因为很多站长都是nginx+php+mysql都在同一台服务器了,那么今天我们是单独处理了,一个是nginx+php环境,然后mys ...
- Nginx编译安装(Centos)
前言 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大 ...
随机推荐
- 制造企业有可能自行开发ERP系统吗?
当然可以啊! 生产企业对于ERP的需求是一直存在的,但市场上多为标准化的产品,与企业的个性化需求矛盾着. 有很多制造企业自行开发ERP系统啊!只是各个企业成效不同而已,毕竟不同企业的IT开发能力不同而 ...
- spring cron表达式源码分析
spring cron表达式源码分析 在springboot中,我们一般是通过如下的做法添加一个定时任务 上面的new CronTrigger("0 * * * * *")中的参数 ...
- PHP全栈开发(八):CSS Ⅸ dispaly & visibility
display用来设置一个元素如何显示: visibility用来设置一个元素可见还是隐藏. visibility:hidden: 这个语句会使元素在HTML页面中不可见.但是这个元素仍然会占用HTM ...
- 把train数据集生成txt(test同理)
import cv2 import numpy as np import os import sys import pickle data_dir = os.path.join("./&qu ...
- C++ 栈和典型迷宫问题
C++ 栈和迷宫问题 1. 前言 栈是一种受限的数据结构,要求在存储数据时遵循先进后出(Last In First Out)的原则.可以把栈看成只有一个口子的桶子,进和出都是走的这个口子(也称为栈顶) ...
- VLQ & Base64 VLQ 编码方式的原理及代码实现
目录 VLQ Base64 VLQ VLQ VLQ (Variable-length quantity)是一种通用的,使用任意位数的二进制来表示一个任意大的数字的一种编码方式. 编码实现: ** 对数 ...
- 个人数据保全计划:(1) NAS开箱
前言 从几年前第一个硬盘故障导致参赛的文件丢失之后,我就开始意识到数据安全的重要性,开始用各种云盘做备份,当时还不是百度云一家独大,我们也都没意识到网盘备份是极其不靠谱的行为,直到因为某些不可抗力因素 ...
- hwj是猪
黄伟佳不爱我了吧唧吧唧
- Vulnhub 靶机 pwnlab_init 渗透——详细教程
1. 下载 pwnlab_ini 靶机的 .ova 文件并导入 VMware: pwnlab下载地址:PwnLab: init ~ VulnHub 导入VMware时遇到VMware上虚机太多,无法确 ...
- CSS 渐变锯齿消失术
在 CSS 中,渐变(Gradient)可谓是最为强大的一个属性之一. 但是,经常有同学在使用渐变的过程中会遇到渐变图形产生的锯齿问题. 何为渐变锯齿? 那么,什么是渐变图形产生的锯齿呢? 简单的一个 ...
