Linux资源分析工具杂谈

开篇之前请大家先思考一个问题:

       磁盘的平均I/O响应时间是1 ms,这个指标是好,还是差?

众所周知,计算机科学是客观的,也就是说对于一个给定的问题,我们总是能给出明确的答案,比如我们网上购物买了两件100元的衣服,我们应该付款200元,但是系统给我们计算出的金额确是300元,我们可以明确的告诉商家,结果算错了。与此不同,性能却常常是主观的,甚至对性能问题的判断都可能是不准确的,比如我们刚刚提到的1ms,一定有人认为是好的,也有人认为是差的,要客观的回答这个问题,可能是一项系统性的工作,必须需要首先定义基准(基准定义本身相对复杂,内容可以写一本书,在此不做深入讨论),有了基准指标,通过比较才能得出合理的结论。表1列出了一些数值,期望可以使大家对计算机科学的一些延时有一个粗略的概念,表中以一个3.3GHZ主频的CPU一次访问寄存器为基准进行说明,比如如果我们认为计算机世界中一次寄存器访问的时间0.3纳秒是现实生活中的1秒,那么访问一次内存的相对时间就是6分钟,表1中参考数据源自互联网。

表1. 计算机科学中的延时

软件发展到今天可谓日新月异,短短的几十年中极大的提高了人类的生产力。伴随着软件功能的发展,软件的复杂度也在几何级的增长,从经济性的角度来讲,人们总是希望投入更少的硬件资源,更少的电力,更少的时间来完成更多的生产任务,人们期望自己的每一度电,每一分钟时间都在用在有意义的生产活动中。面对复杂的软件,我们如何知道软件在做有意义的事情而不是在无意义的阻塞,或者系统的哪一部分确实存在性能瓶颈,比如内存太小,硬盘太慢,CPU太慢等等。系统性能分析可以在不同的维度进行审视,常用的维度有负载分析和资源分析,本文希望从资源分析的角度对相关的工具进行讨论。

中国有句古话,工欲善其事,必先利其器,人类文明进步的最重要的标志就是可以在对的时候使用对的工具。但是问题来了,什么是对的时候使用对的工具?前人对问题总结后分成了三类,第一种是理解问题,也知道如何解决问题,第二种是理解问题,但是以个人的能力无法解决问题,第三类问题是不知道问题的存在,更不知道如何解决问题。第一种问题和第二种问题我们称之为基础问题,因为我们可以通过个人能力或者团队合作解决这类问题,第三种问题未知的未知才是我们需要重点关注的问题,理论上来说,在一个成熟的软件开发周期中,不允许存在未知的未知,我们需要对系统的各个层次都有透彻的理解和深入的把握。

当今世界的三大主流操作系统Linux, Windows NT, Mac OS都提供了系统的工具集来监控,排查各类性能问题,比如Windows平台上Mark Russinovich的Sysinternals工具集,Windbg工具集,Linux 平台上的Sysstat工具集, Brendan Gregg力推的DTrace工具集。为了解决已知和未知的问题,我们首先需要对操作系统和硬件的相关指标有一个基础的认识,否则即使有了适合的工具,统计出了详尽的结果,我们仍然无法透彻的理解软件和系统发生了什么。如图1所示是性能分析大神Brendan Gregg对常用的性能分析工具进行的详尽总结。

图1. Linux Performance Tools

基础篇

下面我们对图1中的一些常用基础分析工具以及应用场景进行简单的分析。常用的性能分析工具包括:uptime, vmstat, mpstat, sar, ps, top, pidstat等等,这些命令的简单描述请见表2。

表2. 常用性能分析工具简单描述

系统发生CPU性能问题时通常第一个使用的命令是uptime和top,uptime命令输出系统过去1分钟,5分钟和15分钟的平均负载,通过这三个数值可以粗略的分析出系统过去15分钟内负载是降低了,升高了,或者是持平,uptime运行结果如图2所示。

图2. uptime运行结果

