中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

局域網(wǎng)內(nèi)做網(wǎng)站優(yōu)化seo廠家

局域網(wǎng)內(nèi)做網(wǎng)站,優(yōu)化seo廠家,天津網(wǎng)站搜索優(yōu)化,分銷裂變系統(tǒng)開發(fā)目錄 官方鏈接 編譯安裝 ubuntu版本 安裝 examples tools hello_world.py demo 運(yùn)行報(bào)錯(cuò) 網(wǎng)上目前的解決辦法 錯(cuò)誤分析過程 python版本檢測 libbcc庫檢查 python3 bcc庫檢查 正常輸出 監(jiān)控進(jìn)程切換 運(yùn)行輸出 監(jiān)控CPU直方圖 緩存命中率監(jiān)控:caches…

目錄

官方鏈接

編譯安裝

ubuntu版本

安裝

examples

tools

hello_world.py demo

運(yùn)行報(bào)錯(cuò)

網(wǎng)上目前的解決辦法

錯(cuò)誤分析過程

python版本檢測

libbcc庫檢查

python3 bcc庫檢查

正常輸出

監(jiān)控進(jìn)程切換

運(yùn)行輸出

監(jiān)控CPU直方圖

緩存命中率監(jiān)控:cachestat

cachetop

BCC開發(fā)指南


官方鏈接

主頁:https://github.com/iovisor/bcc

bcc開發(fā):https://github.com/iovisor/bcc/blob/master/docs/tutorial_bcc_python_developer.md

編譯安裝

ubuntu版本

wj@wj:~$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 22.04.2 LTS
Release:	22.04
Codename:	jammy

安裝

git clone https://github.com/iovisor/bcc.git
mkdir bcc/build; cd bcc/build
cmake ..
make
sudo make install
cmake -DPYTHON_CMD=python3 .. # build python3 binding
pushd src/python/
make
sudo make install
popd安裝路徑:
/usr/share/bcc/tools

可以看到?/usr/share/bcc 目錄下,有4個(gè)文件夾,examples ?introspection ?man ?tools 。

在examples 文件下,有一些簡單的demo。tools文件下有 bcc的各種工具。

examples

?

tools

hello_world.py demo

#!/usr/bin/python
# Copyright (c) PLUMgrid, Inc.
# Licensed under the Apache License, Version 2.0 (the "License")# run in project examples directory with:
# sudo ./hello_world.py"
# see trace_fields.py for a longer examplefrom bcc import BPF# This may not work for 4.17 on x64, you need replace kprobe__sys_clone with kprobe____x64_sys_clone
BPF(text='int kprobe__sys_clone(void *ctx) { bpf_trace_printk("Hello, World!\\n"); return 0; }').trace_print()

上述 hello_world.py程序中會(huì)監(jiān)測?kprobe__sys_clone 事件,一旦內(nèi)核監(jiān)測到?kprobe__sys_clone 事件產(chǎn)生,就會(huì)打印?Hello, World! 出來。

運(yùn)行報(bào)錯(cuò)

wj@wj:/usr/share/bcc/examples$ sudo python3 hello_world.py 
Traceback (most recent call last):File "/usr/share/bcc/examples/hello_world.py", line 9, in <module>from bcc import BPFFile "/usr/lib/python3/dist-packages/bcc/__init__.py", line 27, in <module>from .libbcc import lib, bcc_symbol, bcc_symbol_option, bcc_stacktrace_build_id, _SYM_CB_TYPEFile "/usr/lib/python3/dist-packages/bcc/libbcc.py", line 20, in <module>lib.bpf_module_create_b.restype = ct.c_void_pFile "/usr/lib/python3.10/ctypes/__init__.py", line 387, in __getattr__func = self.__getitem__(name)File "/usr/lib/python3.10/ctypes/__init__.py", line 392, in __getitem__func = self._FuncPtr((name_or_ordinal, self))
AttributeError: /lib/x86_64-linux-gnu/libbcc.so.0: undefined symbol: bpf_module_create_b

網(wǎng)上目前的解決辦法

主要還是python版本問題,將python2切換為python3。而我這邊顯然不是這個(gè)問題,因?yàn)槲业臋C(jī)子上只有python3

錯(cuò)誤分析過程

