Linux系统性能调优之性能分析

性能调优的第一步是性能分析,下面从性能分析着手进行一些介绍,尤其对Linux性能分析工具vmstat的用法和实践进行详细介绍。

 1、性能分析的目的
  1)找出系统性能瓶颈(包括硬件瓶颈和软件瓶颈);
  2)提供性能优化的方案(升级硬件?改进系统系统结构?);
  3)达到合理的硬件和软件配置;

  4)使系统资源使用达到最大的平衡。(一般情况下系统良好运行的时候恰恰各项资源达到了一个平衡体,任何一项资源的过渡使用都会造成平衡体系破坏,从而造成系统负载极高或者响应迟缓。比如CPU过渡使用会造成大量进程等待CPU资源,系统响应变慢,等待会造成进程数增加,进程增加又会造成内存使用增加,内存耗尽又会造成虚拟内存使用,使用虚拟内存又会造成磁盘IO增加和CPU开销增加)

    2、影响性能的因素

  1)CPU(cpu的速度与性能很大一部分决定了系统整体的性能,是否使用SMP)
  2)内存(物理内存不够时会使用交换内存,使用swap会带来磁盘I0和cpu的开销)
  3)硬盘(存储系统)
a、Raid技术使用(RAID0,RAID1,RAID5,RAID0+1)
   b、小文件读写瓶颈是磁盘的寻址(tps),大文件读写的性能瓶颈是带宽
   c、Linux可以利用空闲内存作文件系统访问的cache,因此系统内存越大存储系统的性能也越好

  4)网络带宽。

    3、性能分析的步骤

1)对资源的使用状况进行长期的监控和数据采集(nagios、cacti)

   2)使用常见的性能分析工具(vmstat、top、free、iostat等)
   3)经验积累
    a、应用程序设计的缺陷和数据库查询的滥用最有可能导致性能问题
   b、性能瓶颈可能是因为程序差/内存不足/磁盘瓶颈,但最终表现出的结果就是CPU耗尽,系统负载极高,响应迟缓,甚至暂时失去响应
  c、物理内存不够时会使用交换内存,使用swap会带来磁盘I0和cpu的开销
d、可能造成cpu瓶颈的问题:频繁执Perl,php,java程序生成动态web;数据库查询大量的where子句、order by/group by排序……
  e、可能造成内存瓶颈问题:高并发用户访问、系统进程多,java内存泄露……
  f、可能造成磁盘IO瓶颈问题:生成cache文件,数据库频繁更新,或者查询大表……

    4、vmstat详细介绍

vmstat是一个很全面的性能分析工具,可以观察到系统的进程状态、内存使用、虚拟内存使用、磁盘的IO、中断、上下文切换、CPU使用等。对于 Linux 的性能分析,100%理解 vmstat 输出内容的含义,并能灵活应用,那对系统性能分析的能力就算是基本掌握了。

一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数, 如下图:1表示每个两秒采集一次服务器状态,5表示只采集一次。
实际上,在应用过程中,我们会在一段时间内一直监控,不想监控直接结束vmstat就行了,例如:

[root@monitor-www ~]# vmstat 2
  下面是vmstat命令的输出结果:

[root@monitor-www ~]# vmstat 1 5
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    84780    909744   267428    1912076   0     0     20     94       0     0     2  1  95  1  0
1   2    84780    894968   267428    1912216   0     0      0   1396    2301 11337     8  3  89  0  0
1   0    84780    900680   267428    1912340   0     0     76   1428    1854  8082     7  2  90  0  0
1   0    84780    902544   267432    1912548   0     0    116    928    1655  7502     7  2  92  0  0
2   0    84780    900076   267432    1912948   0     0    180    904    1963  8703    10  3  87  0  0
对输出解释如下:
   1)procs
   a. r列表示运行和等待CPU时间片的进程数,这个值如果长期大于系统CPU个数,就说明CPU资源不足,可以考虑增加CPU;
   b. b列表示在等待资源的进程数,比如正在等待I/O或者内存交换等。
   2)memory
    a、swpd列表示切换到内存交换区的内存数量(以KB为单位)。如果swpd的值不为0或者比较大,而且si、so的值长期为0,那么这种情况一般不用担心,不会影响系统性能;
   b、free列表示当前空闲的物理内存数量(以KB为单位);
   c、buff列表示buffers cache的内存数量,一般对块设备的读写才需要缓冲;
   d、cache列表示page cached的内存数量,一般作文件系统的cached,频繁访问的文件都会被cached。如果cached值较大,就说明cached文件数较多。如果此时IO中的bi比较小,就说明文件系统效率比较好。
   3)swap
    a、si列表示由磁盘调入内存,也就是内存进入内存交换区的数量;
    b、so列表示由内存调入磁盘,也就是内存交换区进入内存的数量
    c、一般情况下,si、so的值都为0,如果si、so的值长期不为0,则表示系统内存不足,需要考虑是否增加系统内存。
   4)IO
    a、bi列表示从块设备读入的数据总量(即读磁盘,单位KB/秒)
    b、bo列表示写入到块设备的数据总量(即写磁盘,单位KB/秒)
    这里设置的bi+bo参考值为1000,如果超过1000,而且wa值比较大,则表示系统磁盘IO性能瓶颈。
   5)system
   a、in列表示在某一时间间隔中观察到的每秒设备中断数;
   b、cs列表示每秒产生的上下文切换次数。
   上面这两个值越大,会看到内核消耗的CPU时间就越多。
   6)CPU
   a、us列显示了用户进程消耗CPU的时间百分比。us的值比较高时,说明用户进程消耗的CPU时间多,如果长期大于50%,需要考虑优化程序啥的。
   b、sy列显示了内核进程消耗CPU的时间百分比。sy的值比较高时,就说明内核消耗的CPU时间多;如果us+sy超过80%,就说明CPU的资源存在不足。
    c、id列显示了CPU处在空闲状态的时间百分比;
   d、wa列表示IO等待所占的CPU时间百分比。wa值越高,说明IO等待越严重。如果wa值超过20%,说明IO等待严重。
   e、st列一般不关注,虚拟机占用的时间百分比。 

    5、top命令详细介绍

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器

