导航:首页 > 编程系统 > linux性能分析

linux性能分析

发布时间:2023-02-20 03:33:22

A. linux查看内存使用情况

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。可以直接使用top命令后,查看%MEM的内容,可以选择按进程查看或者按用户查看,如想查看oracle用户的进程内存使用情况的话可以使用如下的命令$top-uoracle。

内容解释PID进程的ID,USER进程所有者,PR进程的优先级别,越小越优先被执行,NInice值,VIRT进程占用的虚拟内存,RES进程占用的物理内存,SHR进程使用的共享内存,S进程的状态,S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数。

%CPU进程占用CPU的使用率,%MEM进程使用的物理内存和总内存的百分比,TIME+该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值,COMMAND进程启动命令名称。

在命令行中输入top,即可启动top,top的全屏对话模式可分为3部分系统信息栏、命令输入栏、进程列表栏。

第一部分最上部的系统信息栏,第一行top00:11:04为系统当前时刻,3:35为系统启动后到现在的运作时间,2users为当前登录到系统的用户,更确切的说是登录到用户的终端数--同一个用户同一时间对系统多个终端的连接将被视为多个用户连接到系统,这里的用户数也将表现为终端的数目。

loadaverage为当前系统负载的平均值,后面的三个值分别为1分钟前、5分钟前、15分钟前进程的平均数,一般的可以认为这个数值超过CPU数目时,CPU将比较吃力的负载当前系统所包含的进程。

第二行Tasks,59total为当前系统进程总数,1running为当前运行中的进程数,58sleeping为当前处于等待状态中的进程数,0stoped为被停止的系统进程数,0zombie为被复原的进程数。

第三行Cpus,分别表示了CPU当前的使用率,第四行Mem分别表示了内存总量、当前使用量、空闲内存量、以及缓冲使用中的内存量,第五行Swap表示类别同第四行Mem,但此处反映着交换分区Swap的使用情况,通常,交换分区(Swap)被频繁使用的情况,将被视作物理内存不足而造成的。

第二部分中间部分的内部命令提示栏top运行中可以通过top的内部命令对进程的显示方式进行控制,内部命令如下表,s改变画面更新频率,l关闭或开启第一部分第一行top信息的表示,t关闭或开启第一部分第二行Tasks和第三行Cpus信息的表示,m关闭或开启第一部分第四行Mem和第五行Swap信息的表示。

N以PID的大小的顺序排列表示进程列表第三部分后述,P以CPU占用率大小的顺序排列进程列表第三部分后述,M以内存占用率大小的顺序排列进程列表第三部分后述,h显示帮助,n设置在进程列表所显示进程的数量,q退出top,s改变画面更新周期。

第三部分最下部分的进程列表栏以PID区分的进程列表将根据所设定的画面更新时间定期的更新,通过top内部命令可以控制此处的显示方式pmap可以根据进程查看进程相关信息占用的内存情况,进程号可以通过ps查看如下所示$pmap-d5647。

ps如下例所示$ps-e-o'pid,comm,args,pcpu,rsz,vsz,stime,user,uid'其中rsz是是实际内存,$ps-e-o'pid,comm,args,pcpu,rsz,vsz,stime,user,uid'|greporacle|sort-nrk,其中rsz为实际内存,上例实现按内存排序,由大到小。

在Linux下查看内存我们一般用free命令[root@tmp]#free,,Mem:,-/+buffers/cache:4711162795064,Swap:2048276801601968116。

下面是对这些数值的解释total总计物理内存的大小,used已使用多大,free可用有多少,Shared多个进程共享的内存总额,Buffers/cached:磁盘缓存的大小,第三行-/+buffers/cached,used已使用多大,free:可用有多少。

Linux的特点

Linux是一种自由和开放源代码的类UNIX操作系统,该操作系统的内核由林纳斯托瓦兹在1991年10月5日首次发布,在加上用户空间的应用程序之后,成为Linux操作系统,Linux也是自由软件和开放源代码软件发展中最著名的例子,只要遵循GNU通用公共许可证,任何个人和机构都可以自由地使用Linux的所有底层源代码,也可以自由地修改和再发布。

大多数Linux系统还包括了像提供GUI界面的X Window之类的程序,除了一部分专家之外,大多数人都是直接使用Linux发布版,而不是自己选择每一样组件或自行设置,以后借助于Internet网络,并通过全世界各地计算机爱好者的共同努力,已成为今天世界上使用最多的一种UNIX 类操作系统,并且使用人数还在迅猛增长。

