#定位系统性能瓶颈# sysdig
- 安装方法:
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: 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。能够非常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的更多相关文章
- #定位系统性能瓶颈# strace & ltrace
strace和ltrace分别相应的是系统调用和库函数调用, 系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意思,面向的是硬件. 而库函数调用则面向的是应用开发的.相当于 ...
- #定位系统性能瓶颈# perf
perf是一个基于Linux 2.6+的调优工具,在liunx性能測量抽象出一套适应于各种不同CPU硬件的通用測量方法,其数据来源于比較新的linux内核提供的 perf_event 接口 系统事件: ...
- linux 系统性能指标采样脚本
以下脚本写于redmine性能排查时,用于定位系统性能瓶颈的采样,源地址为~/performanceLog/collectLog.sh中,计划放入github的代码片段库中. 注: 如果mysql的地 ...
- 如何做好IT运营.
定义IT管理的重点在于业务策略与 IT 部门提供的服务之间的一致性.IT 管理可建立必要的管理机制来确保可预测的 IT 服务交付,从而确保业务流程和 IT 流程之间的联系.IT 管理传统上属于CIO. ...
- Testing - 软件测试杂谈
Part-1 起步 测试是发现质量问题.分析.跟踪.推动与解决的过程. 1 熟悉业务,设计优质的测试用例,需要对所测试项目的业务需求非常熟悉 了解整个产品的研发和测试流程 全程参与,对需求.设计.开发 ...
- Web压力架构
原文地址:https://www.cnblogs.com/lori/archive/2015/03/27/4370827.html Web压力架构... 1 一 系统性能测试概述... 1 1.1 性 ...
- 性能测试工具Loadrunner使用经验小结(原创更新版)
1. 引言 1.1. 简介 loadrunner是一种预测系统行为和性能的负载测试工具,它可以轻松创建虚拟用户.创建真实的负载.定位性能问题.重复测试保证系统的高性能 globa-100的注册码:AE ...
- 用 Cloud Performance Test怎么录制测试脚本
Cloud Performance Test 云压力测试平台(以下简称:CPT)可以提供一站式全链路云压力测试服务,通过分布式压力负载机,快速搭建系统高并发运行场景,按需模拟千万级用户实时访问,并结合 ...
- 如何把 MySQL 备份验证性能提升 10 倍
JuiceFS 非常适合用来做 MySQL 物理备份,具体使用参考我们的官方文档.最近有个客户在测试时反馈,备份验证的数据准备(xtrabackup --prepare)过程非常慢.我们借助 Juic ...
随机推荐
- nodejs全局安装路径的位置
一般nodejs安装在默认的C盘,如果不知道安装在哪里,可以打开控制面板-系统和安全-系统-高级配置中找到 所谓全局安装: 是指安装在node中node_module的根目录里,可以在电脑的任何位置调 ...
- iOS CoreData 开发之数据模型关系
接着上一篇,上一篇中,我们简单的实现了一个用户实体,本次添加一个用户信息实体,与用户实体相关联,关系为1:1. 新建一个实体UserInfo:
- cms中某些标题链接的单独写法
href="{$CATEGORYS[45][url]}" 链接写法, {$CATEGORYS[45][catname]} 标题写法 在show页面中 src="{$thu ...
- C#连接Sqlite 出现:混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。的解决方案
C#连接Sqlite 出现: 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集.的解决方案 C#连接sqlite数据库代码 ...
- 仿win8磁贴界面以及功能
做移动产品界面占很大的一部分,同时也是决定一款产品好的的重要因素,最近看见有人放win8的界面效果,搜了两款,一款是只是仿界面没有特效,另一款是自定义组件能够实现反转效果,今天分析一下这两类界面. 仿 ...
- tidyverse生态链
一套完整的数据分析流程 , 如下图所示 从图中可以看到,整个流程包括读取数据,整洁数据,数据探索和交流部分.经过前两部分, 我们可以得到一个整理好的数据,它的每一行都是一个样本 , 每一列是一个变量. ...
- 移动的 touch事件中的touches、targetTouches和changedTouches
touches: 当前屏幕上所有触摸点的列表; targetTouches: 当前对象上所有触摸点的列表; changedTouches: 涉及当前(引发)事件的触摸点的列表 通过一个例子来区分一下触 ...
- 批量obj格式直接转gltf
在cesium中的模型需要的是gltf或glb格式的文件,之前的做法是用将模型从3d max中导出dae格式的文件(需要插件),然后用collada2gltf工具将dae格式转成gltf. 最近翻看c ...
- cocos creator destroy方法
node.destroy(),Node.destroyAllChildren并不会立即销毁,实际销毁操作会延迟到当前帧渲染前执行. 这段话可能不明白,但是在Node.destroyAllChildre ...
- JavaScript day4(逻辑运算符)
逻辑运算符 逻辑运算符用于测定变量或值之间的逻辑 逻辑与运算符:&&.同时满足(and). 通过if语句的嵌套来实现: if (num > 5) { if (num < 1 ...