BCC - ເຄື່ອງມືຄົ້ນຫາແບບເຄື່ອນໄຫວ ສຳ ລັບການກວດສອບການເຮັດວຽກຂອງ Linux, ການສ້າງເຄືອຂ່າຍແລະອື່ນໆ


BCC (BPF Compiler Collection) ແມ່ນຊຸດທີ່ມີປະສິດທິພາບຂອງເຄື່ອງມືແລະເອກະສານທີ່ເປັນຕົວຢ່າງທີ່ ເໝາະ ສົມ ສຳ ລັບການສ້າງໂປແກຼມຊອກຫາແລະການ ໝູນ ໃຊ້ແກ່ນທີ່ມີປະໂຫຍດ. ມັນ ນຳ ໃຊ້ BPF ທີ່ຂະຫຍາຍ (Berkeley Packet Filters), ທີ່ຮູ້ກັນໃນເບື້ອງຕົ້ນວ່າ eBPF ເຊິ່ງແມ່ນ ໜຶ່ງ ໃນຄຸນລັກສະນະ ໃໝ່ ໃນ Linux 3.15.

ການປະຕິບັດ, ສ່ວນປະກອບສ່ວນໃຫຍ່ທີ່ໃຊ້ໂດຍ BCC ຕ້ອງໃຊ້ Linux 4.1 ຂຶ້ນໄປ, ແລະຄຸນລັກສະນະທີ່ ໜ້າ ສັງເກດລວມມີ:

<

  • ບໍ່ ຈຳ ເປັນຕ້ອງມີໂມດູນຂອງແກ່ນພັນທີ 3, ເພາະວ່າທຸກໆເຄື່ອງມືເຮັດວຽກໂດຍອີງໃສ່ BPF ທີ່ຖືກສ້າງຂຶ້ນໃນແກ່ນແລະ BCC ໃຊ້ຄຸນສົມບັດທີ່ເພີ່ມເຂົ້າໃນຊຸດ Linux 4.x.
  • ຊ່ວຍໃຫ້ການສັງເກດການປະຕິບັດຊອບແວ.
  • ປະກອບດ້ວຍເຄື່ອງມືວິເຄາະການປະຕິບັດຫຼາຍຢ່າງພ້ອມດ້ວຍເອກະສານຕົວຢ່າງແລະ ໜ້າ ຜູ້ຊາຍ.
  • ເໝາະ ສົມທີ່ສຸດ ສຳ ລັບຜູ້ ນຳ ໃຊ້ Linux ຂັ້ນສູງ, BCC ເຮັດໃຫ້ມັນງ່າຍຕໍ່ການຂຽນໂປແກຼມ BPF ໂດຍ ນຳ ໃຊ້ເຄື່ອງມື ສຳ ລັບເມັດ C, ແລະດ້ານ ໜ້າ ໃນ Python ແລະ lua. ນອກຈາກນັ້ນ, ມັນສະ ໜັບ ສະ ໜູນ ວຽກຫຼາຍຢ່າງເຊັ່ນ: ການວິເຄາະການປະຕິບັດ, ການຕິດຕາມກວດກາ, ການຄວບຄຸມການຈະລາຈອນທາງເຄືອຂ່າຍບວກກັບອີກຫລາຍຢ່າງ.

    ວິທີການຕິດຕັ້ງ BCC ໃນ Linux Systems

    ຈື່ໄວ້ວ່າ BCC ໃຊ້ຄຸນລັກສະນະຕ່າງໆທີ່ເພີ່ມເຂົ້າໃນ Linux kernel version 4.1 ຫຼືສູງກວ່າ, ແລະຕາມຄວາມຕ້ອງການ, ແກ່ນຄວນໄດ້ຖືກລວບລວມກັບທຸງທີ່ໄດ້ ກຳ ນົດໄວ້ຂ້າງລຸ່ມນີ້:

    CONFIG_BPF=y
    CONFIG_BPF_SYSCALL=y
    # [optional, for tc filters]
    CONFIG_NET_CLS_BPF=m
    # [optional, for tc actions]
    CONFIG_NET_ACT_BPF=m
    CONFIG_BPF_JIT=y
    CONFIG_HAVE_BPF_JIT=y
    # [optional, for kprobes]
    CONFIG_BPF_EVENTS=y
    

    ເພື່ອກວດສອບທຸງແກ່ນຂອງທ່ານ, ເບິ່ງເອກະສານ /proc/config.gz ຫຼືເອີ້ນໃຊ້ ຄຳ ສັ່ງດັ່ງໃນຕົວຢ່າງຂ້າງລຸ່ມນີ້:

    [email  ~ $ grep CONFIG_BPF= /boot/config-`uname -r`
    CONFIG_BPF=y
    [email  ~ $ grep CONFIG_BPF_SYSCALL= /boot/config-`uname -r`
    CONFIG_BPF_SYSCALL=y
    [email  ~ $ grep CONFIG_NET_CLS_BPF= /boot/config-`uname -r`
    CONFIG_NET_CLS_BPF=m
    [email  ~ $ grep CONFIG_NET_ACT_BPF= /boot/config-`uname -r`
    CONFIG_NET_ACT_BPF=m
    [email  ~ $ grep CONFIG_BPF_JIT= /boot/config-`uname -r`
    CONFIG_BPF_JIT=y
    [email  ~ $ grep CONFIG_HAVE_BPF_JIT= /boot/config-`uname -r`
    CONFIG_HAVE_BPF_JIT=y
    [email  ~ $ grep CONFIG_BPF_EVENTS= /boot/config-`uname -r`
    CONFIG_BPF_EVENTS=y
    

    ຫຼັງຈາກກວດສອບທຸງແກ່ນ, ມັນເຖິງເວລາແລ້ວທີ່ຈະຕິດຕັ້ງເຄື່ອງມື BCC ໃນລະບົບ Linux.

    ມີພຽງແຕ່ການຫຸ້ມຫໍ່ກາງຄືນເທົ່ານັ້ນທີ່ຖືກສ້າງຂື້ນ ສຳ ລັບ Ubuntu 16.04, ແຕ່ ຄຳ ແນະ ນຳ ໃນການຕິດຕັ້ງແມ່ນກົງໄປກົງມາ. ບໍ່ ຈຳ ເປັນຕ້ອງມີການຍົກລະດັບແກ່ນແທ້ຫລືລວບລວມມັນຈາກແຫຼ່ງຂໍ້ມູນ.

    $ echo "deb [trusted=yes] https://repo.iovisor.org/apt/xenial xenial-nightly main" | sudo tee /etc/apt/sources.list.d/iovisor.list
    $ sudo apt-get update
    $ sudo apt-get install bcc-tools
    

    ເລີ່ມຕົ້ນໂດຍການຕິດຕັ້ງ Linux kernel ທີ່ມີຂະ ໜາດ 4.3+, ຈາກ http://kernel.ubuntu.com/~kernel-ppa/mainline.

    ຍົກຕົວຢ່າງ, ຂຽນສະຄິບແກະນ້ອຍ“ bcc-install.sh” ດ້ວຍເນື້ອຫາຂ້າງລຸ່ມ.

    ໝາຍ ເຫດ: ປັບປຸງຄຸນຄ່າ PREFIX ໃຫ້ກັບວັນທີລ້າສຸດ, ແລະຍັງສາມາດຄົ້ນຫາເອກະສານທີ່ຢູ່ໃນ urE PREFIX ທີ່ໃຫ້ເພື່ອໃຫ້ໄດ້ມູນຄ່າ REL ຕົວຈິງ, ປ່ຽນແທນພວກມັນໃນ script shell.

    #!/bin/bash
    VER=4.5.1-040501
    PREFIX=http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.5.1-wily/
    REL=201604121331
    wget ${PREFIX}/linux-headers-${VER}-generic_${VER}.${REL}_amd64.deb
    wget ${PREFIX}/linux-headers-${VER}_${VER}.${REL}_all.deb
    wget ${PREFIX}/linux-image-${VER}-generic_${VER}.${REL}_amd64.deb
    sudo dpkg -i linux-*${VER}.${REL}*.deb
    

    ບັນທຶກເອກະສານແລະອອກ. ເຮັດໃຫ້ມັນສາມາດປະຕິບັດໄດ້, ຫຼັງຈາກນັ້ນດໍາເນີນການດັ່ງທີ່ສະແດງ:

    $ chmod +x bcc-install.sh
    $ sh bcc-install.sh
    

    ຫລັງຈາກນັ້ນ, ເປີດລະບົບຂອງທ່ານຄືນ ໃໝ່.

    $ reboot
    

    ຕໍ່ໄປ, ດຳ ເນີນ ຄຳ ສັ່ງຂ້າງລຸ່ມເພື່ອຕິດຕັ້ງແພັກເກດ BCC ທີ່ເຊັນ:

    $ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys D4284CDD
    $ echo "deb https://repo.iovisor.org/apt trusty main" | sudo tee /etc/apt/sources.list.d/iovisor.list
    $ sudo apt-get update
    $ sudo apt-get install binutils bcc bcc-tools libbcc-examples python-bcc
    

    ຕິດຕັ້ງລະບົບເຄນ 4.2+ ຈາກ http://alt.fedoraproject.org/pub/alt/rawhide-kernel-nodebug, ຖ້າລະບົບຂອງທ່ານມີລຸ້ນຕ່ ຳ ກວ່າສິ່ງທີ່ຕ້ອງການ. ຂ້າງລຸ່ມນີ້ແມ່ນຕົວຢ່າງຂອງວິທີເຮັດແນວນັ້ນ:

    $ sudo dnf config-manager --add-repo=http://alt.fedoraproject.org/pub/alt/rawhide-kernel-nodebug/fedora-rawhide-kernel-nodebug.repo
    $ sudo dnf update
    $ reboot
    

    ຫຼັງຈາກນັ້ນ, ເພີ່ມບ່ອນເກັບຂໍ້ມູນເຄື່ອງມືຂອງ BBC, ປັບປຸງລະບົບຂອງທ່ານແລະຕິດຕັ້ງເຄື່ອງມືຕ່າງໆໂດຍການປະຕິບັດ ຄຳ ສັ່ງຊຸດຕໍ່ໄປ:

    $ echo -e '[iovisor]\nbaseurl=https://repo.iovisor.org/yum/nightly/f23/$basearch\nenabled=1\ngpgcheck=0' | sudo tee /etc/yum.repos.d/iovisor.repo
    $ sudo dnf update
    $ sudo dnf install bcc-tools
    

    ທ່ານຄວນເລີ່ມຕົ້ນໂດຍການຍົກລະດັບເມັດຂອງທ່ານໃຫ້ເປັນລຸ້ນຢ່າງ ໜ້ອຍ 4.3.1-1, ຕໍ່ມາຕິດຕັ້ງແພກເກດຢູ່ລຸ່ມນີ້ໂດຍໃຊ້ຜູ້ຈັດການແພັກເກດ Arch ເຊັ່ນ: pacaur, yaourt, cower, ແລະອື່ນໆ.

    bcc bcc-tools python-bcc python2-bcc
    

    ວິທີການໃຊ້ເຄື່ອງມື BCC ໃນ Linux Systems

    ເຄື່ອງມື BCC ທັງ ໝົດ ຖືກຕິດຕັ້ງຢູ່ພາຍໃຕ້ລະບົບ /usr/share/bcc/tools . ເຖິງຢ່າງໃດກໍ່ຕາມ, ທ່ານສາມາດເອີ້ນໃຊ້ພວກມັນໄດ້ຈາກບ່ອນເກັບຮັກສາ BCC Github ພາຍໃຕ້ /tools ບ່ອນທີ່ພວກມັນສິ້ນສຸດດ້ວຍການຂະຫຍາຍ .py .

    $ ls /usr/share/bcc/tools 
    
    argdist       capable     filetop         offwaketime  stackcount  vfscount
    bashreadline  cpudist     funccount       old          stacksnoop  vfsstat
    biolatency    dcsnoop     funclatency     oomkill      statsnoop   wakeuptime
    biosnoop      dcstat      gethostlatency  opensnoop    syncsnoop   xfsdist
    biotop        doc         hardirqs        pidpersec    tcpaccept   xfsslower
    bitesize      execsnoop   killsnoop       profile      tcpconnect  zfsdist
    btrfsdist     ext4dist    mdflush         runqlat      tcpconnlat  zfsslower
    btrfsslower   ext4slower  memleak         softirqs     tcpretrans
    cachestat     filelife    mysqld_qslower  solisten     tplist
    cachetop      fileslower  offcputime      sslsniff     trace
    

    ພວກເຮົາຕ້ອງກວມເອົາສອງສາມຕົວຢ່າງທີ່ຢູ່ພາຍໃຕ້ການຕິດຕາມ - ກວດກາການເຮັດວຽກແລະລະບົບເຄືອຂ່າຍ Linux ທົ່ວໄປ.

    ເລີ່ມຕົ້ນໂດຍການຕິດຕາມທັງ ໝົດ ທີ່ເປີດ() syscalls ໂດຍໃຊ້ opennoop. ນີ້ຊ່ວຍໃຫ້ພວກເຮົາສາມາດບອກພວກເຮົາໄດ້ວ່າໂປແກຼມຕ່າງໆເຮັດວຽກໄດ້ແນວໃດໂດຍການ ກຳ ນົດໄຟລ໌ຂໍ້ມູນຂອງພວກເຂົາ, ແຟ້ມເອກະສານ config ແລະອີກຫຼາຍໆຢ່າງ:

    $ cd /usr/share/bcc/tools 
    $ sudo ./opensnoop
    
    PID    COMM               FD ERR PATH
    1      systemd            35   0 /proc/self/mountinfo
    2797   udisksd            13   0 /proc/self/mountinfo
    1      systemd            35   0 /sys/devices/pci0000:00/0000:00:0d.0/ata3/host2/target2:0:0/2:0:0:0/block/sda/sda1/uevent
    1      systemd            35   0 /run/udev/data/b8:1
    1      systemd            -1   2 /etc/systemd/system/sys-kernel-debug-tracing.mount
    1      systemd            -1   2 /run/systemd/system/sys-kernel-debug-tracing.mount
    1      systemd            -1   2 /run/systemd/generator/sys-kernel-debug-tracing.mount
    1      systemd            -1   2 /usr/local/lib/systemd/system/sys-kernel-debug-tracing.mount
    2247   systemd            15   0 /proc/self/mountinfo
    1      systemd            -1   2 /lib/systemd/system/sys-kernel-debug-tracing.mount
    1      systemd            -1   2 /usr/lib/systemd/system/sys-kernel-debug-tracing.mount
    1      systemd            -1   2 /run/systemd/generator.late/sys-kernel-debug-tracing.mount
    1      systemd            -1   2 /etc/systemd/system/sys-kernel-debug-tracing.mount.wants
    1      systemd            -1   2 /etc/systemd/system/sys-kernel-debug-tracing.mount.requires
    1      systemd            -1   2 /run/systemd/system/sys-kernel-debug-tracing.mount.wants
    1      systemd            -1   2 /run/systemd/system/sys-kernel-debug-tracing.mount.requires
    1      systemd            -1   2 /run/systemd/generator/sys-kernel-debug-tracing.mount.wants
    1      systemd            -1   2 /run/systemd/generator/sys-kernel-debug-tracing.mount.requires
    1      systemd            -1   2 /usr/local/lib/systemd/system/sys-kernel-debug-tracing.mount.wants
    1      systemd            -1   2 /usr/local/lib/systemd/system/sys-kernel-debug-tracing.mount.requires
    1      systemd            -1   2 /lib/systemd/system/sys-kernel-debug-tracing.mount.wants
    1      systemd            -1   2 /lib/systemd/system/sys-kernel-debug-tracing.mount.requires
    1      systemd            -1   2 /usr/lib/systemd/system/sys-kernel-debug-tracing.mount.wants
    1      systemd            -1   2 /usr/lib/systemd/system/sys-kernel-debug-tracing.mount.requires
    1      systemd            -1   2 /run/systemd/generator.late/sys-kernel-debug-tracing.mount.wants
    1      systemd            -1   2 /run/systemd/generator.late/sys-kernel-debug-tracing.mount.requires
    1      systemd            -1   2 /etc/systemd/system/sys-kernel-debug-tracing.mount.d
    1      systemd            -1   2 /run/systemd/system/sys-kernel-debug-tracing.mount.d
    1      systemd            -1   2 /run/systemd/generator/sys-kernel-debug-tracing.mount.d
    ....
    

    ໃນຕົວຢ່າງນີ້, ມັນສະແດງໃຫ້ເຫັນການແບ່ງປັນໄລຍະເວລາຂອງການແຈກຈ່າຍ disk I/O ໂດຍໃຊ້ biolatecncy. ຫຼັງຈາກປະຕິບັດ ຄຳ ສັ່ງ, ລໍຖ້າສອງສາມນາທີແລະກົດປຸ່ມ Ctrl-C ເພື່ອຢຸດມັນແລະເບິ່ງຜົນໄດ້ຮັບ.

    $ sudo ./biolatecncy
    
    Tracing block device I/O... Hit Ctrl-C to end.
    ^C
         usecs               : count     distribution
             0 -> 1          : 0        |                                        |
             2 -> 3          : 0        |                                        |
             4 -> 7          : 0        |                                        |
             8 -> 15         : 0        |                                        |
            16 -> 31         : 0        |                                        |
            32 -> 63         : 0        |                                        |
            64 -> 127        : 0        |                                        |
           128 -> 255        : 3        |****************************************|
           256 -> 511        : 3        |****************************************|
           512 -> 1023       : 1        |*************                           |
    

    ໃນພາກນີ້, ພວກເຮົາຈະຍ້າຍໄປຕິດຕາມຂະບວນການ ໃໝ່ໆ ໃນການປະຕິບັດໂດຍໃຊ້ເຄື່ອງມື execsnoop. ໃນແຕ່ລະຄັ້ງທີ່ຂະບວນການໃດ ໜຶ່ງ ຖືກສ້ອມແປງໂດຍ fork() ແລະ exec() syscalls, ມັນຈະຖືກສະແດງຢູ່ໃນຜົນຜະລິດ. ເຖິງຢ່າງໃດກໍ່ຕາມ, ບໍ່ແມ່ນຂະບວນການທັງ ໝົດ ຖືກຈັບ.

    $ sudo ./execsnoop
    
    PCOMM            PID    PPID   RET ARGS
    gnome-screensho  14882  14881    0 /usr/bin/gnome-screenshot --gapplication-service
    systemd-hostnam  14892  1        0 /lib/systemd/systemd-hostnamed
    nautilus         14897  2767    -2 /home/tecmint/bin/net usershare info
    nautilus         14897  2767    -2 /home/tecmint/.local/bin/net usershare info
    nautilus         14897  2767    -2 /usr/local/sbin/net usershare info
    nautilus         14897  2767    -2 /usr/local/bin/net usershare info
    nautilus         14897  2767    -2 /usr/sbin/net usershare info
    nautilus         14897  2767    -2 /usr/bin/net usershare info
    nautilus         14897  2767    -2 /sbin/net usershare info
    nautilus         14897  2767    -2 /bin/net usershare info
    nautilus         14897  2767    -2 /usr/games/net usershare info
    nautilus         14897  2767    -2 /usr/local/games/net usershare info
    nautilus         14897  2767    -2 /snap/bin/net usershare info
    compiz           14899  14898   -2 /home/tecmint/bin/libreoffice --calc
    compiz           14899  14898   -2 /home/tecmint/.local/bin/libreoffice --calc
    compiz           14899  14898   -2 /usr/local/sbin/libreoffice --calc
    compiz           14899  14898   -2 /usr/local/bin/libreoffice --calc
    compiz           14899  14898   -2 /usr/sbin/libreoffice --calc
    libreoffice      14899  2252     0 /usr/bin/libreoffice --calc
    dirname          14902  14899    0 /usr/bin/dirname /usr/bin/libreoffice
    basename         14903  14899    0 /usr/bin/basename /usr/bin/libreoffice
    ...
    

    ການໃຊ້ ext4slower ເພື່ອຕິດຕາມລະບົບແຟ້ມ ext4 ທີ່ ດຳ ເນີນການ ທຳ ມະດາທີ່ຊ້າກ່ວາ 10ms, ເພື່ອຊ່ວຍໃຫ້ພວກເຮົາສາມາດ ກຳ ນົດແຜ່ນ I/O ຊ້າລົງຢ່າງເປັນອິດສະຫຼະຜ່ານລະບົບແຟ້ມເອກະສານ.

    ມັນມີພຽງແຕ່ການ ດຳ ເນີນງານທີ່ເກີນຂອບເຂດ:

    $ sudo ./execslower
    
    Tracing ext4 operations slower than 10 ms
    TIME     COMM           PID    T BYTES   OFF_KB   LAT(ms) FILENAME
    11:59:13 upstart        2252   W 48      1          10.76 dbus.log
    11:59:13 gnome-screensh 14993  R 144     0          10.96 settings.ini
    11:59:13 gnome-screensh 14993  R 28      0          16.02 gtk.css
    11:59:13 gnome-screensh 14993  R 3389    0          18.32 gtk-main.css
    11:59:25 rs:main Q:Reg  1826   W 156     60         31.85 syslog
    11:59:25 pool           15002  R 208     0          14.98 .xsession-errors
    11:59:25 pool           15002  R 644     0          12.28 .ICEauthority
    11:59:25 pool           15002  R 220     0          13.38 .bash_logout
    11:59:27 dconf-service  2599   S 0       0          22.75 user.BHDKOY
    11:59:33 compiz         2548   R 4096    0          19.03 firefox.desktop
    11:59:34 compiz         15008  R 128     0          27.52 firefox.sh
    11:59:34 firefox        15008  R 128     0          36.48 firefox
    11:59:34 zeitgeist-daem 2988   S 0       0          62.23 activity.sqlite-wal
    11:59:34 zeitgeist-fts  2996   R 8192    40         15.67 postlist.DB
    11:59:34 firefox        15008  R 140     0          18.05 dependentlibs.list
    11:59:34 zeitgeist-fts  2996   S 0       0          25.96 position.tmp
    11:59:34 firefox        15008  R 4096    0          10.67 libplc4.so
    11:59:34 zeitgeist-fts  2996   S 0       0          11.29 termlist.tmp
    ...
    

    ຕໍ່ໄປ, ໃຫ້ຂຽນເຂົ້າໃນການພິມສາຍຕໍ່ແຜ່ນ/I ໃນແຕ່ລະວິນາທີ, ໂດຍມີລາຍລະອຽດຕ່າງໆເຊັ່ນ: ID ຂອງຂະບວນການ, ຂະ ແໜງ, ໄບ, ໄລຍະເວລາອື່ນໃນການໃຊ້ biosnoop:

    $ sudo ./biosnoop
    
    TIME(s)        COMM           PID    DISK    T  SECTOR    BYTES   LAT(ms)
    0.000000000    ?              0              R  -1        8          0.26
    2.047897000    ?              0              R  -1        8          0.21
    3.280028000    kworker/u4:0   14871  sda     W  30552896  4096       0.24
    3.280271000    jbd2/sda1-8    545    sda     W  29757720  12288      0.40
    3.298318000    jbd2/sda1-8    545    sda     W  29757744  4096       0.14
    4.096084000    ?              0              R  -1        8          0.27
    6.143977000    ?              0              R  -1        8          0.27
    8.192006000    ?              0              R  -1        8          0.26
    8.303938000    kworker/u4:2   15084  sda     W  12586584  4096       0.14
    8.303965000    kworker/u4:2   15084  sda     W  25174736  4096       0.14
    10.239961000   ?              0              R  -1        8          0.26
    12.292057000   ?              0              R  -1        8          0.20
    14.335990000   ?              0              R  -1        8          0.26
    16.383798000   ?              0              R  -1        8          0.17
    ...
    

    ຫລັງຈາກນັ້ນ, ພວກເຮົາ ດຳ ເນີນການ ນຳ ໃຊ້ cachestat ເພື່ອສະແດງ ໜຶ່ງ ເສັ້ນຂອງສະຖິຕິສະຫຼຸບຈາກ cache ຂອງລະບົບທຸກໆວິນາທີ. ນີ້ສາມາດເຮັດໃຫ້ການ ດຳ ເນີນການປັບລະບົບໄດ້ໂດຍການຊີ້ໃຫ້ເຫັນອັດຕາສ່ວນຂອງການຕີຊ້າແລະອັດຕາການພາດສູງ:

    $ sudo ./cachestat
    
     HITS   MISSES  DIRTIES  READ_HIT% WRITE_HIT%   BUFFERS_MB  CACHED_MB
           0        0        0       0.0%       0.0%           19        544
           4        4        2      25.0%      25.0%           19        544
        1321       33        4      97.3%       2.3%           19        545
        7476        0        2     100.0%       0.0%           19        545
        6228       15        2      99.7%       0.2%           19        545
           0        0        0       0.0%       0.0%           19        545
        7391      253      108      95.3%       2.7%           19        545
       33608     5382       28      86.1%      13.8%           19        567
       25098       37       36      99.7%       0.0%           19        566
       17624      239      416      96.3%       0.5%           19        520
    ...
    

    ຕິດຕາມກວດກາການເຊື່ອມຕໍ່ TCP ທຸກໆວິນາທີໂດຍໃຊ້ tcpconnect. ຜົນຜະລິດຂອງມັນລວມມີທີ່ຢູ່ແລະທີ່ຢູ່ປາຍທາງ, ແລະ ໝາຍ ເລກພອດ. ເຄື່ອງມືນີ້ແມ່ນມີປະໂຫຍດ ສຳ ລັບການຕິດຕາມການເຊື່ອມຕໍ່ TCP ທີ່ບໍ່ຄາດຄິດ, ໂດຍການຊ່ວຍພວກເຮົາໃນການ ກຳ ນົດປະສິດທິພາບໃນການຕັ້ງຄ່າໂປແກຼມຫຼືຜູ້ໂຈມຕີ.

    $ sudo ./tcpconnect
    
    PID    COMM         IP SADDR            DADDR            DPORT
    15272  Socket Threa 4  10.0.2.15        91.189.89.240    80  
    15272  Socket Threa 4  10.0.2.15        216.58.199.142   443 
    15272  Socket Threa 4  10.0.2.15        216.58.199.142   80  
    15272  Socket Threa 4  10.0.2.15        216.58.199.174   443 
    15272  Socket Threa 4  10.0.2.15        54.200.62.216    443 
    15272  Socket Threa 4  10.0.2.15        54.200.62.216    443 
    15272  Socket Threa 4  10.0.2.15        117.18.237.29    80  
    15272  Socket Threa 4  10.0.2.15        216.58.199.142   80  
    15272  Socket Threa 4  10.0.2.15        216.58.199.131   80  
    15272  Socket Threa 4  10.0.2.15        216.58.199.131   443 
    15272  Socket Threa 4  10.0.2.15        52.222.135.52    443 
    15272  Socket Threa 4  10.0.2.15        216.58.199.131   443 
    15272  Socket Threa 4  10.0.2.15        54.200.62.216    443 
    15272  Socket Threa 4  10.0.2.15        54.200.62.216    443 
    15272  Socket Threa 4  10.0.2.15        216.58.199.132   443 
    15272  Socket Threa 4  10.0.2.15        216.58.199.131   443 
    15272  Socket Threa 4  10.0.2.15        216.58.199.142   443 
    15272  Socket Threa 4  10.0.2.15        54.69.17.198     443 
    15272  Socket Threa 4  10.0.2.15        54.69.17.198     443 
    ...
    

    ເຄື່ອງມືທັງ ໝົດ ທີ່ກ່າວມາຂ້າງເທິງນີ້ຍັງສາມາດ ນຳ ໃຊ້ກັບຕົວເລືອກຕ່າງໆ, ເພື່ອເຮັດໃຫ້ ໜ້າ ຊ່ວຍເຫຼືອ ສຳ ລັບເຄື່ອງມືທີ່ໃຫ້, ໃຫ້ໃຊ້ຕົວເລືອກ -h , ຍົກຕົວຢ່າງ:

    $ sudo ./tcpconnect -h
    
    usage: tcpconnect [-h] [-t] [-p PID] [-P PORT]
    
    Trace TCP connects
    
    optional arguments:
      -h, --help            show this help message and exit
      -t, --timestamp       include timestamp on output
      -p PID, --pid PID     trace this PID only
      -P PORT, --port PORT  comma-separated list of destination ports to trace.
    
    examples:
        ./tcpconnect           # trace all TCP connect()s
        ./tcpconnect -t        # include timestamps
        ./tcpconnect -p 181    # only trace PID 181
        ./tcpconnect -P 80     # only trace port 80
        ./tcpconnect -P 80,81  # only trace port 80 and 81
    

    ເພື່ອຕິດຕາມ syscalls ຂອງ exec() ທີ່ລົ້ມເຫລວ, ໃຫ້ເລືອກຕົວເລືອກ -x ດ້ວຍ opennoop ດັ່ງລຸ່ມນີ້:

    $ sudo ./opensnoop -x
    
    PID    COMM               FD ERR PATH
    15414  pool               -1   2 /home/.hidden
    15415  (ostnamed)         -1   2 /sys/fs/cgroup/cpu/system.slice/systemd-hostnamed.service/cgroup.procs
    15415  (ostnamed)         -1   2 /sys/fs/cgroup/cpu/system.slice/cgroup.procs
    15415  (ostnamed)         -1   2 /sys/fs/cgroup/cpuacct/system.slice/systemd-hostnamed.service/cgroup.procs
    15415  (ostnamed)         -1   2 /sys/fs/cgroup/cpuacct/system.slice/cgroup.procs
    15415  (ostnamed)         -1   2 /sys/fs/cgroup/blkio/system.slice/systemd-hostnamed.service/cgroup.procs
    15415  (ostnamed)         -1   2 /sys/fs/cgroup/blkio/system.slice/cgroup.procs
    15415  (ostnamed)         -1   2 /sys/fs/cgroup/memory/system.slice/systemd-hostnamed.service/cgroup.procs
    15415  (ostnamed)         -1   2 /sys/fs/cgroup/memory/system.slice/cgroup.procs
    15415  (ostnamed)         -1   2 /sys/fs/cgroup/pids/system.slice/systemd-hostnamed.service/cgroup.procs
    2548   compiz             -1   2 
    15416  systemd-cgroups    -1   2 /run/systemd/container
    15416  systemd-cgroups    -1   2 /sys/fs/kdbus/0-system/bus
    15415  systemd-hostnam    -1   2 /run/systemd/container
    15415  systemd-hostnam    -1  13 /proc/1/environ
    15415  systemd-hostnam    -1   2 /sys/fs/kdbus/0-system/bus
    1695   dbus-daemon        -1   2 /run/systemd/users/0
    15415  systemd-hostnam    -1   2 /etc/machine-info
    15414  pool               -1   2 /home/tecmint/.hidden
    15414  pool               -1   2 /home/tecmint/Binary/.hidden
    2599   dconf-service      -1   2 /run/user/1000/dconf/user
    ...
    

    ຕົວຢ່າງສຸດທ້າຍຂ້າງລຸ່ມນີ້ສະແດງໃຫ້ເຫັນວິທີການປະຕິບັດການເຮັດວຽກຕາມຮີດຄອງປະເພນີ. ພວກເຮົາ ກຳ ລັງຕິດຕາມຂະບວນການສະເພາະໃດ ໜຶ່ງ ໂດຍໃຊ້ PID ຂອງມັນ.

    ທຳ ອິດ ກຳ ນົດຂະບວນການ ID:

    $ pidof firefox
    
    15437
    

    ຕໍ່ມາໃຫ້ ດຳ ເນີນການ ຄຳ ສັ່ງຕາມຮອຍທີ່ ກຳ ນົດເອງ. ໃນ ຄຳ ສັ່ງຂ້າງລຸ່ມນີ້: -p ລະບຸລະຫັດ ID ຂອງຂະບວນການ, do_sys_open() ແມ່ນ ໜ້າ ທີ່ຂອງແກ່ນແກ່ນທີ່ຖືກຄົ້ນຫາແບບເຄື່ອນໄຫວລວມທັງການໂຕ້ຖຽງຄັ້ງທີສອງເປັນສາຍ.

    $ sudo ./trace -p 4095 'do_sys_open "%s", arg2'
    
    TIME     PID    COMM         FUNC             -
    12:17:14 15437  firefox      do_sys_open      /run/user/1000/dconf/user
    12:17:14 15437  firefox      do_sys_open      /home/tecmint/.config/dconf/user
    12:18:07 15437  firefox      do_sys_open      /run/user/1000/dconf/user
    12:18:07 15437  firefox      do_sys_open      /home/tecmint/.config/dconf/user
    12:18:13 15437  firefox      do_sys_open      /sys/devices/system/cpu/present
    12:18:13 15437  firefox      do_sys_open      /dev/urandom
    12:18:13 15437  firefox      do_sys_open      /dev/urandom
    12:18:14 15437  firefox      do_sys_open      /usr/share/fonts/truetype/liberation/LiberationSans-Italic.ttf
    12:18:14 15437  firefox      do_sys_open      /usr/share/fonts/truetype/liberation/LiberationSans-Italic.ttf
    12:18:14 15437  firefox      do_sys_open      /usr/share/fonts/truetype/liberation/LiberationSans-Italic.ttf
    12:18:14 15437  firefox      do_sys_open      /sys/devices/system/cpu/present
    12:18:14 15437  firefox      do_sys_open      /dev/urandom
    12:18:14 15437  firefox      do_sys_open      /dev/urandom
    12:18:14 15437  firefox      do_sys_open      /dev/urandom
    12:18:14 15437  firefox      do_sys_open      /dev/urandom
    12:18:15 15437  firefox      do_sys_open      /sys/devices/system/cpu/present
    12:18:15 15437  firefox      do_sys_open      /dev/urandom
    12:18:15 15437  firefox      do_sys_open      /dev/urandom
    12:18:15 15437  firefox      do_sys_open      /sys/devices/system/cpu/present
    12:18:15 15437  firefox      do_sys_open      /dev/urandom
    12:18:15 15437  firefox      do_sys_open      /dev/urandom
    ....
    

    ບົດສະຫຼຸບ

    BCC ແມ່ນຊຸດເຄື່ອງມືທີ່ມີປະສິດທິພາບແລະງ່າຍຕໍ່ການໃຊ້ງານ ສຳ ລັບວຽກງານການບໍລິຫານລະບົບຕ່າງໆເຊັ່ນ: ການກວດສອບການເຮັດວຽກຂອງລະບົບ, ຕິດຕາມອຸປະກອນ block I/O, TCP, ການເຮັດວຽກຂອງລະບົບແຟ້ມເອກະສານ, syscalls, Node.js probes, ບວກກັບອີກຫລາຍຢ່າງ. ສິ່ງທີ່ ສຳ ຄັນ, ມັນຂົນສົ່ງພ້ອມດ້ວຍເອກະສານຕົວຢ່າງແລະຫລາຍ ໜ້າ ສຳ ລັບເຄື່ອງມືໃນການ ນຳ ພາທ່ານ, ເຮັດໃຫ້ມັນເປັນມິດແລະເຊື່ອຖືໄດ້.

    ສຸດທ້າຍ, ທ່ານສາມາດກັບມາຫາພວກເຮົາໂດຍການແລກປ່ຽນຄວາມຄິດຂອງທ່ານກ່ຽວກັບເລື່ອງ, ຖາມ ຄຳ ຖາມ, ໃຫ້ ຄຳ ແນະ ນຳ ທີ່ເປັນປະໂຫຍດຫຼື ຄຳ ຕຳ ນິຕິຊົມທີ່ສ້າງສັນໃດໆຜ່ານພາກ ຄຳ ເຫັນຂ້າງລຸ່ມນີ້.

    ສຳ ລັບຂໍ້ມູນເພີ່ມເຕີມແລະການ ນຳ ໃຊ້: https://iovisor.github.io/bcc/