16 Star 1 Fork 53

src-openEuler/bcc

 / 详情

默认外网源下使用yum对glibc-devel安装、卸载、再安装之后,bcc-tools软件包offcputime工具使用时报错找不到路径

待办的
缺陷
创建于  
2023-05-18 13:55

问题概述

本意是想安装bcc-tools软件包测试一下offcputime工具。
但过程中发现了一个问题:
前提:使用默认的外网源。
如果先yum install glibc-devel软件包,再yum remove glibc-devel软件包,然后再yum install glibc-devel软件包,会导致bcc中包含的offcputime工具在执行时查找不到路径失败,从而导致执行报错。(因为带来了kernel-header路径的变化,如/usr/src/kernels/4.19.90-2204.4.0.0146.oe1.x86_64)
是否应该增加校验或者同步、控制一下这种其他软件包的卸载重装,对于kernel-header以及bcc-tools的影响?
或者bcc加上判断?

补充说明

1)yum remove glibc-devel的时候,原来/lib/modules/4.19.90-2106.3.0.0095.oe1.x86_64目录下的build文件会被删除掉(build -> /usr/src/kernels/4.19.90-2106.3.0.0095.oe1.x86_64)。
2)在重新 yum install glibc-devel之后,新的/lib/modules/4.19.90-2204.4.0.0146.oe1.x86_64目录下会被建立一个build文件(build -> /usr/src/kernels/4.19.90-2204.4.0.0146.oe1.x86_64)
3)再去yum install bcc-tools,执行offcputime的时候,还是会去找旧目录下的build,然后找不到就报错了。

[root@localhost modules]# ls -tlr
total 8
drwxr-xr-x. 7 root root 4096 May 18 17:42 4.19.90-2106.3.0.0095.oe1.x86_64
drwxr-xr-x  2 root root 4096 May 18 17:49 4.19.90-2204.4.0.0146.oe1.x86_64

详细过程如下:

1)系统版本:

[root@localhost ~]# cat /etc/os-release 
NAME="openEuler"
VERSION="20.03 (LTS-SP2)"
ID="openEuler"
VERSION_ID="20.03"
PRETTY_NAME="openEuler 20.03 (LTS-SP2)"
ANSI_COLOR="0;31"

2)默认安装的kernel信息:

[root@localhost ~]# rpm -qa|grep kernel
kernel-devel-4.19.90-2106.3.0.0095.oe1.x86_64
kernel-tools-4.19.90-2106.3.0.0095.oe1.x86_64
kernel-4.19.90-2106.3.0.0095.oe1.x86_64
[root@localhost ~]# 
 
[root@localhost ~]# rpm -qa|grep bcc-tools
[root@localhost ~]# 

3)yum install glibc-devel
输入图片说明
它的更新不会造成kernel头文件的更新。
安装完glibc-devel之后的kernel信息

  Verifying        : glibc-devel-2.28-69.oe1.x86_64                                                                                                                                   6/6 

Upgraded:
  glibc-2.28-79.oe1.x86_64                                 glibc-common-2.28-79.oe1.x86_64                                 glibc-devel-2.28-79.oe1.x86_64                                

Complete!
[root@localhost ~]# rpm -qa|grep kernel
kernel-devel-4.19.90-2106.3.0.0095.oe1.x86_64
kernel-tools-4.19.90-2106.3.0.0095.oe1.x86_64
kernel-4.19.90-2106.3.0.0095.oe1.x86_64
[root@localhost ~]# 

4)安装bcc-tools软件包

yum install bcc-tools
[root@localhost ~]# rpm -qa|grep bcc-tools
bcc-tools-0.15.0-2.oe1.x86_64
[root@localhost ~]# 

5)启动mariadb服务,使用offcputime工具采集信息

yum install mariadb mariadb-server
systemctl start mariadb
systemctl status mariadb

这个时候执行
/usr/share/bcc/tools/offcputime -df -p pgrep -nx mysqld 10 > out.stacks
并不会报错

