CentOS Sniffer在性能测试中的使用方法
一 目标与总体流程
- 明确测试目标:聚焦吞吐、时延、丢包、重传、TCP零窗等关键指标,避免无过滤的全量抓包导致资源浪费与丢包失真。
- 选择工具与方式:优先使用tcpdump(轻量、可脚本化、适合压测期长时间采集),必要时配合Wireshark/Tshark做深度解析;数据库场景可用MySQL Sniffer聚焦SQL层性能。
- 放置嗅探点:尽量在被测链路近端(如压测机同交换机镜像口、网关/宿主机veth/bridge)部署,减少额外跃点与设备负载对结果的影响。
- 控制抓取范围:用BPF过滤表达式只保留目标源/目的IP、端口、协议,降低CPU与内存占用,提升准确性。
- 采集与分析闭环:压测执行→按时间窗口分段抓包→离线统计指标→与业务/系统指标交叉验证。
二 安装与快速上手
- 安装基础抓包能力(tcpdump/libpcap):
- 安装依赖:sudo yum install -y libpcap libpcap-devel
- 安装图形/命令行分析工具(可选):
- 桌面分析:sudo yum install -y wireshark
- 命令行分析:sudo yum install -y wireshark-cli(含tshark)
- 安装网络协议栈嗅探套件(可选,netsniff-ng):
- 依赖:sudo yum groupinstall “Development Tools” -y
- 编译安装:git clone https://github.com/netsniff/netsniff-ng.git && cd netsniff-ng && ./configure && make && sudo make install
- 数据库流量嗅探(可选,MySQL Sniffer):
- 获取与构建:git clone https://github.com/jeremycole/mysql-sniffer.git && cd mysql-sniffer && make
- 快速验证抓包能力:
- 列出接口:ip link
- 实时抓包(示例):sudo tcpdump -i eth0 -nn -s 0 -w perf_test.pcap ‘tcp port 80 or port 3306’
三 性能测试场景与命令示例
- 通用HTTP压测抓包(定位时延、重传、HTTP状态码分布)
- 抓包:sudo tcpdump -i eth0 -nn -s 0 -w http_perf.pcap ‘tcp port 80 or port 443’
- 离线统计时延分布:tshark -r http_perf.pcap -q -z io,stat,1,“tcp.time_delta”
- 统计重传:tshark -r http_perf.pcap -Y “tcp.analysis.retransmission” | wc -l
- 数据库SQL层性能(仅抓取MySQL,分析QPS/慢查询)
- 实时嗅探:sudo ./mysql-sniffer -i eth0 -p 3306
- 离线分析:tshark -r db_perf.pcap -d mysql.port==3306,mysql -T fields -e mysql.query | sort | uniq -c | sort -nr
- 只关注某客户端/服务端的流量(减少无关数据)
- 示例:sudo tcpdump -i eth0 -nn -s 0 -w client.pcap ‘host 192.168.1.100 and (tcp port 80 or tcp port 3306)’
- 长时压测分段落盘(避免单文件过大与缓冲区溢出)
- 示例:sudo tcpdump -i eth0 -nn -s 0 -C 500 -w perf_%Y%m%d_%H%M%S.pcap ‘tcp port 80’
四 降低丢包与提升准确性的系统调优
- 提升网卡环形缓冲(ring buffer)
- 查看:ethtool -g ens33
- 调大:ethtool -G ens33 rx 2048 tx 1024
- 提升内核网络 backlog
- 追加:echo “net.core.netdev_max_backlog=16384” | sudo tee /etc/sysctl.d/99-sysctl.conf
- 生效:sudo sysctl -p
- 合理设置MTU(在链路与对端均支持时)
- 临时:ip link set dev eth0 mtu 9000
- 永久:写入网卡配置并重启网络服务
- 抓包参数优化
- 使用**-s 0**(或足够大的snaplen)避免截断;仅抓取必要流量(BPF过滤);尽量在混杂模式下运行;压测期间避免同时进行高开销分析任务。
五 结果判读与常见问题
- 关键指标与命令
- 吞吐与并发:统计会话数与时延分布(tshark -q -z io,stat,1)
- 重传与丢包:tcp.analysis.retransmission、tcp.analysis.lost_segment
- 零窗与拥塞:tcp.window_size == 0(零窗指示接收端处理能力不足或应用未及时消费)
- HTTP质量:http.response.code、http.time(配合统计分位数)
- 常见问题与排查
- 丢包与不完整:检查ring buffer与backlog、缩短保存间隔(-C)、减少捕获字段(-s 0 已足够)、尽量靠近被测端抓包
- 权限不足:抓包需要root或CAP_NET_RAW能力
- 过滤器过宽:用更精确的BPF表达式仅保留目标IP/端口/协议
- 解析不完整:确保snaplen足够大,并使用对应协议解析器(如mysql、http)
- 合规提示
- 仅在授权网络中进行抓包,避免采集敏感数据,遵守当地法律法规与企业合规要求。