根據(jù)報(bào)錯(cuò)信息,和報(bào)錯(cuò)相關(guān)的路徑:

/lib/x86_64-linux-gnu/libbcc.so.0 :bcc庫采用的libbcc.so.0

/usr/lib/python3/dist-packages/bcc :報(bào)錯(cuò)的bcc庫

python版本檢測

使用的均為python3,沒有python2,所以不存在版本問題。

libbcc庫檢查

wj@wj:/usr/share/bcc/examples$ ls -lh /lib/x86_64-linux-gnu/ |grep libbcc
-rw-r--r--  1 root root  5.0M 11月  5 14:48 libbcc.a
-rw-r--r--  1 root root  1.5M 11月  5 14:46 libbcc_bpf.a
lrwxrwxrwx  1 root root    15  1月 19  2021 libbcc_bpf.so -> libbcc_bpf.so.0
lrwxrwxrwx  1 root root    20 11月  5 14:54 libbcc_bpf.so.0 -> libbcc_bpf.so.0.28.0
-rw-r--r--  1 root root   51K  1月 19  2021 libbcc_bpf.so.0.18.0
-rw-r--r--  1 root root  2.8M 11月  5 14:48 libbcc_bpf.so.0.28.0
-rw-r--r--  1 root root  243K 11月  5 14:47 libbcc-loader-static.a
lrwxrwxrwx  1 root root    11  1月 19  2021 libbcc.so -> libbcc.so.0
lrwxrwxrwx  1 root root    16 11月  5 14:54 libbcc.so.0 -> libbcc.so.0.28.0
-rw-r--r--  1 root root  3.3M  1月 19  2021 libbcc.so.0.18.0
-rw-r--r--  1 root root  105M 11月  5 14:47 libbcc.so.0.28.0

可以看到libbcc庫的實(shí)際指向?yàn)?#xff1a;?libbcc.so.0 -> libbcc.so.0.28.0

根據(jù)報(bào)錯(cuò)內(nèi)容,python庫需要bpf_module_create_b,而libbcc.so.0.28.0中沒有

可以通過以下命令查看:

wj@wj:/usr/share/bcc/examples$ strings /lib/x86_64-linux-gnu/libbcc.so.0.28.0 |grep bpf_module_create_
bpf_module_create_c
bpf_module_create_c_from_string
bpf_module_create_c.cold
bpf_module_create_c_from_string.cold
bpf_module_create_c
bpf_module_create_c_from_string

此時(shí)注意到上一個(gè)步驟中的libbcc.so.0.18.0,同樣進(jìn)行bpf_module_create_b檢查

wj@wj:/usr/share/bcc/examples$ strings /lib/x86_64-linux-gnu/libbcc.so.0.18.0 |grep bpf_module_create_
bpf_module_create_b
bpf_module_create_c
bpf_module_create_c_from_string

發(fā)現(xiàn)存在bpf_module_create_b,即便不進(jìn)行時(shí)間對比,通過版本號(hào)0.18.0與0.28.0也知道,
python3的bcc庫竟然請求的是老版(0.18.0)的bcc lib庫

python3 bcc庫檢查

wj@wj:/usr/share/bcc/examples$ ll  /usr/lib/python3/dist-packages/bcc/
總計(jì) 212
drwxr-xr-x   3 root root  4096 10月  4 15:36 ./
drwxr-xr-x 155 root root 12288 11月  5 14:56 ../
-rw-r--r--   1 root root  2566  1月 19  2021 containers.py
-rw-r--r--   1 root root 20914  1月 19  2021 disassembler.py
-rw-r--r--   1 root root 58581  1月 19  2021 __init__.py
-rw-r--r--   1 root root 12951  1月 19  2021 libbcc.py
-rw-r--r--   1 root root  4693  1月 19  2021 perf.py
drwxr-xr-x   2 root root  4096 10月  4 15:36 __pycache__/
-rw-r--r--   1 root root  9656  1月 19  2021 syscall.py
-rw-r--r--   1 root root 40588  1月 19  2021 table.py
-rw-r--r--   1 root root  1604  1月 19  2021 tcp.py
-rw-r--r--   1 root root  9102  1月 19  2021 usdt.py
-rw-r--r--   1 root root  4904  1月 19  2021 utils.py
-rw-r--r--   1 root root    23  1月 19  2021 version.py