[root@localhost ~]# /usr/share/bcc/tools/offcputime -df -p `pgrep -nx mysqld` 10 > out.stacks
[root@localhost ~]# 
[root@localhost ~]# ls -tlr out.stacks 
-rw-r--r-- 1 root root 2868 May 17 17:53 out.stacks
[root@localhost ~]# cat out.stacks |more
mysqld;pthread_cond_timedwait;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_futex;do_futex;futex_wait;futex_wait_queue_me;schedule;__schedule;finish_task_switch 5000097
mysqld;pthread_cond_timedwait;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_futex;do_futex;futex_wait;futex_wait_queue_me;schedule;__schedule;finish_task_switch 5000115
mysqld;pthread_cond_timedwait;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_futex;do_futex;futex_wait;futex_wait_queue_me;schedule;__schedule;finish_task_switch 9005299
mysqld;__nanosleep;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_nanosleep;hrtimer_nanosleep;do_nanosleep;schedule;__schedule;finish_task_switch 9005321
mysqld;__nanosleep;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_nanosleep;hrtimer_nanosleep;do_nanosleep;schedule;__schedule;finish_task_switch 9005345
mysqld;pthread_cond_timedwait;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_futex;do_futex;futex_wait;futex_wait_queue_me;schedule;__schedule;finish_task_switch 9005354
mysqld;pthread_cond_timedwait;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_futex;do_futex;futex_wait;futex_wait_queue_me;schedule;__schedule;finish_task_switch 9005403
mysqld;[unknown];syscall;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_io_getevents;do_io_getevents;read_events;schedule;__schedule;finish_task_switch 9505447
mysqld;[unknown];syscall;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_io_getevents;do_io_getevents;read_events;schedule;__schedule;finish_task_switch 9505604
mysqld;[unknown];syscall;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_io_getevents;do_io_getevents;read_events;schedule;__schedule;finish_task_switch 9505655
mysqld;syscall;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_io_getevents;do_io_getevents;read_events;schedule;__schedule;finish_task_switch 9508359
mysqld;syscall;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_io_getevents;do_io_getevents;read_events;schedule;__schedule;finish_task_switch 9508579
mysqld;syscall;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_io_getevents;do_io_getevents;read_events;schedule;__schedule;finish_task_switch 9508601
mysqld;syscall;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_io_getevents;do_io_getevents;read_events;schedule;__schedule;finish_task_switch 9508614
mysqld;syscall;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_io_getevents;do_io_getevents;read_events;schedule;__schedule;finish_task_switch 9508621
mysqld;syscall;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_io_getevents;do_io_getevents;read_events;schedule;__schedule;finish_task_switch 9508621
mysqld;[unknown];syscall;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_io_getevents;do_io_getevents;read_events;schedule;__schedule;finish_task_switch 9508646
[root@localhost ~]# 

6)yum remove glibc-devel
输入图片说明
没有看到kernel-header的卸载信息。
备注:
openeuler里面glibc-devel在卸载前,查询kernel信息

[root@localhost ~]# rpm -qa|grep kernel
kernel-devel-4.19.90-2204.4.0.0146.oe1.x86_64
kernel-tools-4.19.90-2106.3.0.0095.oe1.x86_64
kernel-4.19.90-2106.3.0.0095.oe1.x86_64

glibc-devel在卸载后,查询kernel信息:

[root@localhost ~]# rpm -qa|grep kernel
kernel-tools-4.19.90-2106.3.0.0095.oe1.x86_64
kernel-4.19.90-2106.3.0.0095.oe1.x86_64
[root@localhost ~]# 

7)再去安装重新安装yum install glibc-devel,yum install bcc-tools
再执行offcputime工具:

[root@localhost ~]# /usr/share/bcc/tools/offcputime -df -p `pgrep -nx mysqld` 10 > out.stacks
modprobe: FATAL: Module kheaders not found in directory /lib/modules/4.19.90-2106.3.0.0095.oe1.x86_64
chdir(/lib/modules/4.19.90-2106.3.0.0095.oe1.x86_64/build): No such file or directory
Traceback (most recent call last):
  File "/usr/share/bcc/tools/offcputime", line 233, in <module>
    b = BPF(text=bpf_text)
  File "/usr/lib/python3.7/site-packages/bpfcc/__init__.py", line 358, in __init__
    raise Exception("Failed to compile BPF module %s" % (src_file or "<text>"))