B. linux性能监控工具有哪些

1、顶部-Linux进程监控
Linux Top命令是性能监视程序,很多系统管理员经常用它监视Linux性能,可以再许多Linux/Unix操作系统下使用,可以显示CPU使用情况、内存使用情况、交换内存、缓存大小、缓冲区大小、进程PID、用户、 命令等等,它还显示高内存和CPU运行流程的利用。
2、VmStat-虚拟内存统计
Linux VmStat命令用于显示虚拟内存,kernerl线程,磁盘,系统进程,I/O块,中断,CPU活动等的统计信息。默认情况下,vmstat命令在Linux系统下不可用,您需要安装名为sysstat的软件包 ,其中包含vmstat程序。
3、Lsof-列出打开的文件
许多Linux/Unix系统中使用的Lsof命令,用于显示所有打开文件和进程的列表。包含的开放文件是磁盘文件、网络套接字、管道、设备和进程。使用此命令的主要原因之一是无法卸载磁盘并显示正在使用或打开文件的错误。使用此命令,您可以轻松识别哪些文件正在使用中。
4、Tcpmp-网络分组分析器
Tcpmp是使用最广泛的命令行、网络数据包分析器或数据包嗅探器程序之一,用于捕获或过滤通过网络在特定接口上接收或传输的TCP/ IP数据包。它还提供了一个选项,可以将捕获的包保存在文件中供以后分析。tcpmp几乎可用于所有主要的Linux发行版。
5、Netstat-网络统计
Netstat是一个命令行工具,用于监视传入和传出网络数据包统计信息以及接口统计信息,对于每个系统管理员来说,监视网络性能并排除网络相关问题是非常有用的工具。
6、Htop-Linux进程监控
Htop是一款非常先进的交互式和实时Linux过程监控工具。这与Linux top命令非常相似,但它具有一些丰富的功能,如用户友好的界面来管理进程、快捷键、进程的垂直和水平视图等等。

C. linux 性能优化-- cpu 切换以及cpu过高

本文先介绍了cpu上下文切换的基础知识,以及上下文切换的类型(进程,线程等切换)。然后介绍了如何查看cpu切换次数的工具和指标的解释。同时对日常分析种cpu过高的情况下如何分析和定位的方法做了一定的介绍,使用一个简单的案例进行分析,先用top,pidstat等工具找出占用过高的进程id,然后通过分析到底是用户态cpu过高,还是内核态cpu过高,并用perf 定位到具体的调用函数。(来自极客时间课程学习笔记)

1、多任务竞争CPU,cpu变换任务的时候进行CPU上下文切换(context switch)。CPU执行任务有4种方式:进程、线程、或者硬件通过触发信号导致中断的调用。

2、当切换任务的时候,需要记录任务当前的状态和获取下一任务的信息和地址(指针),这就是上下文的内容。因此,上下文是指某一时间点CPU寄存器(CPU register)和程序计数器(PC)的内容, 广义上还包括内存中进程的虚拟地址映射信息.

3、上下文切换的过程:

4、根据任务的执行形式,相应的下上文切换,有进程上下文切换、线程上下文切换、以及中断上下文切换三类。

5、进程和线程的区别:
进程是资源分配和执行的基本单位;线程是任务调度和运行的基本单位。线程没有资源,进程给指针提供虚拟内存、栈、变量等共享资源,而线程可以共享进程的资源。

6、进程上下文切换:是指从一个进程切换到另一个进程。

(1)进程运行态为内核运行态和进程运行态。内核空间态资源包括内核的堆栈、寄存器等;用户空间态资源包括虚拟内存、栈、变量、正文、数据等

(2)系统调用(软中断)在内核态完成的,需要进行2次CPU上下文切换(用户空间-->内核空间-->用户空间),不涉及用户态资源,也不会切换进程。

(3)进程是由内核来管理和调度的,进程的切换只能发生在内核态。所以,进程的上下文不仅包括了用户空间的资源,也包括内核空间资源。

(4)进程的上下文切换过程:

(5)、下列将会触发进程上下文切换的场景:

7、线程上下文切换:

8、中断上下文切换
快速响应硬件的事件,中断处理会打断进程的正常调度和执行。同一CPU内,硬件中断优先级高于进程。切换过程类似于系统调用的时候,不涉及到用户运行态资源。但大量的中断上下文切换同样可能引发性能问题。

重点关注信息:

系统的就绪队列过长,也就是正在运行和等待 CPU 的进程数过多,导致了大量的上下文切换,而上下文切换又导致了系统 CPU 的占用率升高。

