- 2
- 0
- 约3.09千字
- 约 49页
- 2018-07-06 发布于上海
- 举报
Linux性能分析工具、调试工具浅析;目 录性能分析工具;目 录调试工具;性能分析工具;Linux内存浅析-swap;Linux内存浅析-buffer和cache;free;性能分析工具;iostat;iostat;iostat;rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s
0.00 44.90 1.02 27.55 8.16 579.57 4.08 289.80
avgrq-sz avgqu-sz await svctm %util
20.57 22.35 78.21 5.00 14.29
1、平均每次设备I/O操作的等待时间
平均每次I/O 操作只需要 5ms 就可以完成(svctm),即1s可以处理200个请求
但这里只有28.57 次请求,每个 I/O 请求却需要等上 78ms(await),为什么?
因为同一时间发出的 I/O 请求太多
平均等待时间 = 单个 I/O 服务时间 * ( 1 + 2 + … + 请求总数-1) / 请求总数,应用到上面的例子: 平均等待时间 = 5ms * (1+2+…+28)/29 = 70ms,和 iostat 给出的78ms 很接近。
2、 平均I/O队列长度
一秒中有 14.29% 的时间 I/O 队列中是有请求的,所有 29 个 请求都在142毫秒之内处理掉
78.21*28.57 = 2232.8,表明每秒内的I/O请求总共需要等待2232.8ms。所以平均队列长度应为 2232.8ms/142ms =15.7,而且在142ms中有可能某一个时间段是请求更为集中的时间,这时候的队列长度又比15.7更高,所以iostat返回的22.35还是有道理的。
3、如果能看到每次操作的请求大小,就可以看到平均操作avgrq-sz个扇区是合并后的,一些I/O被合并以便更有效地像硬盘写入数据。
;性能分析工具;lsof;lsof;readlink;性能分析工具;vmstat;vmstat; System
– in: 每秒产生的中断次数
– cs: 每秒产生的上下文切换次数
上面这2个值越大,会看到由内核消耗的CPU时间会越多。
若值太大
1、 调低线程或者进程的数目
2、 看能否减少系统调用,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换(比如time)
上下文切换次数过多表示你的CPU大部分浪费在上下文切换;Cpu 都是百分比,相加为100%
–us: 用户进程消耗的CPU时间百分比
该值较高说明用户进程消耗的CPU时间多,但是如果长期超过50% 的使用,那么我们就该考虑优化程序算法或者进 行加速了
– sy: 内核进程消耗的CPU时间百分比
该值较高说明系统内??消耗的CPU资源多。如果太高,表示系统调用时间长,例如是IO操作频繁。
根据经验,us+sy的参考值为80%,如果us+sy大于 80%说明可能存在CPU资源不足。
– id: CPU处在空闲状态时间百分比
– wa: IO等待消耗的CPU时间百分比
该值较高(30%)说明IO等待比较严重,这可能是由于磁盘大量作随机访问造成,也有可能是磁盘的带宽出现瓶颈(块操作)。
b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比)可配合iostat使用
;几个简单的例子:
1、程序中有一个死循环,不断地求平方根
procs中r增加,us上升;
2、大量的系统调用,
cs增加(上下文切换),sy增加
3、大量的IO操作
dd if=/dev/zero of=/data/irenezhan/tmp/tmp_file bs=1K count=10000
bi和bo增大(bo骤然升高,因为dd不断向磁盘写数据)
;top;调试工具;file;作用:
获取二进制文件包含的符号信息
如果没有指出目标文件,则目标文件为a.out
输出:
其值(十六进制)、 类型、名字
;c++filt;ldd;作用:
当ulimit -c 悲剧的等于0时,就可以用来查看代码core的源代码文件及行数。
当某个进程崩溃时,日志文件(/var/log/messages)中就会给出附加的信息,包括程序终止原因、
原创力文档

文档评论(0)