编译安装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所开发,供俄国大 ...
随机推荐
- 谣言检测——(PSA)《Probing Spurious Correlations in Popular Event-Based Rumor Detection Benchmarks》
论文信息 论文标题:Probing Spurious Correlations in Popular Event-Based Rumor Detection Benchmarks论文作者:Jiayin ...
- 计算机三大硬件和操作系统以及python解释器
今日分享内容概要 计算机五大组成部分详解 计算机三大核心硬件 操作系统 编程与编程语言 编程语言的发展历史 编程语言的分类 python解释器 python解释器多版本共存 分享详细 计算机五大组成部 ...
- 220726 T1 树染色问题 (树的直径)
题目描述 高钧在校园中漫步时,经过了一棵树.这时,几个同学突然冒出来控制住了他. 这棵树有 nn 个节点, 每个节点有黑白两种颜色, 为了更好的 alb , 需要把所有节点染成同一种颜色. 为了更好的 ...
- 【Java8新特性】- Optional应用
Java8新特性 - Optional应用 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! ...
- spark之交集并集差集拉链
spark之交集并集差集拉链 def main(args: Array[String]): Unit = { val sparkConf = new SparkConf().setMaster(&qu ...
- 什么是齐博/齐博CMS之X1?
齐博x1:核心+模块+插件+钩子的理念把系统的灵活性及拓展性做到了极致!!!齐博X1是齐博软件基于thinkphp5开发的内容管理系统,拓展性非常强,后台一键升级,后台提供丰富的频道模块云市插件市场. ...
- java学习之JSP
0x00前言 JSP:全拼写:java Server pages:java 服务器端页面 可以理解为一个特殊的页面:可以定义html代码也可以定义java的代码 定义:JSP是简化Servlet编写的 ...
- 表单的子元素可不在form标签内
表单是网页用于向服务器发送数据的元素.其用法类似下面: <form method="POST" action="/login"> <input ...
- [leetcode] 994. Rotting Oranges
题目 You are given an m x n grid where each cell can have one of three values: 0 representing an empty ...
- 【ELK解决方案】ELK集群+RabbitMQ部署方案以及快速开发RabbitMQ生产者与消费者基础服务
前言: 大概一年多前写过一个部署ELK系列的博客文章,前不久刚好在部署一个ELK的解决方案,我顺便就把一些基础的部分拎出来,再整合成一期文章.大概内容包括:搭建ELK集群,以及写一个简单的MQ服务. ...