这个结果中有两列内容是我们的重点关注对象。一个是 cswch ,表示每秒自愿上下文切换(voluntary context switches)的次数,另一个则是 nvcswch ,表示每秒非自愿上下文切换(non voluntary context switches)的次数。

linux的中断使用情况可以从 /proc/interrupts 这个只读文件中读取。/proc 实际上是 Linux 的一个虚拟文件系统,用于内核空间与用户空间之间的通信。/proc/interrupts 就是这种通信机制的一部分,提供了一个只读的中断使用情况。

重调度中断(RES),这个中断类型表示,唤醒空闲状态的 CPU 来调度新的任务运行。这是多处理器系统(SMP)中,调度器用来分散任务到不同 CPU 的机制,通常也被称为处理器间中断(Inter-Processor Interrupts,IPI)。

这个数值其实取决于系统本身的 CPU 性能。如果系统的上下文切换次数比较稳定,那么从数百到一万以内,都应该算是正常的。但当上下文切换次数超过一万次,或者切换次数出现数量级的增长时,就很可能已经出现了性能问题。这时,需要根据上下文切换的类型,再做具体分析。

比方说:

首先通过uptime查看系统负载,然后使用mpstat结合pidstat来初步判断到底是cpu计算量大还是进程争抢过大或者是io过多,接着使用vmstat分析切换次数,以及切换类型,来进一步判断到底是io过多导致问题还是进程争抢激烈导致问题。

CPU 使用率相关的重要指标:

性能分析工具给出的都是间隔一段时间的平均 CPU 使用率,所以要注意间隔时间的设置,特别是用多个工具对比分析时,你一定要保证它们用的是相同的间隔时间。比如,对比一下 top 和 ps 这两个工具报告的 CPU 使用率,默认的结果很可能不一样,因为 top 默认使用 3 秒时间间隔,而 ps 使用的却是进程的整个生命周期。

top 和 ps 是最常用的性能分析工具:

这个输出结果中,第三行 %Cpu 就是系统的 CPU 使用率,top 默认显示的是所有 CPU 的平均值,这个时候你只需要按下数字 1 ,就可以切换到每个 CPU 的使用率了。继续往下看,空白行之后是进程的实时信息,每个进程都有一个 %CPU 列,表示进程的 CPU 使用率。它是用户态和内核态 CPU 使用率的总和,包括进程用户空间使用的 CPU、通过系统调用执行的内核空间 CPU 、以及在就绪队列等待运行的 CPU。在虚拟化环境中,它还包括了运行虚拟机占用的 CPU。

预先安装 stress 和 sysstat 包,如 apt install stress sysstat。

stress 是一个 Linux 系统压力测试工具,这里我们用作异常进程模拟平均负载升高的场景。而 sysstat 包含了常用的 Linux 性能工具,用来监控和分析系统的性能。我们的案例会用到这个包的两个命令 mpstat 和 pidstat。

下面的 pidstat 命令,就间隔 1 秒展示了进程的 5 组 CPU 使用率,

包括:

perf 是 Linux 2.6.31 以后内置的性能分析工具。它以性能事件采样为基础,不仅可以分析系统的各种事件和内核性能,还可以用来分析指定应用程序的性能问题。

第一种常见用法是 perf top,类似于 top,它能够实时显示占用 CPU 时钟最多的函数或者指令,因此可以用来查找热点函数,使用界面如下所示:

输出结果中,第一行包含三个数据,分别是采样数(Samples)如2K、事件类型(event)如cpu-clock:pppH和事件总数量(Event count)如:371909314。

第二种常见用法,也就是 perf record 和 perf report。 perf top 虽然实时展示了系统的性能信息,但它的缺点是并不保存数据,也就无法用于离线或者后续的分析。而 perf record 则提供了保存数据的功能,保存后的数据,需要你用 perf report 解析展示。

1.启动docker 运行进程:

2.ab工具测试服务器性能
ab(apache bench)是一个常用的 HTTP 服务性能测试工具,这里用来模拟 Ngnix 的客户端。

3.分析过程

CPU 使用率是最直观和最常用的系统性能指标,在排查性能问题时,通常会关注的第一个指标。所以更要熟悉它的含义,尤其要弄清楚:

这几种不同 CPU 的使用率。比如说:

碰到 CPU 使用率升高的问题,你可以借助 top、pidstat 等工具,确认引发 CPU 性能问题的来源;再使用 perf 等工具,排查出引起性能问题的具体函数.

