最近线上出现了不少由于 ring buffer 设置过小而导致的丢包问题问题,这个值在这之前我们一直使用的是出场的默认值,因此跟动辄 2048 的 max 相比,200 或者 500 确实小了点。
比如看看某台 web server 的监控
看了下 ring buffer 以及 interrputs 的分布
# ethtool -S em2 | grep dis
tx_discards: 0
rx_discards: 77491
# ethtool -g em2
Ring parameters for em2:
Pre-set maximums:
RX: 2047
RX Mini: 0
RX Jumbo: 0
TX: 511
Current hardware settings:
RX: 511
RX Mini: 0
RX Jumbo: 0
TX: 511
默认的太小了,适当的调大。 另外,由于这台机器网卡本身的问题,无法均匀的分散 interrupts,只能先把能分散的给分散了。记得把 irqbalance 给关了,这玩意儿没什么用:
# /etc/init.d/irqbalance status
irqbalance is stopped
关键还是配置管理做的不到位,不然不会出现这么低级的错误。