可以直接使用top命令后,查看%MEM(The task's share of the physical memory;这个进程使用的内存百分比.)的内容。可以选择按进程查看或者按用户查看
下面是vmstat命令的输出结果

 top - 11:05:21 up 9 days, 39 min,  1 user,  load average: 0.13, 0.04, 0.01
Tasks:  75 total,   1 running,  74 sleeping,   0 stopped,   0 zombie
Cpu(s): 28.3%us,  0.1%sy,  0.0%ni, 71.5%id,  0.1%wa,  0.0%hi,  0.1%si,  0.0%st
Mem:   4054120k total,  3338280k used,   715840k free,   283408k buffers
Swap:        0k total,        0k used,        0k free,  2230624k cached
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND   
1 root      15   0 10368  628  528 S  0.0  0.0   0:02.11 init                           
2 root      RT  -5     0    0    0 S  0.0  0.0   0:00.52 migration/0   
3 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0  
4 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/0   
5 root      RT  -5     0    0    0 S  0.0  0.0   0:00.41 migration/1   
6 root      34  19     0    0    0 S  0.0  0.0   0:00.02 ksoftirqd/1<span style="font-family: Arial, Helvetica, sans-serif;">    </span>

内容解释:

top 的全屏对话模式可分为3部分:系统信息栏、命令输入栏、进程列表栏。

一部分 -- 最上部的 系统信息栏 :

第一行(top):

“00:11:04”为系统当前时刻;
“3:35”为系统启动后到现在的运作时间;
“2 users”为当前登录到系统的用户,更确切的说是登录到用户的终端数 -- 同一个用户同一时间对系统多个终端的连接将被视为多个用户连接到系统,这里的用户数也将表现为终端的数目;
“load average”为当前系统负载的平均值,后面的三个值分别为1分钟前、5分钟前、15分钟前进程的平均数,一般的可以认为这个数值超过 CPU 数目时,CPU 将比较吃力的负载当前系统所包含的进程;
第二行(Tasks):
“59 total”为当前系统进程总数;
“1 running”为当前运行中的进程数;
“58 sleeping”为当前处于等待状态中的进程数;
“0 stoped”为被停止的系统进程数;
“0 zombie”为被复原的进程数;
第三行(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

第三部分 -- 最下部分的进程列表栏:
以 PID 区分的进程列表将根据所设定的画面更新时间定期的更新。通过 top 内部命令可以控制此处的显示方式

PID:进程的ID
USER:进程所有者
PR:进程的优先级别,越小越优先被执行
NInice:值
VIRT:进程占用的虚拟内存
RES:进程占用的物理内存
SHR:进程使用的共享内存
S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数
%CPU:进程占用CPU的使用率
%MEM:进程使用的物理内存和总内存的百分比
TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。
COMMAND:进程启动命令名称



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux下进行性能是简化和系统的过程,以提高系统的响应能力和效率。以下是一些在perf工具下进行性能的方法: 1. Prof命令:perf工具的一项主要功能是提供给用户使用perf命令来收集系统性能信息,如CPU使用率、内存使用率等。perf命令可以使用不同的选项来定制性能需求,如perf top命令可以收集正在运行的进程的CPU使用情况,perf stat命令可以收集系统的CPU性能统计。 2. 火焰图:火焰图是一种用于可视化性能剖析数据的图形工具。使用perf工具可以生成火焰图,通过查看火焰图可以更直观地了解系统中的性能瓶颈。火焰图可以帮助定位化的重点,如高CPU占用的函数、频繁用的函数等。 3. 事件采样:perf工具还可以通过事件采样来获取性能数据。事件采样是指在一段时间内按某种规则采集(抽样)应用程序执行的指令。例如,perf record命令可以记录指定进程在一段时间内的指令执行信息,perf report命令可以生成分析报告。 4. 这是一个完全不一样的方案。powertop是一个基于perf的工具,用于识别有待化的电源消耗问题。powertop可以检测和监视各种硬件组件和系统功能的能耗,如CPU频率、磁盘使用、网络流量、睡眠模式等。通过化这些方面,可以减少系统的能耗,延长电池寿命。 总之,perf工具提供了一种在Linux系统下进行性能的方式。通过使用perf命令、火焰图、事件采样等功能,可以获取和分析性能数据,进而定位和系统中的性能问题,以提高系统的响应能力和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值