Linux性能分析工具详解

  • 一、tcpdump

常用用法:

这里用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.27(client)的临时端口49376向172.23.1.66(server)的9500监听端口发起连接,client初始包序号为1350828479,滑动窗口大小为5840字节(滑动窗口即tcp接收缓冲区的大小,用于tcp拥塞控制),mss大小为1460(即可接收的最大包长度,通常为MTU减40字节,IP头和TCP头各20字节)。

第二行:server响应连接,同时带上第一个包的ack信息,为client端的初始包序号加1,1350828480,即server端下次等待接受这个包序号的包,用于tcp字节流的顺序控制。Server端的初始包序号为258050143,mss也是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的输出格式如下(CentOS 3.3)

•  Procs

– r:

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

b:

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

•   Memory

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

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

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

系统性能。

–  free: 空闲的物理内存

–  buff: 作为buffer cache的内存,对块设备的读写进行缓冲

–  cache: 作为page cache的内存, 文件系统的cache

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

•  Swap

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

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

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

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

•  Io

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

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

(KB/s)

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

•  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的输出那些信息值得关注?

– Procs r: 运行的进程比较多,系统很繁忙

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

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

基本正常

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

– Cpu wa: 稍微有些高

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

三、Top

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

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

•  Top命令的输出1 (CentOS 3.3)

•  Top命令的输出2 (CentOS 3.3)

•  用 top 看到的内存的说明(Mem的第2行)

– actv

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

– in_d

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

in_c

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

•  问题?

in_d 和 in_c 以及 cache, buffer 的内存有何 不同?

我的理解:

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

•    用 top 看到的进程所处的几种状态(STAT列)。

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

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

–   S 休眠中

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

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

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

–   < 高优先级的进程

–   N 低优先级

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

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

– 图1)

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

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

CPU

•  Cpu user: 接近200%了,有些大,服务高峰时可以接受

•  Cpu idle: 小于200%了,需要注意

– 图2)

– Cpu iowait:接近200%了,很大

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

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

•  free命令输出的第二行(Mem)

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

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

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

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

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

下面是buffers与cached的区别。

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,这台机器的内存就是足够的。

Linux性能分析工具详解相关推荐

  1. valgrind和Kcachegrind性能分析工具详解

    作者: zhuyong 原文地址 一.valgrind介绍 valgrind是运行在Linux上的一套基于仿真技术的程序调试和分析工具,用于构建动态分析工具的装备性框架.它包括一个工具集,每个工具执行 ...

  2. 4大JVM性能分析工具详解,及内存泄漏分析方案

    谈到性能优化分析一般会涉及到: Java代码层面的,典型的循环嵌套等 还会涉及到Java JVM:内存泄漏溢出等 MySQL数据库优化:分库分表.慢查询.长事务的优化等 阿里P8架构师谈:MySQL慢 ...

  3. Android 常用的性能分析工具详解:GPU呈现模式, TraceView, Systrace, HirearchyViewer(转)...

    此篇将重点介绍几种常用的Android性能分析工具: 一.Logcat 日志 选取Tag=ActivityManager,可以粗略地知道界面Displaying的时间消耗.当我们打开一个Activit ...

  4. Linux 性能分析命令详解

    top 命令 top -1 按数字1可以看到 多个核,每个核的cpu的使用情况 监控工具\平台来收集cpu的使用率 是所有cpu数量的一个总体的使用率 top -E 按大写字母E可以看到不同单位的内存 ...

  5. JDK自带JVM分析工具详解

    JDK自带JVM分析工具详解 1. JVM分析工具概述 1.1 JVM分析工具简介 1.2 JVM分析工具分类 2. JVM分析工具详解 2.1 idea环境配置 2.2 jps 2.3 jinfo ...

  6. Linux 性能分析工具汇总

    Linux 性能分析工具汇总 我从cnaaa.com购买了服务器. 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章.本文也可以作为检验基础知识的指标,另外文章涵盖了一个系 ...

  7. linux cron实例,cron,linux定时实施工具详解及实例

    cron,linux定时执行工具详解及实例 cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业.由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动.关 ...

  8. Linux性能分析工具top命令详解

    top命令是linux下常用的性能分析工具,能够实时的显示系统中各个进程的资源占用情况,常用于服务端性能分析. top命令说明: top命令的结果分为两部分: 统计信息:前五行是系统的整体统计信息. ...

  9. Linux性能分析工具与图形化方法

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~. 作者:赵坤|腾讯魔王工作室后台开发工程师 在项目开发中,经常会遇到程序启动时间过长.CPU使用率过高等问题,这个时候需要依靠性能分析工具来 ...

最新文章

  1. jquery刷新iframe页面的方法(兼容主流)
  2. [转]linux下TCP连接占用的资源
  3. [html] 进入编辑页面时,如何把光标聚焦到第一个input?
  4. 加强型的记录集权限(数据集权限、约束表达式设置功能)实现方法界面参考...
  5. 造大专计算机学历,广昌县职业技术学校计算机应用专业助您 掌握一技之长获大专学历...
  6. 如何提高个人博客的访问量
  7. mac下Python2运行SparkSQL
  8. C语言相反次序重新排序
  9. C Primer Plus 第9章 函数 9.7 指针简介
  10. idea将项目导出为jar包
  11. centos7桌面没有计算机图标,Centos7,桌面图标消失且右键失效
  12. id在python中是什么意思_Python中的id函数是什么意思
  13. 英语六级试卷软件测试,大学英语六级考试预测试卷以及答案
  14. android:exported、enabled属性
  15. [算法]发散思维能力题目
  16. 点云旋转平移(三)—python open3d点云旋转
  17. HBase简介及安装
  18. 直流无刷电机c语言程序,无位置传感器的直流无刷电机调速控制程序(一)
  19. 是川银藏--------令巴菲特推崇的人物
  20. 在html中标题字体的最大取值,在HTML中,标题字体标记的最大取值是()

热门文章

  1. 人工智能开源项目推荐
  2. 量子计算机:决胜21世纪的利器
  3. Maven 入门教程
  4. 多个域名指向同一个网站实现方法
  5. NLP之基于TextCNN的文本情感分类
  6. java企业开发四:ssh+JPA(hibernate实现)
  7. Mendix敏捷开发零基础学习《三》-高级 (数据删除保护机制、数据关联删除、Security安全、调用外部接口、调用JAVA代码)
  8. 友坚Android210更新---支持7寸电阻屏和电容屏
  9. 小程序页面中时间戳-获取当前年月日
  10. 在线直播系统源码,多图加载成动画的形式如何实现