#定位系统性能瓶颈# sysdig

  • 安装方法:
curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | sudo bash

[[email protected] ~]# curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | sudo bash
* Detecting operating system
* Installing EPEL repository (for DKMS)
* Installing Draios public key
* Installing Draios repository
* Installing kernel headers
省略。。。。

安装完毕后二话不说直接运行 sysdig,注意出现刷屏后随时按ctrl-c

1187 11:24: data=root:x:0:.bin:x:1:.daemon:x:2:.sys:x:3:.adm:x:4:.tty:x:5:.disk:x:6:.lp:x:7:.mem:
1264 11:24:27.109080267 0 systemd-udevd (489) > close fd=14(<f>/etc/group)
1265 11:24:27.109080581 0 systemd-udevd (489) < close res=0
1266 11:24:27.109082572 0 systemd-udevd (489) > munmap addr=7F4CE05B7000 length=4096
1267 11:24:27.109085958 0 systemd-udevd (489) < munmap res=0 vm_size=45468 vm_rss=1984 vm_swap=1228
1268 11:24:27.109089928 0 systemd-udevd (489) > read fd=13(<f>/usr/lib/udev/rules.d/69-cd-sensors.rules) size=4096
1269 11:24:27.109090545 0 systemd-udevd (489) < read res=0 data=
1270 11:24:27.109090992 0 systemd-udevd (489) > close fd=13(<f>/usr/lib/udev/rules.d/69-cd-sensors.rules)
1271 11:24:27.109091119 0 systemd-udevd (489) < close res=0
1272 11:24:27.109091753 0 systemd-udevd (489) > munmap addr=7F4CE05B8000 length=4096
1273 11:24:27.109093095 0 systemd-udevd (489) < munmap res=0 vm_size=45464 vm_rss=1980 vm_swap=1228
1274 11:24:27.109094748 0 systemd-udevd (489) > stat

有点类似strace、tcpdump的输出,其输出的信息含义为:

%evt.num %evt.time %evt.cpu %proc.name (%thread.tid) %evt.dir %evt.type %evt.args

其中:

	* evt.num 是自增的事件号
	* evt.time 是事件发生的时间戳
	* evt.cpu 是捕获事件所在的CPU号
	* proc.name 是产生事件的进程名称
	* thread.tid is 产生事件的线程id
	* evt.dir 是事件方向, > 表示进入事件 < 表示退出事件
	* evt.type 是事件名称, 如 'open' or 'read'
	* evt.args 事件的参数列表
  • 文件输入输出:

使用-w选项把输出信息保存为文件:

$ sysdig –w myfile.scap

-n选项指定行数:

$ sysdig –n 100 –w myfile.scap

-r选项表示从已保存的文件读出并输出:

$ sysdig –r myfile.scap

  • 过滤器:

sysdig的过滤器有点像tcpdump,前面有说到输出格式的具体含义,这里的过滤器就可以对任意的一项进行设定,比如我对sshd进程进行过滤:

[[email protected] ~]# sysdig proc.name=sshd
29255 11:44:47.958210052 0 sshd (2131) > clock_gettime
29256 11:44:47.958210248 0 sshd (2131) < clock_gettime
29257 11:44:47.958211128 0 sshd (2131) > select
29258 11:44:47.958212200 0 sshd (2131) < select res=1
29259 11:44:47.958212428 0 sshd (2131) > rt_sigprocmask
29260 11:44:47.958212625 0 sshd (2131) < rt_sigprocmask
29261 11:44:47.958213022 0 sshd (2131) > rt_sigprocmask
29262 11:44:47.958213187 0 sshd (2131) < rt_sigprocmask
29263 11:44:47.958213389 0 sshd (2131) > clock_gettime
29264 11:44:47.958213535 0 sshd (2131) < clock_gettime
29265 11:44:47.958214129 0 sshd (2131) > write fd=3(<4t>192.168.1.12:4686->10.18.5.47:22) size=2660
29266 11:44:47.958283315 0 sshd (2131) < write res=2660 data=.r.t..T.=..........{........<).......3.....Y>G..4.M.s..]....Q.1hAN...s.z.....B..
29267 11:44:47.958284557 0 sshd (2131) > clock_gettime
29268 11:44:47.958284822 0 sshd (2131) < clock_gettime
29269 11:44:47.958285308 0 sshd (2131) > select
29270 11:44:47.958287711 0 sshd (2131) > switch next=0 pgft_maj=8 pgft_min=1714 vm_size=135212 vm_rss=2320 vm_swap=0
29272 11:44:47.958519093 0 sshd (2131) < select res=1
29273 11:44:47.958520932 0 sshd (2131) > rt_sigprocmask
29274 11:44:47.958521450 0 sshd (2131) < rt_sigprocmask
29275 11:44:47.958521687 0 sshd (2131) > rt_sigprocmask
29276 11:44:47.958521860 0 sshd (2131) < rt_sigprocmask 

