成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用Bpftrace去透視Linux內核

系統(tǒng) Linux
如果我們想看看tcp發(fā)送數(shù)據(jù)的大小,我們需要獲取第三個(arg2)參數(shù)size的值。我們嘗試寫一個bpftrace的小腳本看一下size的值。

bpftrace是基于bpf實現(xiàn)的追蹤工具,之前的文章的分享過bpftool,bpftrace的功能更加強大。

在內核中tcp發(fā)送數(shù)據(jù)是通過tcp_sendmsg 方法實現(xiàn)的

int tcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t size);

如果我們想看看tcp發(fā)送數(shù)據(jù)的大小,我們需要獲取第三個(arg2)參數(shù)size的值。我們嘗試寫一個bpftrace的小腳本看一下size的值。

執(zhí)行效果如下:

# bpftrace -e 'k:tcp_sendmsg { @size
Attaching 2 probes...


@size:
[1] 6 | |
[2, 4) 0 | |
[4, 8) 0 | |
[8, 16) 0 | |
[16, 32) 110 |@@@@@@@@ |
[32, 64) 687 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
[64, 128) 429 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
[128, 256) 60 |@@@@ |
[256, 512) 96 |@@@@@@@ |
[512, 1K) 46 |@@@ |
[1K, 2K) 28 |@@ |
[2K, 4K) 8 | |
[4K, 8K) 10 | |

可以看到size的直方圖,可以看到類似正態(tài)分布。

如果你想看看都是哪些進程大量發(fā)送數(shù)據(jù),可以添加大于 1024 字節(jié)過濾器,如下:

# bpftrace -e 'k:tcp_sendmsg /arg2 > 1024/ { printf("PID %d,COMM: %s: %d bytes\n", pid,comm, arg2); }'
Attaching 1 probe...
PID 63700,COMM: kube-apiserver: 1581 bytes
PID 68206,COMM: etcd: 1079 bytes
PID 1784,COMM: kube-scheduler: 2249 bytes
PID 63700,COMM: kube-apiserver: 1581 bytes
PID 63700,COMM: kube-apiserver: 5811 bytes
PID 63700,COMM: kube-apiserver: 1581 byt

前面都是基于 tcp_sendmsg 的size參數(shù)去玩的,我們更進一步,看看發(fā)送數(shù)據(jù)包的內容,也就tcp_sendmsg的第一個參數(shù)。我們寫這樣一段腳本

#!/usr/local/bin/bpftrace 
#include <net/sock.h>
k:tcp_sendmsg
{
@sk[tid] = arg0;
@size[tid] = arg2;
}

kr:tcp_sendmsg
/@sk[tid]/
{
$sk = (struct sock *)@sk[tid];
$size = @size[tid];
$af = $sk->__sk_common.skc_family;
if ($af == AF_INET) {
$daddr = ntop($af, $sk->__sk_common.skc_daddr);
$saddr = ntop($af, $sk->__sk_common.skc_rcv_saddr);
$lport = $sk->__sk_common.skc_num;
$dport = $sk->__sk_common.skc_dport;
$dport = ($dport >> 8) | (($dport << 8) & 0xff00);
printf("%-15s %-5d -> %-15s %-5d: %d bytes, retval %d\n",
$saddr, $lport, $daddr, $dport, $size, retval);
} else {
printf("IPv6...\n");
}
delete(@sk[tid]);
delete(@size[tid]);
}

這段腳本有點多,初學者可能有點懵,我稍微解釋一下,腳本有兩個掛載點,k代表kprobe,kr代表kretprobe。腳本通過解析 sk 這個結構體,去獲取tcp 包源IP和端口、目的IP和端口,這里稍微需要了解一下內核的基礎數(shù)據(jù)結構體。retval 代表tcp_sendmsg 函數(shù)返回值,這個bpftrace原生支持的。

執(zhí)行這個腳本

127.0.0.1       2379  -> 127.0.0.1       1236 : 64 bytes, retval 64
127.0.0.1 1236 -> 127.0.0.1 2379 : 51 bytes, retval 51
127.0.0.1 2379 -> 127.0.0.1 1236 : 38 bytes, retval 38
10.133.18.121 65286 -> 10.133.18.121 6443 : 257 bytes, retval 257

是不是非常有意思,我們基于這些數(shù)據(jù)生成每個節(jié)點之間的網(wǎng)絡關系。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2022-03-03 18:18:53

BPF解釋器系統(tǒng)

2025-04-18 04:05:00

2025-03-21 00:00:00

2021-09-29 09:50:41

Linux內核日志

2021-09-08 05:46:51

Linux內核日志

2025-04-03 03:55:00

2021-07-30 20:34:28

LinuxFedorabpftrace

2021-07-07 08:00:00

Linux開發(fā)虛擬機

2017-04-26 13:47:32

Java

2021-02-20 06:08:07

LinuxWindows內核

2009-07-27 08:50:29

2010-03-02 09:17:32

Linux local

2022-01-24 16:42:48

bpftraceLinux工具

2011-03-25 15:01:25

Cacti監(jiān)控Windows

2011-03-31 12:48:04

cactiLinuxWindows

2018-05-18 09:07:43

Linux內核內存

2021-05-19 07:56:26

Linux內核搶占

2013-11-07 13:59:56

Linux內核

2013-11-25 14:07:11

Linux內核內核特性

2014-07-29 15:44:33

Linux內核Crash
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 野狼在线社区2017入口 | 国产精品 亚洲一区 | 亚洲欧美一区二区三区国产精品 | xx性欧美肥妇精品久久久久久 | 久久国| 欧美午夜精品久久久久久浪潮 | 999re5这里只有精品 | 国产乱码精品一区二区三区忘忧草 | 蜜桃精品在线 | 亚洲久久一区 | 国产成人在线视频 | 日韩字幕 | 99热这里有精品 | 秋霞电影一区二区三区 | 久久人爽爽人爽爽 | 亚洲电影专区 | 久久国产成人 | 人人玩人人干 | 成人欧美一区二区三区黑人孕妇 | 久久精品视频在线播放 | 日韩精品一区二区三区在线观看 | 国产精品久久国产精品 | 亚洲精品在线观 | 日本粉嫩一区二区三区视频 | 91精品国产91 | 午夜影院在线播放 | 日韩2020狼一二三 | 亚洲精品一区二区三区在线 | 欧美一二三 | 特级黄一级播放 | 国产伦精品一区二区三区高清 | 精品国产乱码一区二区三区a | 久久综合香蕉 | 激情91| 97精品国产97久久久久久免费 | 国产精品毛片一区二区在线看 | 青青久久 | 欧州一区 | 一级在线观看 | 国产一区二区三区在线 | 亚洲国产成人精 |