1.Tcpdive的基本原理
Tcpdive是基于linux内核的探测点机制,使用systemtap脚本语言和内嵌C代码来实现的。 
通过定义几类相互关联的探测点和库函数,来收集和处理运行中内核的数据,以及修改内核的处理逻辑。

2.源码目录
https://github.com/fastos/tcpdive
目前的代码基于CentOS 6.5,内核版本号2.6.32-431.17.1开发的。在实际使用中,我们的OS及内核版本很少与此相符,所以需要我们在当前环境基于源码编译rpm包,再安装。
下面我详细描述一下我的实操过程。

3.搭建SystemTap环境
参见http://blog.csdn.net/tao_627/article/details/52137901
下面再详细说明一下:
3.1.查询当前内核版本,并确认内核提供utrace/uprobes用户态支持
uname -r
2.6.32-926.504.30.3.cloud.el6-1.0-stable.x86_64
cat /boot/config-2.6.32-926.504.30.3.cloud.el6-1.0-stable.x86_64 | grep '_UTRACE'
CONFIG_UTRACE=y
3.2.安装内核调试所需要的包
yum -y install gcc
yum -y install kernel-devel-2.6.32-926.504.30.3.cloud.el6-1.0-stable.x86_64
yum -y install kernel-debuginfo-2.6.32-926.504.30.3.cloud.el6-1.0-stable.x86_64
yum -y install kernel-debuginfo-common-x86_64-2.6.32-926.504.30.3.cloud.el6-1.0-stable.x86_64
3.3.安装SystemTap
yum -y install systemtap
验证SystemTap是否安装成功?
stap -ve 'probe begin{log("hello SystemTap!")exit()}'

4.安装tcpdive
cd ~
从github下载源码并编译
git clone https://github.com/fastos/tcpdive.git
cd tcpdive/script
根据当前内核版本号修改make_rpm.sh中的宏定义,
#KERNEL_VER="2.6.32-431.17.1.el6.x86_64"
KERNEL_VER="2.6.32-926.504.30.3.cloud.el6.x86_64"
然后执行

sh make_rpm.sh

对生成rpm包过程中出现的错误,逐一排除,参见"可能出现的问题"一节
如果一切正常的话,将会在当前script下面生成rpm包
安装生成的rpm包
rpm -ivh tcpdive-2.6.32-926.504.30.3.cloud.el6-1.0-stable.x86_64.rpm
查询rpm包是否安装成功

rpm -qa | grep tcpdive



5.启动tcpdive
修改/usr/bin/tcpdive脚本,修改对应的日志配置文件
LOG_NAME="tcpdive.log"         # log file name
LOG_SIZE="500"                 # per log file's upper size(MB)
LOG_NUM=20                     # max number of log files
PORTS="80"                     # server ports concerned, eg. 80,8080
然后启动
tcpdive status
tcpdive start

6.在本机访问指定监测端口80
过一定时间会在当前目录看到日志文件,内容如下

7.可能出现的问题

这个问题的出现,主要是因为当前的Linux内核版本与tcpdive中的内核版本源码有差异造成,需要根据当前内核版本来生成rpm包。上面的报错是说,5830行没有对应的函数。

解决方法有两个,一个是按照上面的提示,将行号5830换为5826或是5833,另一个方法,是查找tcp_input.c源码中每个函数所在的行号,使用下面的命令:

stap -L 'kernel.statement("tcp_rcv_state_process@net/ipv4/tcp_input.c:*")'

参考文献
[1].http://blog.csdn.net/wangzuxi/article/details/42849053
[2].https://github.com/fastos/tcpdive

