编译安装nmon

news2025/2/2 22:38:44

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,地址如下:

  • makefile下载地址:https://jaist.dl.sourceforge.net/project/nmon/makefile

  • 源码下载地址:https://sourceforge.net/projects/nmon/files/

源码一般名称为 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》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/103927.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【探索Spring底层】13.深入DispatcherServlet

文章目录1. DispatcherServlet概述2. DispatcherServlet的初始化时机3. DispatcherServlet初始化执行的操作4. RequestMappingHandlerMapping 基本用途5. RequestMappingHandlerAdapter 基本用途6. 参数和返回值解析器1. DispatcherServlet概述 DispatcherServlet是SpringMVC的…

AMS启动流程——APP启动过程

AMS流程图 基本慨念 1.zygote zygote意为“受精卵“。Android是基于Linux系统的,而在Linux中,所有的进程都是由init进程直接或者是间接fork出来的,zygote进程也不例外。 在Android系统里面,zygote是一个进程的名字。Android是基…

Effective C++(三):资源管理

个人读书记录,不适用教学内容。 目录 条款13:以对象管理资源 条款14:在资源管理类中小心copying行为 条款15:在资源管理类中提供对原始资源的访问 条款16:成对使用new和delete时要采取相同形式 条款17&#xff1a…

cubeIDE开发, STM32实时时钟(RTC)写入及读取日历时间开发要点

一、RTC简介 实时时钟的缩写是RTC(Real_Time Clock),核心是晶振,晶振频率一般为32768 Hz 。它为分频计数器提供精确的与低功耗的实基信号。它可以用于产生秒、分、时、日等信息。为了确保时钟长期的准确性,晶振必须正常工作,不能够…

中小企业的公司财务管理系统

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字): 本课题研究对象是中小企业财务管理系统,设计采用自己开发实践和所学知 识,系统部分主要分为以下…

【圣诞树代码】送她六棵圣诞树,祝她圣诞快乐~(送女朋友必备!)

“ 六棵圣诞树,满足她圣诞愿望 ” 距离25号圣诞节只有几天了,程序员有属于程序员的浪漫,这不来了~ 如果一颗圣诞树不够,那就送她六棵,祝她圣诞快乐~ 直接上效果图—— 01 02 03 04 05 06 代码如下: 第…

[1184]FinalShell下载安装

文章目录FinalShell介绍初步使用更换背景图连接记录删除FinalShell介绍 官网:http://www.hostbuf.com/ http://www.hostbuf.com/?install_fs FinalShell 简介: FinalShell 相当于 xshell ftp 的组合,即:FinalShell xshell f…

【计算机考研408】中断处理流程

中断请求 中断源是请求CPU中断的设备或事件,一台计算机允许有多个中断源。每个中断源向CPU发出中断请求的时间是随机的。 中断响应判优 中断响应优先级是指CPU响应中断请求的先后顺序。当多个中断源同时提出请求时,需通过中断判优逻辑来确定响应哪个中…

Python asyncore socket客户端开发基本使用

目录 介绍 1.定义类并且继承 asyncore.dispatcher 2.实现类中的回调代码 调用父类方法 创建 socket 对象 连接服务器 3.创建对象并且执行 asyncore.loop 进入运行循环 服务端示例代码 运行结果 注意: 介绍 asyncore库是python的一个标准库,提…

作为程序员,你离拿offer就差这个免费且好用的简历制作工具

为什么你的简历总是石沉大海?为什么你投递的岗位迟迟得不到回应?除了岗位招满、HR没看到以及竞争太激烈等客观因素外,最重要的是——“简历”出现了问题。 “简历”就像名片一样,在面试和求职的过程中,一份优质的简历…

数字孪生城市项目的关键技术展望

智慧城市是社会空间、物理空间和信息系统三元有机融合的条件下城市智慧化转型的新型态, 运用以数字孪生为代表的新一代信息化技术优化城市系统, 提升城市品质和综合竞争力, 从而实现可持续发展成为智慧城市构建的新趋势。 数字孪生城市项目的关键技术 北京智汇云舟科技有限公司…

chrome的几种存储storage模式

Storage生命周期存放数据大小与服务器通信localStore 除非被清除,否则永远保存 一般5MB 仅在客户端(即浏览器)中SessionStorage仅在当前会话下有效,关闭页面或者浏览器后被清除 一般5MB 保存,不参与和服务器的通信Cookies一般由服务器生成&a…

荣盛生物将再次上会:前三季度收入约2亿元,曾被暂缓审议

近日,上海证券交易所披露的信息显示,上海荣盛生物药业股份有限公司(下称“荣盛生物”)将于2022年12月26日接受科创板上市委员会的现场审议(即“上会”)。据贝多财经了解,荣盛生物曾于11月7月7日…

TCP滑动窗口、流量控制、拥塞控制

TCP滑动窗口、流量控制、拥塞控制一、滑动窗口二、流量控制三、拥塞控制一、滑动窗口 上篇博客我们介绍了TCP报文结构、确认应答机制、超时重传机制、连接管理机制。 TCP保证了可靠传输,但是失去了效率。那么怎么样尽可能提高传输效率呢??&a…

react笔记_07组件实例化对象的三大属性

目录前提状态(state)作用状态使用总结属性(props)展开运算符复习props-作为属性传入数据props-使用展开运算符展开对象props-进行数据类型限制propTypes语法校验规则举例说明defaultProps语法举例说明refs字符串形式的ref语法举例说明注意点回调形式的ref什么叫做回调&#xff…

RT-Thread 简介

1.RT-Thread 概述 RT-Thread,全称是Real Time-Thread,顾名思义,它是一个嵌入式实时多线程操作系统, 基本属性之一是支持多任务,允许多个任务同时运行并不意味着处理器在同一时刻真地执行了多个任务。 事实上&#xff…

Redis实战——签到统计(BitMap的用法)

1. 什么是BitMap 我们针对签到功能完全可以通过mysql来完成,比如说以下这张表 但是,用户一次签到,就是一条记录,假如有1000万用户,平均每人每年签到次数为10次,则这张表一年的数据量为 1亿条。 每签到一次…

js实现图片的放大缩小(鼠标长按拖拽、鼠标滚轮控制放大缩小)

系列文章目录 文章目录系列文章目录背景与效果图1.背景如下(功能图):2.效果图如下:拖拽后的效果缩放的效果放大的效果一、功能:支持鼠标长按拖拽1.鼠标事件:2.拖拽功能流程3.拖拽部分代码如下二、功能&…

HTTP报文详解

个人博客地址: http://xiaohe-blog.top/ 文章目录1. 请求1.1 请求行1.2 请求头1.3 空白行1.4 请求体2. 响应2.1 状态行2.2 响应头2.3 空白行2.4 响应体2.5 HTTP报文总结3. HTTP方法4. GET与POST的区别5. 状态码1. 请求 1.1 请求行 请求方式 请求地址 请求协议版本号…

指针进阶1 2

字符指针 int main() {char ch q;char* pa &ch;return 0; }不仅可以这样写还可以指向一个字符串 int main() {/*char ch q;char* pa &ch;*/char* ph "hello world";printf("%c\n", *ph);//打印遇到\0才会结束,没数据会打印随机值…