Linux性能监控与调优工具

Linux性能监控与调优工具


文章目录

  • Linux性能监控与调优工具
  • 1.使用top、 vmstat、 iostat、 sysctl等常用工具
  • 2.使用高级分析手段, 如OProfile、 gprof
  • 4.使用LTP进行压力测试
  • 5.使用Benchmark评估系统


除了保证程序的正确性以外, 在项目开发中往往还关心性能和稳定性。 这时候, 我们往往要对内核、应用程序或整个系统进行性能优化。 在性能优化中常用的手段如下。

1.使用top、 vmstat、 iostat、 sysctl等常用工具

top命令用于显示处理器的活动状况。在缺省情况下,显示占用CPU最多的任务,并且每隔5s做一次刷新;vmstat命令用于报告关于内核线程、虚拟内存、磁盘、陷阱和CPU活动的统计信息;iostat命令用于分析各个磁盘的传输闲忙状况;netstat是用来检测网络信息的工具;sar用于收集、报告或者保存系统活动信息,其中,sar用于显示数据,sar1和sar2用于收集和保存数据。
sysctl是一个可用于改变正在运行中的Linux系统的接口。用sysctl可以读取几百个以上的系统变量,例如用sysctl–a可读取所有变量。
sysctl的实现原理是:所有的内核参数在/proc/sys中形成一个树状结构,sysctl系统调用的内核函数是sys_sysctl,匹配项目后,最后的读写在do_sysctl_strategy中完成,如

echo "1" > /proc/sys/net/ipv4/ip_forward

就等价于:

sysctl –w net.ipv4.ip_forward ="1"

2.使用高级分析手段, 如OProfile、 gprof