D. 如何1分钟内对 Linux 性能快速分析(113资讯网)

当你在IDC主机商购买一台系统为 Linux 服务器之后,我想大家第一时间就是对主机进行一个性能分析,这里我跟大家分享几个命令,能让大家在一分钟以内对自己的性能有一个大致的鸟解?

uptime

dmesg | tail

vmstat 1

mpstat -P ALL 1

pidstat 1

iostat -xz 1

free -m

sar -n DEV 1

sar -n TCP,ETCP 1

top

这10个命令到底是什么意思,我为大家一一解释一下:

1.uptime

# uptime

03:16:26 up 21:31, 1 user, load average: 10.02, 06.43, 09.02

在上面的例子中,平均负载显示是在不断增加的,1 分钟的值是 10,相比 15 分钟的值 09 来说是增加了。这个数字这么大就意味着有事情发生了.

2. dmesg | tail

# dmesg | tail

[  14.102501] ISO 9660 Extensions: RRIP_1991A

[  15.900216] ISO 9660 Extensions: Microsoft Joliet Level 3

[  15.900234] ISO 9660 Extensions: RRIP_1991A

[  17.030540] EXT4-fs (vda1): resizing filesystem from 5242619 to 13106939 blocks

[  17.151434] random: crng init done

[  17.151436] random: 7 urandom warning(s) missed e to ratelimiting

[  18.314268] EXT4-fs (vda1): resized filesystem to 13106939

[  20.394666] new mount options do not match the existing superblock, will be ignored

[  38.405804] ISO 9660 Extensions: Microsoft Joliet Level 3

[  38.407599] ISO 9660 Extensions: RRIP_1991A

这里展示的是最近 10 条系统消息日志,如果系统消息没有就不会展示。主要是看由于性能问题导致的错误。

3. vmstat 1

# vmstat 1

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----

r  b  swpd  free  buff  cache  si  so    bi    bo  in  cs us sy id wa st

1  0      0 324644 141184 1270628    0    0    10    40  207  431  1  1 99  0  0

0  0      0 324388 141184 1270628    0    0    0    0  130  280  1  1 98  0  0

0  0      0 324388 141184 1270628    0    0    0    0  89  169  0  0 100  0  0

0  0      0 324420 141184 1270628    0    0    0    0  118  225  1  0 99  0  0

0  0      0 324420 141184 1270628    0    0    0    32  125  254  0  0 99  1  0

1  1      0 324420 141184 1270628    0    0    0    68  96  171  0  0 96  4  0

0  0      0 324452 141184 1270628    0    0    0  184  127  166  0  1 96  3  0

^C

r: CPU 上的等待运行的可运行进程数。这个指标提供了判断 CPU 饱和度的数据,因为它不包含 I/O 等待的进程。可解释为:“r” 的值比 CPU 数大的时候就是饱和的。

free:空闲内存,单位是 k。如果这个数比较大,就说明你还有充足的空闲内存。“free -m” 和下面第 7 个命令,可以更详细的分析空闲内存的状态。

si,so:交换进来和交换出去的数据量,如果这两个值为非 0 值,那么就说明没有内存了。

us,sy,id,wa,st:这些是 CPU 时间的分解,是所有 CPU 的平均值。它们是用户时间,系统时间(内核),空闲,等待 I/O 时间,和被偷的时间(这里主要指其它的客户,或者使用 Xen,这些客户有自己独立的操作域)。

4. mpstat -P ALL 1

# mpstat -P ALL 1

Linux 4.15.0-88-generic (VM-0-17-ubuntu) 06/15/2020 _x86_64_ (1 CPU)

03:33:26 AM  CPU    %usr  %nice    %sys %iowait    %irq  %soft  %steal  %guest  %gnice  %idle

03:33:27 AM  all    0.00    0.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00  99.00

03:33:27 AM    0    0.00    0.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00  99.00

这个命令打印各个 CPU 的时间统计,可以看出整体 CPU 的使用是不是均衡的。由于我使用的是1H2G主机看不出区别!

5. pidstat 1

# pidstat 1

Linux 4.15.0-88-generic (VM-0-17-ubuntu) 06/15/2020 _x86_64_ (1 CPU)

03:34:47 AM  UID      PID    %usr %system  %guest  %wait    %CPU  CPU  Command

03:34:48 AM    0      1120    1.00    0.00    0.00    0.00    1.00    0  sshd

pidstat 命令为每个 CPU 统计信息功能。由于我使用的是1H2G主机看不出区别!

6. iostat -xz 1

