[转载] - Linux性能分析工具详解

上一篇 / 下一篇  2013-08-16 17:09:13 / 个人分类:Linux

原文链接:

http://blog.csdn.net/macky0668/article/details/4520053


Linux性能分析工具详解

常用用法:

这里用sudo因为当前帐号无权使用tcpdump,这里仅以一个tcp的例子来说明:sudo /usr/sbin/tcpdump tcp port 80 and host 172.23.1.69 -ieth1 -n

每一行中间都有这个包所携带的标志:

S=SYN,发起连接标志

P=PUSH,传送数据标志

F=FIN,关闭连接标志

ack   表示确认包

RST=RESET,异常关闭连接

.表示没有任何标志

 常用参数:

Tcp/udp/arp等:指定协议类型。

(src/dst)Host:指定源端或者目的端ip

(src/dst)port:指定源端或者目的端

-i:指定网卡。

-n:显示ip,而不是主机名。

-c:指定抓多少个包后退出。

-A:以ASCII方式显示包内容,这个选项对文本格式的协议包非常有用。

-s:指定抓包显示一行的宽度,-s0表示显示完整的包,经常和-A一起用。

-x/-xx/-X/-XX:以十六进制显示包内容,几个选项只有细微的差别,详见man手册。

 上图示例的过程详解:

第一行:17:40:10这个时间,从172.17.66.27client)的临时端口49376172.23.1.66server)的9500监听端口发起连接,client初始包序号为1350828479,滑动窗口大小为5840字节(滑动窗口即tcp接收缓冲区的大小,用于tcp拥塞控制),mss大小为1460(即可接收的最大包长度,通常为MTU40字节,IP头和TCP头各20字节)。

第二行:server响应连接,同时带上第一个包的ack信息,为client端的初始包序号加11350828480,即server端下次等待接受这个包序号的包,用于tcp字节流的顺序控制。Server端的初始包序号为258050143mss也是1460

第三行:client再次确认,三次握手完成。

第四行:client发请求包,包长度91字节。

第五行:server响应ack

第六行:server回包,包长度21字节。

第七行:client响应ack

第八行:client发起关闭连接请求。

第九行:server响应ack,并且也发送FIN标志关闭。

第十行:客户端响应ack,关闭连接的四次握手完成。

通过这个来理解tcp协议也挺好的,连接关闭过程,字节流顺序控制,拥塞控制,tcp状态转换等。不过这里就不详述了。

二、vmstat

vmstat是一个很全面的性能分析工具,可以观察到系统的进程 状态、内存使用、虚拟内存使用、磁盘的IO、中断、上下问切 换CPU使用等。系统性能分析工具中,我使用最多的是这个,

除了sysstat工具包外,这个工具能查看的系统资源最多。

对于Linux的性能分析,100%理解vmstat输出内容的含义, 那你对系统性能分析的能力就算是基本掌握了。

我这里主要说明一下这个命令显示出的部分数据代表的含义,和 它反映出系统相关资源的状况。输出内容共有6类,分别说明如下。

 Vmstat的输出格式如(CentOS3.3)

 Procs

r:

运行的和等待(CPU时间)运行的进程数, 这个值也可以判断是否需要增CPU(长期 大1)

b:

处于不可中断状态的进程数,常见的情况 是IO引起的

  Memory

 swpd:切换到交换内存上的内(默认KB为单)

 如果swpd的值不为0,或者还比较大,比如超过100M了,但

si, so的值长期为0,这种情况我们可以不用担心,不会影响

系统性能。

 free:空闲的物理内存

 buff:buffercache的内存,对块设备的读写进行缓冲

 cache:pagecache的内,文件系统cache

•  如果cache的值大的时候,说明cache住的文件数多,如果频 繁访问到的文件都能被cache住,那么磁盘的读IO bi会非常小。

 Swap

si:交换内存使用,由磁盘调入内存

so:交换内存使用,由内存调入磁盘

内存够用的时候,这2个值都是0,如果这2个值长期 大于0时,系统性能会受到影响。磁盘IOCPU资 源都会被消耗。

我发现有些朋友看到空闲内存(free)很少或接近于0时,就认为内存不够用了,实际上不能光看这一点 的,还要结合si,so,如果free很少,但是si,so也很 少(大多时候是0),那么不用担心,系统性能这时 不会受到影响的。

 Io

bi:从块设备读入的数据总(读磁盘) (KB/s)

bo:写入到块设备的数据总(写磁盘)

(KB/s)

随机磁盘读写的时候,这2个 值越大(如超 出1M),能看到CPUIO等待的值也会越大

 System

in:每秒产生的中断次数

cs:每秒产生的上下文切换次数 上面这2个值越大,会看到由内核消耗CPU

时间会越多

  Cpu

 us:用户进程消耗CPU时间百分比

 us的值比较高时,说明用户进程消耗的CPU时间多,但是如果 长期超过50%的使用,那么我们就该考虑优化程序算法或者进 行加速了(比如PHP/Perl)

 sy:内核进程消耗CPU时间百分比

 sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性 的表现,我们应该检查原因。

 wa:IO等待消耗CPU时间百分比

