本意是想安装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 ~]#
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
登录 后才可以发表评论
FileDragTip