• 安装方法:
curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | sudo bash[root@localhost ~]# 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进程进行过滤:

[root@localhost ~]# 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: fdfd.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 'signalfd'.
fd.typechar     type of FD as a single character. Can be 'f' for file, 4 for IPv4 socket, 6 for IPv6 socket, 'u' for unix socket, p for pipe,'e' for eventfd, 's' for signalfd, 'l' for eventpoll, 'i' for inotify, 'o' for uknown.
fd.name         FD full name. If the fd is a file, this field contains the fullpath. If the FD is a socket, this field contain the connectiontuple.
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。能够非常easy进行通信嗅探,其风格更为对用户友好。

比如,你能够检查由特定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

#定位系统性能瓶颈# sysdig相关推荐

  1. 介绍一个对陌生程序快速进行性能瓶颈分析的技巧

    前言 工作多年,一直做的是curd系统.前几年做的系统应用场景,大多对数据库依赖比较重.例如报表统计,数据迁移,批量对账等.所以这些系统出现性能瓶颈一般出在数据库操作上面. 如果程序因为数据库操作出现 ...

  2. linux 系统性能指标采样脚本

    以下脚本写于redmine性能排查时,用于定位系统性能瓶颈的采样,源地址为~/performanceLog/collectLog.sh中,计划放入github的代码片段库中. 注: 如果mysql的地 ...

  3. Facebook、LinkedIn、Airbnb、Google专家聚首QCon,他们会带来什么?

    4月16日~18日,QCon北京2017将在北京国家会议中心举行.现已确认来自海外的Google.Facebook.Airbnb.LinkedIn.Confluent.AppDynamics等公司,国 ...

  4. 浅谈高并发系统性能调优

    女主宣言 今天带来的是一个篇长文,主要讲解高并发系统架构指标及调优测试经验,希望能对您的研究有所帮助.本文最先发布于 OpsDev,转载已获取作者授权. PS:丰富的一线技术.多元化的表现形式,尽在& ...

  5. 什么样的面试更有效?

    概述 面试不是花拳绣腿,不是请客吃饭,为此你要做好充分的准备,机会永远留给有准备的人.有准备并不是让你遇到困难就想到逃避问题想跳槽到其他的公司,遇到问题后先想想问题的矛盾点在哪?自己是不是可以做的更好 ...

  6. 众安运维监控平台,构建devops一体化监控和运维体系

    当前,企业运维监控的难度日益增大,缺乏统一性.集成化.灵活性的运维管理已经无法适用当前的工作要求,运维人员往往需要使用多个不同的监控系统,容易造成无法及时发现和处理问题的情况,不但增加了工作负担和成本 ...

  7. 浅谈电子配线架智能布线管理系统(二)

    中程科技有限公司 洪宇伟 二.电子配线架智能布线系统的优势 1.实时监测端到端网络连接      电子配线架智能布线系统采用ANSI/TIA/EIA 568-B<商业建筑通信布线标准>推荐 ...

  8. LoadRunner基础

    loadRunner 1.测试套件的组织方式 测试套件:把不同脚本中的测试用例组织起来,一起执行 addTest:把测试脚本中的方法一个个添加进来 makeSuite.TestLoader:把整个测试 ...

  9. Jmeter压力测试和性能调优

    1.压力测试的概念 压力测试是模拟实际应用的软硬件环境及用户使用过程的系统负荷,长时间或超大负荷地运行测试软件,来测试被测系统的性能.可靠性.稳定性等 2.压力测试的目的 1)给出系统当前的性能状况 ...

  10. 金三银四什么样的面试更有效?

    概述 面试不是花拳绣腿,不是请客吃饭,为此你要做好充分的准备,机会永远留给有准备的人.有准备并不是让你遇到困难就想到逃避问题想跳槽到其他的公司,遇到问题后先想想问题的矛盾点在哪?自己是不是可以做的更好 ...

最新文章

  1. K近邻算法:以同类相吸解决分类问题!
  2. 在网页中使用for (flask框架)
  3. C++迟后联编和虚函数表
  4. 在windows上的git bash中安装tree 和 linux tree命令使用
  5. 关于flink的日志文件设置
  6. 录取5秒钟的KNN取景效果gif(Opencv) Python实现
  7. 黑神话:悟空中演示视频中一些设计浅析与建议
  8. Java多线程(十)之ReentrantReadWriteLock深入分析
  9. vue3 element-ui el-date-picker选择日期后,悬停至日期icon时切换为清空icon
  10. 查询目标服务器系统,查看目标服务器的操作系统
  11. nginx 查看每秒有多少访问量
  12. php dwg转pdf文件怎么打开,CAD转PDF怎么转为黑白的PDF文件
  13. 【C#】Excel操作——两个Excel表格比较,如果相同跳过,如果不同将复制到一个表格
  14. python 调用Google Translate API 翻译
  15. radio点击选中,再次点击取消选中
  16. 神经网络中验证集起了什么作用?
  17. 现代数字信号处理——AR模型
  18. 八年级python考试题及答案_(新世纪版)2018-2019学年第二学期八年级信息技术期末试卷+答题卡+答案...
  19. html账号密码提示信息怎么写,密码提示怎么写
  20. C语言隐式类型转换(字符类型以及短整型的运算规则)

热门文章

  1. android flurry 教程,Flurry没有集成到Android应用中
  2. 使用Foxmail管理hotmail邮箱时,只能接收邮件而无法发送邮件的就解决办法
  3. python入门神器_Python入门之神器,助你快速上手!
  4. C语言可变参数va_list
  5. PHP实现的7组经纬度与距离的计算函数
  6. PDF文件怎么打印?分享两种打印方法
  7. 本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列
  8. MMS-MTK-Obigo03c
  9. 微信小程序:微信公众号申请微信小程序并认证的步骤
  10. php分享微信图片不显示,解决微信二次分享不显示摘要和图片的问题