•  wa的值高时,说明IO等待比较严重,这可能是由于磁盘大量作 随机访问造成,也有可能是磁盘的带宽出现瓶颈(块操作)

 id:CPU处在空闲状态时间百分比

 情景分析 这个vmstat的输出那些信息值得关注?

Procsr:运行的进程比较多,系统很繁忙

Io bo:磁盘写的数据量稍大,如果是大文件的写,

10M以内基本不用担心,如果是小文件2M以内

基本正常

Cpuus:持续大于50,服务高峰期可以接受

Cpuwa:稍微有些高

Cpuid:持续小于50,服务高峰期可以接受

 

三、Top

这个命令可以查看系统中运行的进程的状况,CPU使 用状况,系统负载,内存使用等。它是检查系统进程 运行状况最方便的工具了,它默认显示部分活动的进 程,并且按照进程使用CPU的多少排序。它可以显示 全部CPU的使用状况,也可以显示每个进程都运行在 那个CPU上面。

我习惯使用这个命令查看那些进程或者那类进程占用CPU和内存资源最多,以此迅速定位存在性能问题的 进程,以及运行异常的进程。

 Top命令的输1 (CentOS3.3)

 Top命令的输2 (CentOS3.3)

 top看到的内存的说(Mem的第2)

actv

active活跃的内存页,正在映射给进程使用

in_d

inactive_dirty非活跃的内存页,并且内存数据被 修改,需要写回磁盘

in_c

inactive_clean非活跃的内存页,干净的数据,可 以被重新分配使用

 问题?

in_din_c以及cache,buffer的内存有何 不同?

我的理解:

actv, in_d, in_cVM中对内存的管理组织 形式,buffer是块设备读写缓冲cache是文 件系统缓存

   top看到的进程所处的几种状(STAT)

  D不可中断休眠,通常是IO操作所处的状态

  R正在执行的或者处在等待执行的进程队列中

  S休眠中

  T暂停刮起的(比Ctrl+Z),也可能是被strace命令调用中的状

  Z僵尸进程,进程执行完成,但由于其父进程没有销毁该进程,而init进程接管进行销毁。

  W没有使用物理内存,所占用的物理内存被切换到交换内存

  <高优先级的进程

  N低优先级

有时候一个进程会有多个状态的标志,比SWNSW

 情景分析 前面两top的输出那些信息值得关注?

1)

 Loadaverage:系统负载有降低的趋势,但仍然较高

 Running:3个进程正在运行,正常,因为系统有4

CPU

 Cpuuser:200%了,有些大,服务高峰时可以接受

 Cpuidle:200%了,需要注意

2)

Cpuiowait:接近200%了,很大

free命令显示系统内存的使用状况(物理内存和 交换内存)

通过这个命令我们可以看到系统进程实际使用的 物理内存,buffercache使用的物理内存

 free命令输出的第二(Mem)

这行分别显示了物理内存的总量(total)、已使用的(used)、空闲(free)、共享(shared)buffer系统分配但未被使用的buffers数量cache系统分配但未被使用的cache数量的内存。

   free命令输出的第三行(-/+ buffers/cache)这行最容易让人迷惑。

它显示的第一个值(used这一列)是这样得来的:Memused- Membuffers- Memcached列。(这个值就是实际使用的内存总量)

它显示的第二个值(free这一列)是这样得来的:Memfree+ Membuffers+ Memcached列。(这个值就是系统当前实际可用内存)

 free命令输出的第四(Swap)这行显示交换内存的总量、已使用量、 空闲量

 

下面是bufferscached的区别。

buffers是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及tracking in-flight pages.cached是用来给文件做缓冲。那就是说:buffers是用来存储,目录里面有什么内容,权限等等。而cached直接用来记忆我们打开的文件,如果你想知道他是不是真的生效,你可以试一下,先后执行两次命令#man X ,你就可以明显的感觉到第二次的开打的速度快很多。

实验:在一台没有什么应用的机器上做会看得比较明显。记得实验只能做一次,如果想多做请换一个文件名。

#free

#man X

#free

#man X

#free

你可以先后比较一下free后显示buffers的大小。

另一个实验:

#free

#ls /dev

#free

你比较一下两个的大小,当然这个buffers随时都在增加,但你有ls过的话,增加的速度会变得快,这个就是buffers/chached的区别。

因为Linux将你暂时不使用的内存作为文件和数据缓存,以提高系统性能,当你需要这些内存时,系统会自动释放(不像windows那样,即使你有很多空闲内存,他也要访问一下磁盘中的pagefiles

因此,一个最简单的判断Linux下内存是否足够的办法是,只要基本没用到swap,这台机器的内存就是足够的。


TAG: 性能 Linux LINUX

 

评分:0

我来说两句

日历

« 2024-03-31  
     12
3456789
10111213141516
17181920212223
24252627282930
31      

数据统计

  • 访问量: 3693
  • 日志数: 12
  • 建立时间: 2011-10-14
  • 更新时间: 2013-08-16

RSS订阅

Open Toolbar