这是非常常用的过滤方式,一般我们都是对特定进程感兴趣,指定进程名称后即可捕获到所有的系统调用事件。

类似tcpdump,sysdig也支持以下比较符号和布尔符号:

standard comparison operators(=, !=, <, <=, >, >=, contains)

Boolean operators (and, or and not)

$ sysdig proc.name=cat or proc.name=vi

捕获cat或者vi进程的系统调用,这里用到or

$ sysdig proc.name!=cat and evt.type=open

显示除了cat进程以外的open调用

$ sysdig -l
----------------------
Field Class: fd

fd.num          the unique number identifying the file descriptor.
fd.type         type of FD. Can be 'file', 'directory', 'ipv4', 'ipv6', 'unix',
                 'pipe', 'event', 'signalfd', 'eventpoll', 'inotify' or 'signal
                fd'.
fd.typechar     type of FD as a single character. Can be 'f' for file, 4 for IP
                v4 socket, 6 for IPv6 socket, 'u' for unix socket, p for pipe,
                'e' for eventfd, 's' for signalfd, 'l' for eventpoll, 'i' for i
                notify, 'o' for uknown.
fd.name         FD full name. If the fd is a file, this field contains the full
                 path. If the FD is a socket, this field contain the connection
                 tuple.
fd.directory    If the fd is a file, the directory that contains it.
fd.filename     If the fd is a file, the filename without the path.
fd.ip           matches the ip address (client or server) of the fd.
fd.cip          client IP address.
fd.sip          server IP address.
fd.lip          local IP address.
省略。。。。

-l选项会列出所有可以使用的字段,我们可以用这里显示的字段自行匹配需要的信息

好好利用这些实用的字段可以根据自己具体情况做各种系统调用的监测,

比如你想捕获一下本机除了nginx以外的其他网络链接情况可以这样:

$ sysdig evt.type=accept and proc.name!=nginx

  • evt.arg 与 evt.rawarg

这两个字段需要特别解释一下,由sysdig捕获的事件一般是属于某种类型(如 open \ read),以及一系列参数(如 fd \ name)。

sysdig强大之处在于可以使用过滤器来过滤参数

$ sysdig evt.type=execve and evt.arg.ptid=bash

这个过滤器表示对父进程名字为bash的的execve系统调用进行过滤,evt.arg and event.rawarg的区别是后者不对PID、FD,error codes等进行解析。

$ sysdig evt.arg.res=ENOENT

这个可以用来捕获一个特定的I/O错误,这个值通常是负数

$ sysdig " evt.rawarg.res<0 or evt.rawarg.fd<0"

会给你所有产生错误的系统调用。

  • 获得所有的系统调用
$ sysdig –L
输出省略。。。
  • 查看可用的凿子列表
$ sysdig -cl | less

默认有以下类目可用,各个类目中分布有多个内建的凿子。

	* CPU Usage:CPU使用量
	* Errors:错误
	* I/O
	* Logs:日志
	* Misc:混杂
	* Net:网络
	* Performance:性能
	* Security:安全
	* System State:系统状态
  • sysdig实例:

我们可能经常会遇到监控网络I/O的情况,对于sysdig,可以很容易进行通信嗅探,其风格更为对用户友好。

例如,你可以检查由特定IP地址,特定进程(如nginx)提供的数据(ASCII编码格式):

# sysdig -s 4096 -A -c echo_fds fd.cip=192.168.1.100 -r /tmp/sysdig-scap.gz proc.name=nginx

如果你想要监控原生数据传输(二进制格式),请把“-A”替换为“-X”:

# sysdig -s 4096 -X -c echo_fds fd.cip=192.168.1.100 -r /tmp/sysdig-scap.gz proc.name=nginx

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 10:31:29

#定位系统性能瓶颈# sysdig的相关文章

#定位系统性能瓶颈# 序言

http://blog.csdn.net/JeffreyNicole 这是我在csdn的博客,现在搬迁到51cto把原来的文章也拷贝过来 1.监控: 2.测试: 3.优化: linux系统的全部常见的性能工具,包括监控.测试.优化三个范畴,这三张图来自系统性能专家 Brendan D. Gregg  (Linux Performance Tools) 我希望把这里全部工具都简单介绍一遍,但不是想做成大而全的参考文档形式 而是想用几个简单的例子,用实战的方式把这些工具的常见使用方法和场景介绍给大家

#定位系统性能瓶颈# strace &amp;amp; ltrace

