前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >bcc工具之syscount

bcc工具之syscount

作者头像
233333
发布2022-05-10 14:17:33
5410
发布2022-05-10 14:17:33
举报
文章被收录于专栏:linux驱动个人学习

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

代码语言:javascript
复制
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]

代码语言:javascript
复制
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

选择 怀疑的系统调用之后可以 进一步跟踪

代码语言:javascript
复制
strace -T -e read -p

-T 可以显示出具体时间

-e 显示具体跟踪那个event

代码语言:javascript
复制
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 来进行跟踪了

代码语言:javascript
复制
LTRACE(1)                                          User Commands                                          LTRACE(1)

NAME
       ltrace - A library call tracer
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档