
1. 当服务器网络出现异常时我们该从哪里入手最近在排查一台线上服务器时发现应用响应特别慢通过监控看到网络延迟很高还出现了不少丢包。这种情况在生产环境并不少见但很多运维同学一遇到网络问题就手足无措。其实Linux系统提供了非常强大的网络诊断工具——ethtool它就像是我们排查网卡问题的听诊器。ethtool是Linux下专门用于查询和设置网卡参数的工具几乎所有网卡驱动都支持它。通过它我们可以获取网卡的详细状态信息包括连接状态、驱动版本、硬件配置等更重要的是可以调整各种影响网络性能的参数。我处理过很多次网络性能问题发现90%的网卡性能问题都可以通过ethtool来诊断和优化。2. 快速诊断查看网卡基本状态2.1 检查网卡连接状态当网络出现问题时第一步就是确认网卡的基本连接状态。使用最简单的命令ethtool eth0这个命令会输出网卡的关键信息我通常最关注这几个字段Speed/Duplex显示当前速率和工作模式。如果显示1000Mb/s和Full表示千兆全双工这是理想状态。如果显示Unknown!或Half就可能有问题了。Link detected显示yes表示物理连接正常如果显示no就要检查网线或交换机端口了。Auto-negotiation自动协商状态。我遇到过因为自动协商失败导致网卡降速到100M的情况。2.2 查看详细的统计信息要诊断丢包问题我们需要更详细的数据ethtool -S eth0这个命令会输出网卡的各种统计计数器对于诊断网络问题非常有用。我主要关注rx/tx_errors收发错误计数rx/tx_dropped数据包被丢弃的数量rx_missed_errors由于缓冲区不足导致的丢包rx_over_errorsFIFO溢出导致的丢包曾经处理过一个案例rx_over_errors持续增长最终发现是网卡缓冲区(Ring Buffer)设置太小导致的。2.3 检查Offload功能状态现代网卡都支持各种Offload功能可以减轻CPU负担ethtool -k eth0输出会显示各种Offload功能的开关状态tcp-segmentation-offload (TSO)TCP分片卸载rx-checksumming接收校验和计算tx-checksumming发送校验和计算在高负载服务器上开启这些功能通常能提升性能。但我也遇到过某些特殊场景下需要关闭它们。3. 深度调优解决网卡性能瓶颈3.1 调整Ring Buffer大小Ring Buffer是网卡的重要缓冲区它的大小直接影响网络性能。先查看当前设置ethtool -g eth0输出会显示最大支持值和当前值Ring parameters for eth0: Pre-set maximums: RX: 4096 RX Mini: 0 RX Jumbo: 0 TX: 4096 Current hardware settings: RX: 256 RX Mini: 0 RX Jumbo: 0 TX: 256如果发现rx_dropped或rx_over_errors很高可以适当增大Ring Bufferethtool -G eth0 rx 2048 tx 2048注意这个设置重启后会失效需要写入启动脚本或网卡配置文件。3.2 优化中断合并(Coalesce)参数中断合并可以减少CPU中断次数提升性能。查看当前设置ethtool -c eth0关键参数rx-usecs收到数据后延迟多少微秒产生中断rx-frames收到多少帧后产生中断adaptive-rx是否启用自适应中断合并对于高吞吐场景可以增大这些值ethtool -C eth0 rx-usecs 100 rx-frames 50 adaptive-rx on3.3 调整Offload功能根据服务器负载情况可以调整Offload功能# 开启TSO和GRO ethtool -K eth0 tso on gro on # 关闭某些可能引起问题的Offload ethtool -K eth0 tx off rx off在高并发小包场景下关闭某些Offload反而能提升性能。4. 实战案例解决生产环境丢包问题4.1 问题现象某电商大促期间数据库服务器出现大量TCP重传应用响应变慢。通过监控发现网络延迟从平时的0.1ms飙升到10msifconfig显示rx_dropped持续增长ethtool -S显示rx_fifo_errors不断增加4.2 诊断过程首先检查Ring Buffer设置ethtool -g eth0发现RX Buffer只有256而网卡支持最大4096。然后检查中断合并设置ethtool -c eth0发现rx-usecs是20rx-frames是10且adaptive-rx是off。4.3 优化方案采取了以下优化措施增大Ring Bufferethtool -G eth0 rx 2048 tx 2048调整中断合并参数ethtool -C eth0 rx-usecs 100 rx-frames 50 adaptive-rx on开启相关Offload功能ethtool -K eth0 tso on gro on lro off将设置写入配置文件永久生效echo ETHTOOL_OPTS-G ${DEVICE} rx 2048 tx 2048; -C ${DEVICE} rx-usecs 100 rx-frames 50 adaptive-rx on /etc/sysconfig/network-scripts/ifcfg-eth04.4 效果验证优化后监控显示网络延迟恢复到0.2ms左右rx_dropped和rx_fifo_errors停止增长服务器CPU使用率下降15%5. 高级技巧与注意事项5.1 多队列网卡调优现代服务器网卡支持多队列可以充分利用多核CPU# 查看当前队列数 ethtool -l eth0 # 设置队列数(需要网卡支持) ethtool -L eth0 combined 8设置后可以通过irqbalance或手动设置IRQ亲和性来优化中断处理。5.2 永久保存配置ethtool的修改默认是临时的重启会失效。永久保存配置有两种方法写入网卡配置文件echo ETHTOOL_OPTS-G eth0 rx 2048 tx 2048 /etc/sysconfig/network-scripts/ifcfg-eth0写入rc.localecho ethtool -G eth0 rx 2048 tx 2048 /etc/rc.local chmod x /etc/rc.local5.3 注意事项不是所有网卡都支持所有参数调整具体支持情况取决于网卡驱动某些参数调整需要网卡重启才能生效生产环境调整前建议先在测试环境验证监控调整前后的性能变化确保优化有效在实际工作中我总结出一个经验网络性能优化没有放之四海皆准的最佳配置需要根据具体业务场景、流量特点和硬件配置进行针对性调优。建议每次只调整一个参数观察效果后再决定下一步优化方向。