# iostat -xz 1

Linux 4.15.0-88-generic (VM-0-17-ubuntu) 06/15/2020 _x86_64_ (1 CPU)

avg-cpu:  %user  %nice %system %iowait  %steal  %idle

          0.67    0.01    0.52    0.29    0.00  98.52

Device            r/s    w/s    rkB/s    wkB/s  rrqm/s  wrqm/s  %rrqm  %wrqm r_await w_await aqu-sz rareq-sz wareq-sz  svctm  %util

loop0            0.00    0.00      0.00      0.00    0.00    0.00  0.00  0.00    0.22    0.00  0.00    9.64    0.00  0.00  0.00

scd0            0.02    0.00      0.48      0.00    0.00    0.00  0.00  0.00    0.21    0.00  0.00    27.72    0.00  0.19  0.00

vda              0.64    4.07      9.15    40.59    0.00    1.99  0.00  32.85    3.58    2.31  0.01    14.31    9.96  0.24  0.11

avg-cpu:  %user  %nice %system %iowait  %steal  %idle

          0.00    0.00    0.00    0.00    0.00  100.00

Device            r/s    w/s    rkB/s    wkB/s  rrqm/s  wrqm/s  %rrqm  %wrqm r_await w_await aqu-sz rareq-sz wareq-sz  svctm  %util

r/s, w/s, rkB/s, wkB/s:这些表示设备上每秒钟的读写次数和读写的字节数(单位是k字节)。这些可以看出设备的负载情况。性能问题可能就是简单的因为大量的文件加载请求。

await:I/O 等待的平均时间(单位是毫秒)。这是应用程序所等待的时间,包含了等待队列中的时间和被调度服务的时间。过大的平均等待时间就预示着设备超负荷了或者说设备有问题了。

avgqu-sz:设备上请求的平均数。数值大于 1 可能表示设备饱和了(虽然设备通常都是可以支持并行请求的,特别是在背后挂了多个磁盘的虚拟设备)。

%util:设备利用率。是使用率的百分数,展示每秒钟设备工作的时间。这个数值大于 60% 则会导致性能很低(可以在 await 中看),当然这也取决于设备特点。这个数值接近 100% 则表示设备饱和了。

7. free -m/h

ubuntu@VM-0-17-ubuntu:~# free -m

              total        used        free      shared  buff/cache  available

Mem:          1833        137        313          5        1381        1506

Swap:            0          0          0

ubuntu@VM-0-17-ubuntu:~$ free -h

              total        used        free      shared  buff/cache  available

Mem:          1.8G        139M        311M        5.8M        1.3G        1.5G

Swap:            0B          0B          0B

这个命令我相信大家都熟悉,buffers:用于块设备 I/O 缓冲的缓存,cached:用于文件系统的页缓存。

8. sar -n DEV 1

ubuntu@VM-0-17-ubuntu:~# sar -n DEV 1

Linux 4.15.0-88-generic (VM-0-17-ubuntu) 06/15/2020 _x86_64_ (1 CPU)

03:43:35 AM    IFACE  rxpck/s  txpck/s    rxkB/s    txkB/s  rxcmp/s  txcmp/s  rxmcst/s  %ifutil

03:43:36 AM      eth0    11.00    10.00      0.79      1.06      0.00      0.00      0.00      0.00

03:43:36 AM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

使用这个工具是可以检测网络接口的吞吐:rxkB/s 和 txkB/s,作为收发数据负载的度量,也是检测是否达到收发极限。在上面这个例子中,eth0 接收数据达到 0.79 kb 字节/秒,发送数据达到1.06 字节/秒。

9. sar -n TCP,ETCP 1

ubuntu@VM-0-17-ubuntu:~# sar -n TCP,ETCP 1

Linux 4.15.0-88-generic (VM-0-17-ubuntu) 06/15/2020 _x86_64_ (1 CPU)

03:49:56 AM  active/s passive/s    iseg/s    oseg/s

03:49:57 AM      0.00      0.00      5.05      3.03

03:49:56 AM  atmptf/s  estres/s retrans/s isegerr/s  orsts/s

03:49:57 AM      0.00      0.00      0.00      0.00      0.00

这是对 TCP 关键指标的统计,它包含了以下内容:

active/s:每秒本地发起的 TCP 连接数(例如通过 connect() 发起的连接)。

passive/s:每秒远程发起的连接数(例如通过 accept() 接受的连接)。

retrans/s:每秒TCP重传数。

10. top

ubuntu@VM-0-17-ubuntu:~# top