根據(jù)文件時(shí)間可以確定,確實(shí)都是21年的老庫,遂進(jìn)行替換,先查找bcc源碼中的bcc python庫:

wj@wj:/usr/share/bcc/examples$ find / -name libbcc.py -ls 2>/dev/null408370     16 -rw-rw-r--   1 wj       wj          14561 11月  5 14:44 /home/wj/bcc/build/src/python/bcc-python3/bcc/libbcc.py408643     16 -rw-r--r--   1 root     root        14561 11月  5 14:44 /home/wj/bcc/build/src/python/bcc-python3/build/lib/bcc/libbcc.py407310     16 -rw-rw-r--   1 wj       wj          14561 11月  5 14:43 /home/wj/bcc/src/python/bcc/libbcc.py4496431     16 -rw-r--r--   1 root     root        12951 1月 19  2021 /usr/lib/python3/dist-packages/bcc/libbcc.py

wj@wj:/usr/share/bcc/examples$ cp -r /home/wj/bcc/build/src/python/bcc-python3/bcc/* /usr/lib/python3/dist-packages/bcc/
cp: 無法創(chuàng)建普通文件 '/usr/lib/python3/dist-packages/bcc/containers.py': 權(quán)限不夠
cp: 無法創(chuàng)建普通文件 '/usr/lib/python3/dist-packages/bcc/disassembler.py': 權(quán)限不夠
cp: 無法創(chuàng)建普通文件 '/usr/lib/python3/dist-packages/bcc/__init__.py': 權(quán)限不夠
cp: 無法創(chuàng)建普通文件 '/usr/lib/python3/dist-packages/bcc/libbcc.py': 權(quán)限不夠
cp: 無法創(chuàng)建普通文件 '/usr/lib/python3/dist-packages/bcc/perf.py': 權(quán)限不夠
cp: 無法創(chuàng)建普通文件 '/usr/lib/python3/dist-packages/bcc/syscall.py': 權(quán)限不夠
cp: 無法創(chuàng)建普通文件 '/usr/lib/python3/dist-packages/bcc/table.py': 權(quán)限不夠
cp: 無法創(chuàng)建普通文件 '/usr/lib/python3/dist-packages/bcc/tcp.py': 權(quán)限不夠
cp: 無法創(chuàng)建普通文件 '/usr/lib/python3/dist-packages/bcc/usdt.py': 權(quán)限不夠
cp: 無法創(chuàng)建普通文件 '/usr/lib/python3/dist-packages/bcc/utils.py': 權(quán)限不夠
cp: 無法創(chuàng)建普通文件 '/usr/lib/python3/dist-packages/bcc/version.py': 權(quán)限不夠
sudo cp -r /home/wj/bcc/build/src/python/bcc-python3/bcc/* /usr/lib/python3/dist-packages/bcc/

參考:AttributeError: /lib/x86_64-linux-gnu/libbcc.so.0: undefined symbol: bpf_module_create_b-CSDN博客

正常輸出

可以看到 內(nèi)核捕獲到了?kprobe__sys_clone 事件,并打印出?Hello, World! 出來。

監(jiān)控進(jìn)程切換

//task_switch.py


#!/usr/bin/python
# Copyright (c) PLUMgrid, Inc.
# Licensed under the Apache License, Version 2.0 (the "License")from bcc import BPF
from time import sleepb = BPF(src_file="task_switch.c")
b.attach_kprobe(event_re="^finish_task_switch$|^finish_task_switch\.isra\.\d$",fn_name="count_sched")# generate many schedule events
for i in range(0, 100): sleep(0.01)for k, v in b["stats"].items():print("task_switch[%5d->%5d]=%u" % (k.prev_pid, k.curr_pid, v.value))

k.prev_pid :表示上一個(gè)進(jìn)程的 pid

k.curr_pid :表示切換到當(dāng)前進(jìn)程 pid

task_switch.c

#include <uapi/linux/ptrace.h>
#include <linux/sched.h>struct key_t {u32 prev_pid;u32 curr_pid;
};BPF_HASH(stats, struct key_t, u64, 1024);
int count_sched(struct pt_regs *ctx, struct task_struct *prev) {struct key_t key = {};u64 zero = 0, *val;key.curr_pid = bpf_get_current_pid_tgid();key.prev_pid = prev->pid;// could also use `stats.increment(key);`val = stats.lookup_or_try_init(&key, &zero);if (val) {(*val)++;}return 0;
}

運(yùn)行輸出

wj@wj:/usr/share/bcc/examples/tracing$ sudo python3 task_switch.py 
[sudo] wj 的密碼: 
task_switch[  879->    0]=1
task_switch[    0->14938]=2
task_switch[14959->    0]=1
task_switch[    0->14964]=2
task_switch[    0->   71]=2
task_switch[    0->15021]=1
task_switch[14969->14939]=1
task_switch[11713->    0]=1
task_switch[   52->    0]=1
task_switch[    0->  809]=4
task_switch[ 2402->    0]=6
task_switch[  928->    0]=1
task_switch[ 5247->    0]=3
task_switch[    0->  437]=3
task_switch[    0-> 7458]=6
task_switch[    0->14986]=1
task_switch[11411->    0]=3
task_switch[ 2674->    0]=5
task_switch[15064->    0]=1
task_switch[ 8767->    0]=48
task_switch[14939->14969]=1
task_switch[14998->    0]=1
task_switch[    0->14921]=2
task_switch[14986->14959]=2
task_switch[    0->15194]=1
task_switch[    0->   16]=1
task_switch[    0->   15]=14
task_switch[  901->15194]=1
task_switch[   22->    0]=1
task_switch[ 1816->    0]=7
task_switch[    0->   40]=1
task_switch[14959->14986]=1
task_switch[    0->  901]=1
task_switch[14577->    0]=1
task_switch[    0-> 5247]=3
task_switch[   58->    0]=1
task_switch[14938->    0]=2
task_switch[    0->11411]=3
task_switch[   34->    0]=1
task_switch[15194->    0]=2
task_switch[    0->   58]=1
task_switch[    0->   28]=1
task_switch[ 7458->    0]=7
task_switch[    0->15010]=3
task_switch[  926->    0]=1
task_switch[14921->    0]=2
task_switch[   46->    0]=1
task_switch[14964->    0]=3
task_switch[15030->    0]=3
task_switch[   15->    0]=14
task_switch[   40->    0]=1
task_switch[    0->14374]=5
task_switch[    0->15064]=1
task_switch[15129->    0]=1
task_switch[    0-> 8767]=47
task_switch[    0->15129]=1
task_switch[  809->    0]=3
task_switch[14374->    0]=5
task_switch[    0-> 2674]=5
task_switch[    0->   34]=1
task_switch[    0->  926]=1
task_switch[    0->15211]=100
task_switch[14969->    0]=1
task_switch[    0->14969]=1
task_switch[    0->11713]=1
task_switch[  437->    0]=3
task_switch[  835->    0]=11
task_switch[ 2035->    0]=11
task_switch[ 8767->   29]=10
task_switch[    0->14577]=1
task_switch[    0-> 1816]=7
task_switch[    0->14998]=1
task_switch[    0->  928]=1
task_switch[15010->    0]=3
task_switch[    0-> 2402]=6
task_switch[    0->14981]=1
task_switch[    0-> 2142]=1
task_switch[  953->    0]=1
task_switch[   29-> 8767]=10
task_switch[  835-> 8767]=1
task_switch[    0->  835]=12
task_switch[   28->    0]=1
task_switch[    0->  953]=1
task_switch[    0-> 2035]=11
task_switch[14981->14964]=1
task_switch[  809-> 7458]=1
task_switch[ 1702->    0]=1
task_switch[    0->   52]=1
task_switch[   16->    0]=1
task_switch[    0->  879]=1
task_switch[    0->15030]=3
task_switch[15211->    0]=100
task_switch[    0->   22]=1
task_switch[   71->    0]=2
task_switch[15021->    0]=1
task_switch[    0->   46]=1
task_switch[ 2142->    0]=1

監(jiān)控CPU直方圖

tools/cpudist: Summarize on- and off-CPU time per task as a histogram.

tools/cpudist:將每個(gè)任務(wù)的 CPU 開啟和關(guān)閉時(shí)間總結(jié)為直方圖。

wj@wj:/usr/share/bcc/tools$ sudo python3 ./cpudist
Tracing on-CPU time... Hit Ctrl-C to end.
^Cusecs               : count     distribution0 -> 1          : 5        |*                                       |2 -> 3          : 38       |********                                |4 -> 7          : 106      |***********************                 |8 -> 15         : 134      |******************************          |16 -> 31         : 156      |***********************************     |32 -> 63         : 177      |****************************************|64 -> 127        : 142      |********************************        |128 -> 255        : 63       |**************                          |256 -> 511        : 79       |*****************                       |512 -> 1023       : 21       |****                                    |1024 -> 2047       : 7        |*                                       |2048 -> 4095       : 1        |                                        |4096 -> 8191       : 1        |                                        |
wj@wj:/usr/share/bcc/tools$ 

緩存命中率監(jiān)控:cachestat

  • tools/cachestat: Trace page cache hit/miss ratio.?Examples.

sudo python3 ./cachestat

cachetop

sudo python3 ./cachetop

以上都是自定義在?examples 和?tools 中的工具。如果需要自己開發(fā) bcc 程序,那應(yīng)該怎么樣使用呢?可以參考如下鏈接。

BCC開發(fā)指南

https://github.com/iovisor/bcc/blob/master/docs/tutorial_bcc_python_developer.md

http://www.risenshineclean.com/news/37535.html

相關(guān)文章:

  • 濰坊制作網(wǎng)站的公司搜索引擎調(diào)詞軟件
  • 中企動(dòng)力做網(wǎng)站怎么樣國家高新技術(shù)企業(yè)查詢
  • 高唐建筑公司網(wǎng)站seo關(guān)鍵詞優(yōu)化要多少錢
  • 紹興做網(wǎng)站哪家好在線營銷推廣
  • 風(fēng)機(jī)網(wǎng)站怎么做南寧seo推廣服務(wù)
  • 企業(yè)門戶網(wǎng)站開發(fā)平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)櫻桃電視劇西瓜視頻在線觀看
  • django做的網(wǎng)站源碼百度網(wǎng)站怎么優(yōu)化排名
  • 網(wǎng)站建設(shè) 順德河南網(wǎng)站建設(shè)公司哪家好
  • 眉山政府網(wǎng)站建設(shè)seo網(wǎng)站推廣優(yōu)化
  • 如何查詢網(wǎng)站的建站工具seo門戶網(wǎng)站
  • 溫州網(wǎng)站建設(shè)成功案例山西seo基礎(chǔ)教程
  • 學(xué)院網(wǎng)站的作用中國疫情最新數(shù)據(jù)
  • 觸屏版網(wǎng)站開發(fā)樣式互聯(lián)網(wǎng)推廣與營銷
  • 沒有網(wǎng)站可以做淘寶客嗎搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)
  • 做招商類型的網(wǎng)站怎么制作網(wǎng)站二維碼
  • 江西省住房和城鄉(xiāng)建設(shè)部網(wǎng)站市場營銷推廣方案
  • 中國做國外的網(wǎng)站廣東疫情最新消息今天又封了
  • 做網(wǎng)站主流軟件是php嗎什么是淘寶seo
  • 公司做網(wǎng)站推廣的價(jià)格鄭州網(wǎng)絡(luò)推廣方案
  • 怎樣登陸wordpress短視頻seo詢盤獲客系統(tǒng)軟件
  • 遵義做網(wǎng)站哪個(gè)公司最好百度推廣優(yōu)化怎么做的
  • 網(wǎng)站建設(shè)內(nèi)容錄入論文百度如何收錄網(wǎng)站
  • b站破解2023免費(fèi)版下載抖音企業(yè)推廣
  • 做電商網(wǎng)站價(jià)錢16種營銷模型
  • 怎樣做淘寶網(wǎng)站建設(shè)電商網(wǎng)站平臺(tái)搭建
  • 做網(wǎng)站 當(dāng)站長紹興seo排名外包
  • 給政府做網(wǎng)站怎么報(bào)價(jià)深圳網(wǎng)站建設(shè)服務(wù)
  • 青島網(wǎng)站站長之家權(quán)重查詢
  • 網(wǎng)站會(huì)員功能長春seo排名
  • 用vue框架做的網(wǎng)站網(wǎng)站建設(shè)網(wǎng)站