Exception: Failed to compile BPF module <text>
[root@localhost ~]# 

报错了。

得主动去建一个软链接才行:

cd /lib/modules/4.19.90-2106.3.0.0095.oe1.x86_64/
ln -s /usr/src/kernels/4.19.90-2204.4.0.0146.oe1.x86_64 build

[root@localhost ~]# /usr/share/bcc/tools/offcputime -df -p `pgrep -nx mysqld` 10 > out1.stacks
[root@localhost ~]# cat out1.stacks 
mysqld;pthread_cond_timedwait;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_futex;do_futex;futex_wait;futex_wait_queue_me;schedule;__schedule;finish_task_switch 5001122
mysqld;pthread_cond_timedwait;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_futex;do_futex;futex_wait;futex_wait_queue_me;schedule;__schedule;finish_task_switch 5001160
mysqld;__nanosleep;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_nanosleep;hrtimer_nanosleep;do_nanosleep;schedule;__schedule;finish_task_switch 9007138
mysqld;pthread_cond_timedwait;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_futex;do_futex;futex_wait;futex_wait_queue_me;schedule;__schedule;finish_task_switch 9007161
mysqld;__nanosleep;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_nanosleep;hrtimer_nanosleep;do_nanosleep;schedule;__schedule;finish_task_switch 9007189
mysqld;pthread_cond_timedwait;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_futex;do_futex;futex_wait;futex_wait_queue_me;schedule;__schedule;finish_task_switch 9007219
mysqld;pthread_cond_timedwait;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_futex;do_futex;futex_wait;futex_wait_queue_me;schedule;__schedule;finish_task_switch 9007255
mysqld;syscall;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_io_getevents;do_io_getevents;read_events;schedule;__schedule;finish_task_switch 9516808
mysqld;[unknown];syscall;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_io_getevents;do_io_getevents;read_events;schedule;__schedule;finish_task_switch 9517077
mysqld;[unknown];syscall;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_io_getevents;do_io_getevents;read_events;schedule;__schedule;finish_task_switch 9517136
mysqld;syscall;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_io_getevents;do_io_getevents;read_events;schedule;__schedule;finish_task_switch 9517138
mysqld;syscall;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_io_getevents;do_io_getevents;read_events;schedule;__schedule;finish_task_switch 9517163
mysqld;syscall;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_io_getevents;do_io_getevents;read_events;schedule;__schedule;finish_task_switch 9517178
mysqld;[unknown];syscall;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_io_getevents;do_io_getevents;read_events;schedule;__schedule;finish_task_switch 9517196
mysqld;[unknown];syscall;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_io_getevents;do_io_getevents;read_events;schedule;__schedule;finish_task_switch 9517202
mysqld;syscall;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_io_getevents;do_io_getevents;read_events;schedule;__schedule;finish_task_switch 9517205
mysqld;syscall;-;entry_SYSCALL_64_after_hwframe;do_syscall_64;__x64_sys_io_getevents;do_io_getevents;read_events;schedule;__schedule;finish_task_switch 9517225
[root@localhost ~]# 

评论 (2)

谢京 创建了缺陷 2年前
openeuler-ci-bot 添加了
 
sig/sig-ebpf
标签
2年前
谢京 修改了描述 2年前
谢京 修改了描述 2年前
谢京 修改了描述 2年前

bcc-tools这块是否需要做判断

谢京 修改了描述 2年前

登录 后才可以发表评论

状态
负责人
项目
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
预计工期 (小时)
参与者(2)
5329419 openeuler ci bot 1632792936 10413738 xie jing 2022 1663580560
1
https://gitee.com/src-openeuler/bcc.git
git@gitee.com:src-openeuler/bcc.git
src-openeuler
bcc
bcc

搜索帮助