使用SystemTap观测TCP Backlog的攻略如下所示:
可以在终端中输入以下命令来检查系统是否已经安装了SystemTap:
stap -V
若已安装,会输出SystemTap的版本信息,若未安装,则需要通过系统包管理器进行安装。
编写SystemTap脚本来观测TCP Backlog。以下是一个示例脚本:
global backlog_array
probe tcp.sendmsg
{
backlog_array[pid(), execname()] <<< $skb->sk->sk_backlog.len;
}
probe end
{
foreach ([pid+, execname] in backlog_array) {
printf("%d %s: backlog=%d\n", pid, execname, @sum(backlog_array[pid, execname]));
}
}
上述脚本含有两个探针。第一个探针会在TCP sendmsg事件发生时,记录当前进程的ID、名称和TCP backlog的长度;第二个探针则会在所有探针执行完后汇总所有进程的TCP backlog,输出每个进程的ID、名称以及总ACK backlog长度。
可以输入以下命令来使用SystemTap运行脚本:
sudo stap -g <script_filename>
其中,<script_filename>
为你的SystemTap脚本文件名。运行后,终端会输出收集到的TCP backlog信息。
假设我们要检测一个HTTP服务器中的TCP backlog,可以使用以下命令来启动该服务器(需要先安装Python的SimpleHTTPServer模块):
python -m SimpleHTTPServer 80
然后,在另一个终端中运行我们编写的SystemTap脚本,获得TCP backlog信息:
sudo stap -g <script_filename>
可以通过浏览器访问HTTP服务器,使其积累一些TCP backlog。然后,终端将输出所有积累的TCP backlog信息。
假设我们要检测一个SSH连接中的TCP backlog,可以先使用以下命令启动一个SSH服务器:
sudo apt-get install openssh-server
sudo service ssh start
然后,使用以下命令来连接SSH服务器:
ssh <username>@<server_address>
连接成功后,在SSH会话中输入以下命令来生成一些TCP backlog:
yes > /dev/null &
然后,在另一个终端中运行我们编写的SystemTap脚本,获得TCP backlog信息:
sudo stap -g <script_filename>
可以看到,终端将输出SSH进程的ID、名称和积累的TCP backlog长度。
本文链接:http://task.lmcjl.com/news/784.html