6.2 分析工具

文章插图
6.3 使用方式
//查看系统io信息
iotop
//统计io详细信息
IOStat -d -x -k 1 10
//查看进程级io的信息
pidstat -d 1 -p pid
//查看系统IO的请求,比如可以在发现系统IO异常时,可以使用该命令进行调查,就能指定到底是什么原因导致的IO异常
perf record -e block:block_rq_issue -ag
^C
perf report
7. 网络7.1 说明网络的监测是所有 Linux 子系统里面最复杂的,有太多的因素在里面,比如:延迟、阻塞、冲突、丢包等,更糟的是与 Linux 主机相连的路由器、交换机、无线信号都会影响到整体网络并且很难判断是因为 Linux 网络子系统的问题还是别的设备的问题,增加了监测和判断的复杂度 。现在我们使用的所有网卡都称为自适应网卡,意思是说能根据网络上的不同网络设备导致的不同网络速度和工作模式进行自动调整 。
7.2 分析工具

文章插图
7.3 使用方式
//显示网络统计信息
netstat -s
//显示当前UDP连接状况
netstat -nu
//显示UDP端口号的使用情况
netstat -apu
//统计机器中网络连接各个状态个数
netstat -a | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
//显示TCP连接
ss -t -a
//显示sockets摘要信息
ss -s
//显示所有udp sockets
ss -u -a
//tcp,etcp状态
sar -n TCP,ETCP 1
//查看网络IO
sar -n DEV 1
//抓包以包为单位进行输出
tcpdump -i eth1 host 192.168.1.1 and port 80
//抓包以流为单位显示数据内容
tcpflow -cp host 192.168.1.1
8. 系统负载8.1 说明Load 就是对计算机干活多少的度量(WikiPedia:the system Load is a measure of the amount of work that a compute system is doing)简单的说是进程队列的长度 。Load Average 就是一段时间(1分钟、5分钟、15分钟)内平均Load 。
8.2 分析工具

文章插图
8.3 使用方式//查看负载情况
uptime
top
vmstat
//统计系统调用耗时情况
strace -c -p pid
//跟踪指定的系统操作例如epoll_wait
strace -T -e epoll_wait -p pid
//查看内核日志信息
dmesg
9. 火焰图9.1 说明火焰图(Flame Graph是 Bredan Gregg 创建的一种性能分析图表,因为它的样子近似 ?而得名 。
火焰图主要是用来展示 CPU的调用栈 。
y 轴表示调用栈,每一层都是一个函数 。调用栈越深,火焰就越高,顶部就是正在执行的函数,下方都是它的父函数 。
x 轴表示抽样数,如果一个函数在 x 轴占据的宽度越宽,就表示它被抽到的次数多,即执行的时间长 。注意,x 轴不代表时间,而是所有的调用栈合并后,按字母顺序排列的 。
火焰图就是看顶层的哪个函数占据的宽度最大 。只要有”平顶”(plateaus),就表示该函数可能存在性能问题 。颜色没有特殊含义,因为火焰图表示的是 CPU 的繁忙程度,所以一般选择暖色调 。
常见的火焰图类型有On-CPU、Off-CPU、Memory、Hot/Cold、Differential等等 。
9.2 安装依赖库//安装systemtap,默认系统已安装
yum install systemtap systemtap-runtime
//内核调试库必须跟内核版本对应,例如:uname -r 2.6.18-308.el5
kernel-debuginfo-2.6.18-308.el5.x86_64.rpm
kernel-devel-2.6.18-308.el5.x86_64.rpm
kernel-debuginfo-common-2.6.18-308.el5.x86_64.rpm
//安装内核调试库
debuginfo-install --enablerepo=debuginfo search kernel
debuginfo-install --enablerepo=debuginfo search glibc
9.3 安装git clone https://github.com/lidaohang/quick_location.git
cd quick_location
9.4 CPU级别火焰图cpu占用过高,或者使用率提不上来,你能快速定位到代码的哪块有问题吗?
一般的做法可能就是通过日志等方式去确定问题 。现在我们有了火焰图,能够非常清晰的发现哪个函数占用cpu过高,或者过低导致的问题 。
9.4.1 on-CPUcpu占用过高,执行中的时间通常又分为用户态时间user和系统态时间sys 。
使用方式:
//on-CPU user
sh ngx_on_cpu_u.sh pid
//进入结果目录
cd ngx_on_cpu_u
//on-CPU kernel
sh ngx_on_cpu_k.sh pid
//进入结果目录
cd ngx_on_cpu_k
//开一个临时端口8088
Python -m SimpleHTTPServer 8088
//打开浏览器输入地址
推荐阅读
- 淘宝的促销活动有哪些 淘宝优惠促销什么意思
- 34岁程序员面试被拒,HR:只招30岁以下,活好能加班工资又少的人
- 茉莉苞茶的功效与禁忌,玳玳花主要的功效作用以及禁忌
- 什么牌子的金银花茶比较好,金银花茶的作用
- 买电脑的时候,一定要绕过这8个坑!
- 美容养颜润肤的健康花草茶,品饮花草茶
- 最赚钱的十大网站创业方向
- PHP中的traits使用详解
- 如何快速安全的插入千万条数据?
- Ubuntu 上 Wireshark 的安装与使用
