Linux性能监控与调优工具

简介: Linux性能监控与调优工具

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

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工具。


相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
目录
相关文章
|
1月前
|
监控 Unix Linux
Linux系统工具
Linux系统工具
42 6
|
13天前
|
监控 Java Linux
Linux系统之安装Ward服务器监控工具
【10月更文挑战第17天】Linux系统之安装Ward服务器监控工具
32 5
Linux系统之安装Ward服务器监控工具
|
15天前
|
JSON JavaScript Linux
Linux系统之安装cook菜谱工具
【10月更文挑战第15天】Linux系统之安装cook菜谱工具
32 2
Linux系统之安装cook菜谱工具
|
4天前
|
缓存 监控 Linux
Linux性能分析利器:全面掌握perf工具
【10月更文挑战第18天】 在Linux系统中,性能分析是确保软件运行效率的关键步骤。`perf`工具,作为Linux内核自带的性能分析工具,为开发者提供了强大的性能监控和分析能力。本文将全面介绍`perf`工具的使用,帮助你成为性能优化的高手。
26 1
|
4天前
|
缓存 监控 Linux
掌握Linux性能分析:深入探索perf工具
【10月更文挑战第26天】
11 1
|
2月前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
223 2
|
2月前
|
Linux
linux之centos安装dataease数据报表工具
linux之centos安装dataease数据报表工具
|
关系型数据库 MySQL Linux
linux 的实用工具分享
做开发用Linux感觉比Windows在一些地方要好用(只是个人感觉,不想引战),在Linux中没有烦人的广告弹窗,没有动不动给你惊喜的Windows强制更新,而且Linux相对Windows要流畅,在低配的电脑上也很少卡顿.现在很多开发软件都有Linux版本,使用起来也算方便.当然,要是玩游戏等娱乐使用,还是Windows牛逼.我现在写代码基本都使用Linux.我用的Ubuntu18.04。
2061 0
|
12天前
|
运维 安全 Linux
Linux中传输文件文件夹的10个scp命令
【10月更文挑战第18天】本文详细介绍了10种利用scp命令在Linux系统中进行文件传输的方法,涵盖基础文件传输、使用密钥认证、复制整个目录、从远程主机复制文件、同时传输多个文件和目录、保持文件权限、跨多台远程主机传输、指定端口及显示传输进度等场景,旨在帮助用户在不同情况下高效安全地完成文件传输任务。
104 5