bcc工具之syscount

在排查linux性能问题的时候我们有时候会发现 整体 CPU使用率 很高,但是绝大多是是在
sys 上的,usr上的CPU时间很少,这种就需要看看是内核空间在干什么了,
是系统在 系统调用太耗时还是其他原因倒是的sys使用率上升。
如果查看 系统调用时间 和 系统调用次数呢
bcc为 我们提供了这个工具 syscount

sh@ubuntu:/usr/sbin$ sudo syscount-bpfcc 
Tracing syscalls, printing top 10... Ctrl+C to quit.
^C[19:42:44]
SYSCALL                   COUNT
futex                       397
times                       315
poll                         92
read                         84
recvmsg                      78
nanosleep                    39
openat                       33
close                        33
fstat                        33
epoll_pwait                  32

Detaching...

如何查看 系统调用耗时呢,如果怀疑某个进程导致的,直接 strace -cp [pid]

sh@ubuntu:/usr/sbin$ sudo strace -cp 19014
strace: Process 19014 attached
^Cstrace: Process 19014 detached
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 33.81    0.000423          23        18           epoll_pwait
 15.03    0.000188          17        11           openat
 13.11    0.000164          13        12           read
  9.43    0.000118          10        11           close
  9.43    0.000118          10        11           ioctl
  9.27    0.000116          10        11           fstat
  3.84    0.000048          16         3           kill
  2.80    0.000035          11         3           write
  2.24    0.000028          14         2           futex
  1.04    0.000013          13         1           epoll_ctl
------ ----------- ----------- --------- --------- ----------------
100.00    0.001251                    83           total

选择 怀疑的系统调用之后可以 进一步跟踪
strace -T -e read -p
-T 可以显示出具体时间
-e 显示具体跟踪那个event

sh@ubuntu:/usr/sbin$ sudo strace -T -e read -p 19014
strace: Process 19014 attached
read(32, "/bin/bash\0", 1024)           = 10 <0.000111>
read(32, "/bin/bash\0", 1024)           = 10 <0.000099>
read(32, "/bin/bash\0", 1024)           = 10 <0.000210>
read(32, "/bin/bash\0", 1024)           = 10 <0.000124>
read(32, "/bin/bash\0", 1024)           = 10 <0.000192>
read(32, "/bin/bash\0", 1024)           = 10 <0.000097>
read(32, "/bin/bash\0", 1024)           = 10 <0.000097>
read(32, "/bin/bash\0", 1024)           = 10 <0.000108>
read(32, "/bin/bash\0", 1024)           = 10 <0.000079>
read(32, "/bin/bash\0", 1024)           = 10 <0.000086>

也可以使用 这个 工具 来观察
有时候 strace 看不出来啥,因为不是每个 C库的调用都会进行系统调用,
比如 fread 这种,C库都是帮我们做了缓存的。
这就需要使用 ltrace 来进行跟踪了

LTRACE(1)                                          User Commands                                          LTRACE(1)

NAME
       ltrace - A library call tracer
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值