多核系统分析中接下来要使用的命令通常是mpstat,我们可以通过mpstat对CPU的每个核的使用情况都进行监控,mpstat不仅可以对每个核心的数据进行分别统计,还可以对所有核心的平均使用情况进行统计,mpstat运行结果如图3所示。

图3. mpstat运行结果

当我们使用top发现某一个进程的CPU或者其他资源使用异常的时候,我们可能需要引入第三个命令pidstat,我们甚至可以将这一统计数据精确到具体的线程。Top和pidstat运行结果见图4和图5。

图4. Top运行结果

图5. Pidstat分线程运行结果

当我们需要对tcp流量进行简单统计,又不愿意要引入更复杂的tcpdump网络监控的时候,sar命令是个不错的选择,当然,统计网络流量只是sar的一个功能而已,更多功能可以参考sar man page, 使用sar命令统计tcp流量运行结果如图6所示。

图6. sar命令统计tcp流量运行结果

限于篇幅的原因,此处不再一一讨论图1中的每一个命令。

进阶篇

动态追踪是一种高级调试技术可以帮助开发人员以非常低的成本快速排查和解决软件性能问题。当今世界软件面临的问题一是规模,二是复杂度。随着 BPF 追踪系统(基于时间采样)最后一个主要功能被合并至 Linux 4.9-rc1 版本的内核中,Linux内核拥有了类似DTrace的原生追踪功能。DTrace是Solaris系统中的高级追踪器,功能强大,对于长期使用 DTrace 的用户,这是一个振奋人心的消息,现在Linux系统上可以在生产环境中使用安全的、低负载的定制追踪系统,通过执行时间的柱状图和频率统计等信息,分析应用的性能以及内核。最初用于Linux的追踪项目有很多,但是这个最终被合并进Linux内核的技术从一开始就根本不是一个追踪项目:它最开始是用于伯克利包过滤器 Berkeley Packet Filter(BPF)的一个增强功能。这些补丁允许BPF重定向数据包,从而创建软件定义网络。久而久之,对事件追踪的支持就被添加进来了,使得程序追踪可用于Linux系统。BPF Compiler Collection (BCC), PLY 和 BPFTRACE都是正在开发的BPF前端,BCC架构如图7所示,下面以BCC为例对Linux动态追踪技术进行简单说明,

图7. Linux BCC/BPF Tracing Tools

假设我们有这样一个场景,系统中偶尔会运行新的进程,这些新的进程可能会消耗大量系统资源,从而对我们生产上运行的环境产生干扰,但是这种进程可能运行时间极为短暂,我们怎样才能知道发生了这种情况呢?top?可能不行,时间太短了,可能top还没来得及统计,进程已经退出了。这种情况下最适合使用的工具之一就是BCC工具集中的execsnoop,图8中可以看出,每一个新启动的进程都会被记录在案。

图8. Execsnoop命令运行结果

网络程序开发中我们可能想要按照TCP连接来统计一下通信两端的吞吐量和生命周期,这个时候tcplife就派上用场了,tcplife对TCP会话的生命周期和吞吐量统计如图9所示。

图9. Tcplife命令运行结果

对于一个给定的进程,我们甚至可以要求内核通过BPF统计CPU处理之外时间的内核和用户堆栈,具体使用方法和示例请见图10。

图10 offcputime命令运行结果

总结

本文对Linux资源分析相关的基础工具、高级工具以及典型应用场景进行了简单的总结,算是抛砖引玉,希望对大家有所帮助。