strace和ltrace分别相应的是系统调用和库函数调用, 系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意思,面向的是硬件. 而库函数调用则面向的是应用开发的.相当于应用程序的api.常见的lib有openssl.libxml等. 前者属于内核层.后者属于用户层,以下有其层次相应图 引用<UNIX环境高级编程>对这两个概念的差别描写叙述例如以下:      还有一个可说明系统调用和库函数之间的区别的样例是, U N I X提供决定当前时间和日期的 界面.某些操

#定位系统性能瓶颈# strace &amp; ltrace

strace和ltrace分别对应的是系统调用和库函数调用, 系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意思,面向的是硬件. 而库函数调用则面向的是应用开发的,相当于应用程序的api,常见的lib有openssl.libxml等. 前者属于内核层,后者属于用户层,下面有其层次对应图 引用<UNIX环境高级编程>对这两个概念的区别描述如下:      另一个可说明系统调用和库函数之间的差别的例子是, U N I X提供决定当前时间和日期的 界面.某些操作系统提供

#定位系统性能瓶颈# perf

perf是一个基于Linux 2.6+的调优工具,在liunx性能测量抽象出一套适应于各种不同CPU硬件的通用测量方法,其数据来源于比较新的linux内核提供的 perf_event 接口 系统事件: perf tool 支持一系列可计算的事件类型.该工具和底层内核接口可以监测来自不同来源的事件. 例如,一些事件是来源于纯粹的内核计数器,这些event在这种情况下被称为软件事件.例子包括:context-switch.minor-fault等. 事件的另一个来源是处理器本身及其性能监控装置(PM

浮躁时代的安静角落——《Linux大棚命令百篇》

曾几何时,急功近利.揠苗助长之风吹遍了整个互联网行业,孜孜不倦.循序渐进技术博客Linux大棚成了这个浮躁时代的安静角落,博主多年如一日的积累汇聚成了一本<Linux大棚命令百篇>. 与适合作为系统学习的教材的<循序渐进Linux>不同,<Linux大棚命令百篇>的最大特点就是取材于Linux大棚,以博客系列文章的形式组织全书,在文风轻松生动.诙谐风趣的同时又不失知识的结构化和系统化,不但可以作为案头书,也能在欧阳修的"三上"像读小说一样阅读. 本书

性能测试工Loadrunner使用经验总结

1. 引言 1.1. 简介 loadrunner是一种预测系统行为和性能的负载测试工具,它可以轻松创建虚拟用户.创建真实的负载.定位性能问题.重复测试保证系统的高性能 1.2. 组成 1.1.1. Vuser Generator c语言脚本开发的 1.1.2. Controller 指挥官的作用,控制执行场景 1.1.3. Analysis 收集测试数据,进行结果分析的 1.3. 文档说明 本博客是结合我所在公司性能测试过程中使用loadrunner工具,总结出的经验文档,包括了安装.编写脚本.

压力测试~一套完整的压力测试项目文档

Web压力架构 张占岭 Web压力架构... 1 一 系统性能测试概述... 1 1.1 性能测试概述... 1 1.2 性能测试的指标... 2 1.3 关键点的描述... 2 1.4 性能测试的目的... 2 1.5 测试项目开发规范... 2 二 使用VS压力测试工具进行测试... 3 2.1 性能测试(WebTest). 3 2.1.1 概念... 3 2.1.2 如何建立性能测试... 3 2.1.3 使用CS代码快速建立性能测试... 5 2.1.4 运行当前性能测试... 6 2.

性能测试场景浅析

性能测试过程中,目标不同,需要选择的性能测试场景也有很大的差异,今天以HyperPacer为例,简单说说并发测试.负载测试.压力测试到底都是什么怎么个含义. 并发测试 所谓并发测试就是模拟一群人同一时间做事.在性能测试工具还未普及的暗黑岁月,并发测试都是一群人盯着电脑,一个人喊开始,大家便在同一时间点开始操作的那种,点完之后还得每个人看响应,报时间,一群人玩儿的不亦乐乎,做个性能测试顺道还能交流交流,联络联络感情,看着挺好玩,但效率上保证不了.而且并发量不是非常大这样还能玩的起来,并发量要是成百

如何做好IT运营.

定义IT管理的重点在于业务策略与 IT 部门提供的服务之间的一致性.IT 管理可建立必要的管理机制来确保可预测的 IT 服务交付,从而确保业务流程和 IT 流程之间的联系.IT 管理传统上属于CIO.CEO和一些 IT 和业务线(line of business,LOB)执行人员的专属领域.SOA管理是 IT 管理的扩展.它与 IT 管理的区别在于,SOA 管理的重点具体放在通过服务和面向服务的计算交付的有效 IT 实现上.面向服务的计算机的目标是把业务流程作为 IT 服务交付.与 IT 管理不