OProfile可以帮助用户识别诸如模块的占用时间、循环的展开、高速缓存的使用率低、低效的类型转换和冗余操作、错误预测转移等问题。它收集有关处理器事件的信息,其中包括TLB的故障、停机、存储器访问以及缓存命中和未命中的指令的攫取数量。
OProfile支持两种采样方式:基于事件的采样(Event Based)和基于时间的采样(Time Based)。基于事件的采样是OProfile只记录特定事件(比如L2缓存未命中)的发生次数,当达到用户设定的定值时Oprofile就记录一下(采一个样)。这种方式需要CPU内部有性能计数器(Performace Counter)。基于时间的采样是OProfile借助OS时钟中断的机制,在每个时钟中断,OProfile都会记录一次(采一次样)。引入它的目的在于,提供对没有性能计数器的CPU的支持,其精度相对于基于事件的采样要低,因为要借助OS时钟中断的支持,对于禁用中断的代码,OProfile不能对其进行分析。
OProfile在Linux上分两部分,一个是内核模块(oprofile.ko),另一个是用户空间的守护进程(oprofiled)。前者负责访问性能计数器或者注册基于时间采样的函数,并将采样值置于内核的缓冲区内。后者在后台运行,负责从内核空间收集数据,写入文件。其运行步骤如下。
1)初始化opcontrol–init
2)配置opcontrol–setup–event=…
3)启动opcontrol–start
4)运行待分析的程序xxx
5)取出数据
opcontrol–dump
opcontrol–stop
6)分析结果opreport-l./xxx
用GNU gprof可以打印出程序运行中各个函数消耗的时间,以帮助程序员找出众多函数中耗时最多的函数;还可产生程序运行时的函数调用关系,包括调用次数,以帮助程序员分析程序的运行流程。
GNU gprof的实现原理:在编译和链接程序的时候(使用-pg编译和链接选项),gcc在应用程序的每个函数中都加入名为mcount(_mcount或__mcount,依赖于编译器或操作系统)的函数,也就是说应用程序里的每一个函数都会调用mcount,而mcount会在内存中保存一张函数调用图,并通过函数调用堆栈的形式查找子函数和父函数的地址。这张调用图也保存了所有与函数相关的调用时间、调用次数等的所有信息。
GNU gprof的基本用法如下。
1)使用-pg编译和链接应用程序。
2)执行应用程序并使它生成供gprof分析的数据。
3)使用gprof程序分析应用程序生成的数据。
3.进行内核跟踪,如LTTng
LTTng(Linux Trace Toolkit-next generation,官方网站为http://lttng.org/)是一个用于跟踪系统详细运行状态和流程的工具,它可以跟踪记录系统中的特定事件。这些事件包括:系统调用的进入和退出;陷阱/中断(Trap/Irq)的进入和退出;进程调度事件;内核定时器;进程管理相关事件——创建、唤醒、信号处理等;文件系统相关事件——open/read/write/seek/ioctl等;内存管理相关事件——内存分配/释放等;其他IPC/套接字/网络等事件。而对于这些记录,我们可以通过图形的方式经由lttv-gui查看,如图21.9所示。

4.使用LTP进行压力测试

LTP(Linux Test Project,官方网站为http://ltp.sourceforge.net/)是一个由SGI发起并由IBM负责维护的合作计划。它的目的是为开源社区提供测试套件来验证Linux的可靠性、健壮性和稳定性。它通过压力测试来判断系统的稳定性和可靠性,在工程中我们可使用LTP测试套件对Linux操作系统进行超长时间的测试,它可进行文件系统压力测试、硬盘I/O测试、内存管理压力测试、IPC压力测试、SCHED测试、命令功能的验证测试、系统调用功能的验证测试等。
在这里插入图片描述

5.使用Benchmark评估系统

可用于Linux的Benchmark的包括lmbench、 UnixBench、 AIM9、 Netperf、 SSLperf、 dbench、 Bonnie、Bonnie++、 Iozone、 BYTEmark等, 它们可用于评估操作系统、 网络、 I/O子系统、 CPU等的性能, 参考网址http://lbs.sourceforge.net/列出了许多Benchmark工具。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

jenkins配置springcloudalibaba流水线加服务器自动构建

参数化构建过程 Extended Choice Parameter Name:project_name Description:请选择需要构建的项目名称 Basic Parameter Types Parameter Type: Hidden Number of Visible Items: 20 Delimiter: , Choose Source for Value value: deerchain-gateway-95…

并发编程06:volatile与JMM

文章目录 6.1 被volatile修饰的变量有两大特点6.2 内存屏障(面试重点)6.2.1 生活case6.2.2 是什么6.2.3 内存屏障分类6.2.4 困难内容 6.3 volatile特性6.3.1 保证可见性6.3.2 没有原子性6.3.3 指令禁重排 6.4 如何正确使用volatile6.5 本章最后的小总结6…

我怎样一步一步引导ChatGPT写完一篇本科毕业论文

先了解毕业论文相关专家 给ChatGPT指定一个角色 我给ChatGPT指定一个学术导师角色,好家伙,给我谦虚起来了 好,换个方式,他开始听话了 了解论文格式 计算机科学与技术专业论文一般有哪些部分组成 选题 了解方向 请先告诉我计算…

提升自我数据分析能力的根本,是方法论!

很多人问,我是财务,能转行业做BI吗?我该学些什么?该掌握哪些技能?该如何学习?我是学生,在校期间专业不扎实,该怎么办?我是小白,还能学会数据分析吗&#xff1…

初识HTML的基础知识点!!!

初识HTML!!! 一、系统构架 1.B/S构架 (1)B/S构架(Browser / Server) 就是(浏览器/服务器的交互形式) Browser支持HTML、CSS、JavaScript (2)优缺点 优点…

webhub123整理 中文语音识别数据集​

我们收集和整理了常用的中文语音识别数据集,合计超过12000小时的数据集。已经按照不同来源整理收录到 webhub123整理 中文语音识别数据集​https://www.webhub123.com/#/home/detail?projectHashid64335220&ownerUserid22053727 整理后的效果如下 ​ 每个卡片…

C++11实现线程池

1.所有权的传递 适用移动语义可以将一个unique_lock赋值给另一个unique_lock,适用move实现。 void myThread1() {unique_lock<mutex> myUnique (testMutex1,std::defer_lock);unique_lock<mutex>myUnique1(std::move(myUnique));//myUnique 则实效 myUnique1 相当…

Java版本工程行业管理系统源码-专业的工程管理软件-提供一站式服务

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&#xff09;项目显示1…

asp.net+C#教育机构高校教务管理系统

1.1用户类别 本系统分为3个角色&#xff1a;管理员、教师、学生&#xff1b; 1、管理员权限最大&#xff0c;排课、调课、汇总各类考试成绩、管理各类用户基本信息&#xff0c;以及各类查询统计、发布公告、收发邮件等功能&#xff1b; 2、教师查看自己的信息、修改登陆密码…

[pgrx开发postgresql数据库扩展]6.返回序列的函数编写(1)单值序列

上篇文章是中规中矩的标准计算函数&#xff0c;就算不用pgrx&#xff0c;也是可以正常理解的&#xff0c;所以基本上没有什么对于pgrx框架有关系的东西&#xff08;唯一有关系的东西&#xff0c;应该就是Rust的时间类型与pgrx的时间类型的计算了&#xff09;。 这篇文章会讲一…

MySQL优化二索引使用

1、索引分类 类型解释全局索引(FULLTEXT)全局索引&#xff0c;目前只有 MyISAM 引擎支持全局索引&#xff0c;它的出现是为了解决针对文本的模糊查询效率较低的问题&#xff0c;并且只限于 CHAR、VARCHAR 和 TEXT 列哈希索引(HASH)哈希索引是 MySQL 中用到的唯一 key-value 键…

Scala学习(四)

文章目录 1.闭包2.函数式编程递归和尾递归2.1递归2.2 尾递归 3.控制抽象3.1 值调用3.2 名调用 4.惰性函数 1.闭包 如果一个函数&#xff0c;访问到了它的外部(局部)变量的值&#xff0c;那么这个函数和它所处的环境称之为闭包 //闭包练习def sumX(x:Int){def sumY(y:Int):Int{…

【JUC】浅析ConcurrentLinkedQueue

【JUC】浅析ConcurrentLinkedQueue 文章目录 【JUC】浅析ConcurrentLinkedQueue一、前言二、ConcurrentLinkedQueue的结构三、入队列3.1、入队列的过程3.2、定位尾节点3.3、设置入队节点为尾节点3.4、HOPS的设计意图 四、出队列 一、前言 在并发编程中&#xff0c;有时候需要使…

Python——基于YOLOV8的车牌识别(源码+教程)

目录 一、前言 二 、完成效果 三、 项目包 四、运行项目 &#xff08;教程&#xff09; 一、前言 YOLOv8LPRNet车牌定位与识别https://www.bilibili.com/video/BV1vk4y1E7MZ/ 最近做了有一个车牌识别的小需求&#xff0c;今天完成了&#xff0c;在此记录和分享 首先&#x…

linux修改程序的配置文件

修改指定文件中的数&#xff0c;例如创建一个文件如图 把6修改成7 修改完成 代码如下&#xff1a; #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <unistd.h> #include <string.h> #incl…

7.设计模式之责任链模式

前言 责任链&#xff0c;即将能够处理同一类请求的对象连成一条链&#xff0c;所提交的请求沿着链传递&#xff0c; 链上的对象逐个判断是否有能力处理该请求&#xff0c;如果能则处理&#xff0c;如果不能则传递给链上的下一个对象。为了避免请求发送者与多个请求处理者耦合在…

地狱级的字节跳动面试,6年测开的我被按在地上摩擦.....

前几天我朋友跟我吐苦水&#xff0c;这波面试又把他打击到了&#xff0c;做了快6年软件测试员。。。为了进大厂&#xff0c;也花了很多时间和精力在面试准备上&#xff0c;也刷了很多题。但题刷多了之后有点怀疑人生&#xff0c;不知道刷的这些题在之后的工作中能不能用到&…

SpringBoot+myBatis(plus)+MySQL+VUE最基础简易的前后端全栈demo制作

网站全栈制作&#xff1a; 一&#xff1a;后端 为了跟公司后端更好的扯皮&#xff08;不是&#xff09;&#xff0c;本人决定学一下java语言的后端接口书写。 项目制作&#xff1a;后端采用SpringBootmyBatis(plus)mysql&#xff08;IDE为IDEA软件&#xff09;。前端采用Vue…

macOS本地python环境/vscode/导入python包/设置python解释器

查看macbook本地是否有python环境 输入python或者python3&#xff0c;退出python环境使用exit()&#xff0c;别忘了括号 没有的话去官网安装https://www.python.org/ 2. 安装vscode 官网https://code.visualstudio.com/ 3. 安装插件 点击左边的“插件”按钮&#xff0c;安装…

wangzherongyao PMO

感谢【五一节】大家的相遇&#xff0c;总结下。 2023年05月02日&#xff0c;【第一组】组队开黑 我总结了下这天为什么打的那么好&#xff0c;首先赛季初段位在王者附近&#xff0c;大家心态重视程度也高&#xff0c;不轻敌&#xff0c;也不盲目&#xff0c;运营好兵线一步一步…