Linux资源分析工具杂谈(长文慎入)的更多相关文章

  1. KRPano资源分析工具使用说明(KRPano XML/JS解密 切片图批量下载 球面图还原 加密混淆JS还原美化)

    软件交流群:571171251(软件免费版本在群内提供) krpano技术交流群:551278936(软件免费版本在群内提供) 最新博客地址:blog.turenlong.com 限时下载地址:htt ...

  2. 使用KRPano资源分析工具强力加密KRPano项目(XML防破解,切片图保护,JS反调试)

    软件交流群:571171251(软件免费版本在群内提供) krpano技术交流群:551278936(软件免费版本在群内提供) 最新博客地址:blog.turenlong.com 限时下载地址:htt ...

  3. (转)超全整理!Linux性能分析工具汇总合集

    超全整理!Linux性能分析工具汇总合集 原文:http://rdc.hundsun.com/portal/article/731.html 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望, ...

  4. 使用KRPano资源分析工具分析动态网站资源

    软件交流群:571171251(软件免费版本在群内提供) krpano技术交流群:551278936(软件免费版本在群内提供) 最新博客地址:blog.turenlong.com 限时下载地址:htt ...

  5. 使用KRPano资源分析工具还原全景图片

    软件交流群:571171251(软件免费版本在群内提供) krpano技术交流群:551278936(软件免费版本在群内提供) 最新博客地址:blog.turenlong.com 限时下载地址:htt ...

  6. 使用KRPano资源分析工具一键下载全景网站切片图

    软件交流群:571171251(软件免费版本在群内提供) krpano技术交流群:551278936(软件免费版本在群内提供) 最新博客地址:blog.turenlong.com 限时下载地址:htt ...

  7. 使用KRPano资源分析工具解密被加密的XML

    软件交流群:571171251(软件免费版本在群内提供) krpano技术交流群:551278936(软件免费版本在群内提供) 最新博客地址:blog.turenlong.com 限时下载地址:htt ...

  8. Linux 日志分析工具(logwatch)安装及使用

    Linux 日志分析工具(logwatch)安装及使用 日志是非常重要的系统文件,管理员每天的重要工作就是分析和查看服务器的日志,判断服务器的健康状态.但是日志管理又是一项非常枯燥的工作,如果需要管理 ...

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

    top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,常用于服务端性能分析. top命令说明 [www.linuxidc.com@linuxidc-t-tomcat-1 ...

随机推荐

  1. chattr和lsattr的基本用法

    lsattr filename  查看一个文件的属性 chattr filename  改变一个文件的属性 主要用途:实现文件的原有内容不允许改变,但可以增加新行,则需通过改变文件的属性来实现. ch ...

  2. 数组方括号有趣的split方法

    今天看到了split的方法感觉好神奇的样子 split是javascript内置方法 就像join方法是连接数组并转换为字符串一样split方法是把数组拆分成多个部分,而且每一个部分都是数组的元素. ...

  3. session 存到memcache里

    web服务器的php session都给memcached ,这样你不管分发器把 ip连接分给哪个web服务器都不会有问题了,配置方法很简单,就在php的配置文件内 增加一条语句就可以了,不过前提你需 ...

  4. 通用导出excel

    循环导出所有行和列 def export_excel(table_name): host,user,passwd,db='192.168.0.12','root','myjcyf','us_sys' ...

  5. python学习:格式化输出

    格式化输出 代码如下: name = input("Name:") age = input("Age:") job = input("Job:&quo ...

  6. redis日志格式

    在redis.conf中,在大概65行左右有个loglevel # 指定日志记录级别# Redis总共支持四个级别:debug.verbose.notice.warning,默认为verbose# d ...

  7. Spark on Yarn with HA

    Spark 可以放到yarn上面去跑,这个毫无疑问.当Yarn做了HA的时候,网上会告诉你基本Spark测不需做太多的关注修改,实际不然. 除了像spark.yarn开头的相关配置外,其中一个很重要的 ...

  8. 如何根据checkbox的值进行勾选!例:我要勾选value等于scanbuy,terminal的复选框!

    微商城 随手购 自助购 <div class="controls" id="client"> <input id="mall&quo ...

  9. ECMA Script 6_唯一容器 Set_映射容器 Map

    唯一容器 Set ES6 提供了新的数据结构 Set Set 结构没有键名,只有键值(或者说 键名 和 键值 是同一个值) 它类似于数组,但是成员的值都是唯一的,没有重复的值 Set 内部判断两个值是 ...

  10. 1. js数据类型_对象_函数_内存

    1. js数据类型有哪些? 基本(值)类型 Number ---- 任意数值 String ---- 任意字符串 Boolean ---- true/false undefined ---- unde ...