top - 03:53:20 up 1 day,  1:41,  1 user,  load average: 0.01, 0.04, 0.00

Tasks:  89 total,  1 running,  52 sleeping,  0 stopped,  0 zombie

%Cpu(s):  0.3 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

KiB Mem :  1877076 total,  317436 free,  143420 used,  1416220 buff/cache

KiB Swap:        0 total,        0 free,        0 used.  1540856 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM    TIME+ COMMAND                                                                                     

3730 root      20  0  105688  6812  5840 S  0.3  0.4  0:00.01 sshd                                                                                         

7546 root      20  0  644608  14924  6776 S  0.3  0.8  2:48.99 YDService                                                                                   

    1 root      20  0  159892  9260  6796 S  0.0  0.5  0:06.45 systemd                                                                                     

    2 root      20  0      0      0      0 S  0.0  0.0  0:00.00 kthreadd                                                                                     

    4 root      0 -20      0      0      0 I  0.0  0.0  0:00.00 kworker/0:0H                                                                                 

    6 root      0 -20      0      0      0 I  0.0  0.0  0:00.00 mm_percpu_wq                                                                                 

    7 root      20  0      0      0      0 S  0.0  0.0  0:04.29 ksoftirqd/0                                                                                 

    8 root      20  0      0      0      0 I  0.0  0.0  0:08.85 rcu_sched                                                                                   

    9 root      20  0      0      0      0 I  0.0  0.0  0:00.00 rcu_bh                                                                                       

  10 root      rt  0      0      0      0 S  0.0  0.0  0:00.00 migration/0                                                                                 

  11 root      rt  0      0      0      0 S  0.0  0.0  0:00.16 watchdog/0                                                                                   

  12 root      20  0      0      0      0 S  0.0  0.0  0:00.00 cpuhp/0                                                                                     

  13 root      20  0      0      0      0 S  0.0  0.0  0:00.00 kdevtmpfs                                                                                   

top 命令包含了很多我们前面提到的指标。这个命令可以很容易看出指标的变化表示负载的变化,这个看起来和前面的命令有很大不同。

top 的一个缺陷也比较明显,很难看出变化趋势,其它像 vmstat 和 pidstat 这样的工具就会很清晰,它们是以滚动的方式输出统计信息。所以如果你在看到有问题的信息时没有及时的暂停下来(Ctrl-S 是暂停, Ctrl-Q 是继续),那么这些有用的信息就会被清屏。

文章原文: https://www.113p.cn/129.html  (来都来了,就去我博客看下!!)

E. 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中完成。

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

OProfile可以帮助用户识别诸如模块的占用时间、循环的展开、高速缓存的使用率低、低效的类型转换和冗余操作、错误预测转移等问题。它收集有关处理器事件的信息,其中包括TLB的故障、停机、存储器访问以及缓存命中和未命中的指令的攫取数量。OProfile支持两种采样方式:基于事件的采样(Event Based)和基于时间的采样(Time Based)。基于事件的采样是OProfile只记录特定事件(比如L2缓存未命中)的发生次数,当达到用户设定的定值时Oprofile就记录一下(采一个样)。这种方式需要CPU内部有性能计数器(Performace Counter))。基于时间的采样是OProfile借助OS时钟中断的机制,在每个时钟中断,OProfile都会记录一次(采一次样)。引入它的目的在于,提供对没有性能计数器的CPU的支持,其精度相对于基于事件的采样要低,因为要借助OS时钟中断的支持,对于禁用中断的代码,OProfile不能对其进行分析。

阅读全文

与linux性能分析相关的资料

热点内容
上海汉得java程序员 浏览:288
如何利用大量数据来拟合函数 浏览:131
ocx文件编辑工具 浏览:802
高考生如何参考往年录取数据 浏览:118
索尼录屏文件夹 浏览:287
js清除html格式 浏览:748
游戏找队友用什么app 浏览:795
暗黑2源代码 浏览:913
egg文件怎么打开 浏览:835
刚开始学编程学哪个好 浏览:703
宽容房龙哪个版本好 浏览:769
如何做个小数据库 浏览:529
win10应用程序池 浏览:533
读取access最后一行数据库 浏览:416
win10电脑怎么把字放大缩小 浏览:385
奥迪A6链条数据多少正常 浏览:123
苹果7手机代码是什么意思啊 浏览:637
苹果文件没有存储权限 浏览:291
手机wps文件名有括号怎么删除 浏览:349
ps文件不能打包 浏览:489

友情链接