在CentOS上安装TCP协议性能评测工具tcpdive相关推荐

  1. 如何在Ubuntu/CentOS上安装Linux内核4.0

    如何在Ubuntu/CentOS上安装Linux内核4.0 大家好,今天我们学习一下如何从Elrepo或者源代码来安装最新的Linux内核4.0.代号为'Hurr durr I'm a sheep'的 ...

  2. 在Red Hat或CentOS上安装 MongoDB-4.x 社区版

    在Red Hat或CentOS上安装MongoDB社区版 目录 本文概述 注意事项 安装MongoDB 运行MongoDB 卸载MongoDB 概述 使用本教程,使用软件包管理器在Red Hat En ...

  3. CentOS上安装Jekins

    CentOS上安装Jekins 安装源 sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins ...

  4. CentOS上安装Web性能测试工具Siege 示例

    2019独角兽企业重金招聘Python工程师标准>>> 本文记录一次在CentOS上安装Web性能测试工具Siege的步骤,并对安装过程中遇到的问题进行解决~ Siege是什么? S ...

  5. CentOS上安装运行XWiKi

    现在XWiKi已经一行命令支持安装java -jar xwiki-enterprise-installer-generic-9.4-standard.jar. war安装我搞了三天都没有搞定,参考了& ...

  6. 在CentOS上安装Java环境—openjdk1.7 解决https配置问题

    在CentOS上安装Java环境:[1]使用yum安装java 现阶段做企业级项目开发一般都采用Java语言.开发的项目需要放在服务器上运行测试,若以CentOS系统为服务器系统,首先要解决就是Cen ...

  7. Centos上安装EPEL

    RHEL以及他的衍生发行版如CentOS.Scientific Linux为了稳定,官方的rpm repository提供的rpm包往往是很滞后的,当然了,这样做这是无可厚非的,毕竟这是服务器版本,安 ...

  8. mysql5.7在centos上安装

    2019独角兽企业重金招聘Python工程师标准>>> 原文地址:http://blog.csdn.net/you23hai45/article/details/50984328 h ...

  9. 安装 oracle-xe,CentOS上安装Oracle XE指南

    引言: 在CentOS上安装Oracle XE主要用来解决学习和测试的用处,虽然简单,但也是涉及到了诸多的步骤和细节问题. 1.  下载Oracle XE 访问http://www.oracle.co ...

最新文章

  1. ⑥python模块初识、pyc和PyCodeObject
  2. 为什么电脑磁盘从C盘开始,之前的A盘和B盘呢?
  3. 人工智能在牙科医疗领域是一片蓝海
  4. MySQL Server has gone away报错原因汇总
  5. 高仿真 JDK Proxy手写实现
  6. keras添加正则化全连接_TensorFlow keras卷积神经网络 添加L2正则化
  7. vue 计算文件hash值_vue的hash值原理,也是table切换。
  8. linux内核mtd分区,linux-kernel – 在运行时调整MTD分区大小
  9. iPhone和SSH
  10. HttpClient工具类 HttpClientUtils.java
  11. Makefile:GCC CFLAGS变量和LDFLAGS变量
  12. cudaMemcpy的性能问题
  13. 微信小程序豆瓣电影项目的改造过程经验分享
  14. 常见阿拉伯数学符号以及拼写
  15. Codeforces Round #554 (Div. 2) 1152B. Neko Performs Cat Furrier Transform
  16. Vue 按enter键实现登陆 过程
  17. 佛罗里达州的最新的野生动物保护区
  18. 那些年我们一起手写过的单例
  19. 集体过冬,Hyper-V为企业省钱
  20. Ubuntu20.04编译并运行imu_utils,并且标定IMU

热门文章

  1. 计算机网络实验报告建立校园网,计算机网络实验报告
  2. 基于css3 transform实现散乱的照片排列
  3. mysql更改数据文件目录及my.ini位置| MySQL命令详解
  4. Python学习笔记十一:面向对象
  5. ASP.NET MVC3 在WebGrid中用CheckBox选中行
  6. VS2010创建ATL类时需要手动填写ProgID
  7. [转]Android JNI使用方法
  8. 图解DotNet框架系列
  9. aml linux 环境,各位辛苦编译DSDT.aml的兄弟,linux是个好工具啊,简单提取
  10. 目标检测计算mAP,AP,Recall,Precision的计算方式和代码(YOLO和FastRCNN等)