Linux Server Dropping Packets? Troubleshooting RX/TX Drops, Interface Errors, and Network Bottlenecks
Create Time:2026-09-07 15:26:13
浏览量
1118

Linux server RX and TX packet-drop troubleshooting diagram

A rising RX dropped or TX dropped counter does not automatically mean that a cable, switch, or upstream carrier is failing. Packets can be discarded at several points: the network adapter, its driver, an RX ring, the kernel networking backlog, a traffic-control queue, a virtual interface, or the cloud host underneath a virtual machine. The reliable approach is to identify where the counter is increasing, then correlate it with application symptoms, driver statistics, CPU load, and softirq activity.

1. Confirm Whether Applications Are Actually Losing Traffic

An interface counter can increase without causing a visible outage. Start by recording the time window, interface, destination, protocol, and traffic direction. At the same time, check latency, retransmissions, timeouts, and application errors. The following commands provide a useful baseline:

date
ip -s link
ss -s
nstat -az
sar -n DEV 1
ping -c 20 target.example.com
mtr -rwzc 50 target.example.com

ping and mtr are supporting evidence, not a complete diagnosis. Intermediate routers may rate-limit ICMP. If one hop reports loss while later hops respond normally, that alone does not prove that production traffic is being dropped at that hop. For TCP workloads, also examine retransmissions, request timeouts, and logs on both ends.

2. Read the Interface Counters with ip

ip -s link
ip -s -s link show dev eth0

Watch the RX and TX values for errors, dropped, and overrun. Capture two or more samples 30 to 60 seconds apart. A large lifetime counter is less useful than the rate at which it is currently increasing.

  • RX errors: frames that encountered an error while being received; the exact meaning depends on the device and driver.

  • RX dropped: packets discarded somewhere on the receive path, which may involve buffers, backlog processing, protocol handling, or a virtual interface.

  • TX errors: errors encountered during transmission.

  • TX dropped: packets discarded before transmission by a queue, traffic-control rule, driver, or device.

Drivers do not map every statistic in exactly the same way. Treat the generic interface counters as a starting point, not as proof of a specific root cause.

3. Use ethtool to Inspect the Adapter and Driver

ethtool eth0
ethtool -S eth0
ethtool -g eth0
ethtool -k eth0

ethtool eth0 reports properties such as link speed, duplex mode, and link detection. ethtool -S exposes extended statistics supplied by the driver or hardware. These may include CRC, frame, missed, no-buffer, timeout, reset, and per-queue drop counters. Names vary by driver, so interpret them with the adapter model and driver documentation in mind.

If CRC or frame-related counters continue to rise, investigate the physical link, transceiver, cable, switch port, and speed or duplex negotiation. If missed, no-buffer, or one specific RX queue grows instead, focus on receive queues, CPU processing capacity, and interrupt distribution.

4. Check CPU, Softirq, and IRQ Distribution

A server can drop packets before its total bandwidth is saturated. Small packets raise packets per second, and a single CPU, interrupt queue, or softirq path may become the bottleneck first.

mpstat -P ALL 1
cat /proc/interrupts
cat /proc/net/softnet_stat
sar -n DEV 1

Look for NIC interrupts concentrated on a small number of CPUs and for unusually high softirq utilization on those CPUs. /proc/net/softnet_stat can reveal drops or processing-budget pressure in the kernel networking path. Its field layout may change between kernel versions, so use the documentation or source that matches the running kernel instead of relying on an old one-line parser.

On a multiqueue adapter, also review RSS, RPS, RFS, XPS, irqbalance, and explicit CPU affinity. Record per-queue and per-CPU baselines before changing them. A poorly chosen affinity mask can move all packet processing onto an even smaller set of cores.

5. Examine the RX Ring and Kernel Backlog

When packets arrive faster than the kernel can process them, an RX ring or the kernel backlog may overflow. First inspect the supported and active settings:

ethtool -g eth0
sysctl net.core.netdev_max_backlog
sysctl net.core.netdev_budget
sysctl net.core.netdev_budget_usecs

Do not immediately set every buffer to its maximum value. Larger queues may absorb short bursts, but they can also increase memory use and queueing latency while hiding a CPU, driver, or application bottleneck. Change one variable at a time during a controlled window, monitor packet loss and latency, and keep the original value for rollback.

6. Troubleshoot TX Queues and Traffic Control

When the increase is mainly on the TX side, inspect the qdisc, transmit queue, and any egress shaping policy:

tc -s qdisc show dev eth0
ip -s link show dev eth0
ip link show dev eth0

The dropped, overlimits, and backlog fields in tc -s qdisc help show whether packets are queueing or being discarded by traffic control. Rate limits, burst size, queue length, and congestion on the downstream link can all raise TX drop counters. Export the current qdisc configuration and prepare a rollback command before making production changes.

7. Verify MTU and Offload Settings

ip link show dev eth0
ethtool -k eth0
ping -M do -s 1472 target.example.com

An MTU mismatch between a host, virtual interface, tunnel, load balancer, and upstream network can cause fragmentation, silent drops, or the familiar symptom where small requests work but larger transfers fail. VXLAN, GRE, VPN, and other encapsulation add headers, so the underlying network must leave room for that overhead.

GRO, GSO, TSO, LRO, and checksum offload also change what packets look like in a local capture. A checksum that appears incorrect in tcpdump may be completed by hardware after the capture point. Do not disable every offload feature at once. Test one setting temporarily and measure CPU utilization, throughput, retransmissions, and latency.

8. Trace Every Layer in VMs, Containers, and Cloud Servers

In a virtualized environment, a packet may be dropped at the guest interface, veth pair, bridge, tap device, host adapter, virtual switch, or cloud network layer. For containers, inspect both the container namespace and the host:

ip -s link
ip -d link
tc -s qdisc show
nsenter -t <PID> -n ip -s link

If counters inside the VM look normal but the application still sees retransmissions or timeouts, correlate the incident with host and cloud-platform metrics. A typical cloud VM does not expose every physical NIC statistic. Preserve timestamps, instance identifiers, availability zone, connection tuples, and packet captures when escalating the issue to the provider.

9. A Practical Troubleshooting Order

  1. Define the incident window, affected interface, traffic direction, and application symptoms.

  2. Sample ip -s link repeatedly to identify which counters are actively increasing.

  3. Use ethtool -S to separate physical-link, driver, and queue clues.

  4. Check CPU utilization, softirq load, IRQ distribution, and packets per second.

  5. Inspect the RX ring, softnet backlog, and TX qdisc independently.

  6. Verify MTU, encapsulation overhead, and offload behavior.

  7. In virtualized systems, trace the guest, veth, bridge, host, and cloud layers.

  8. Apply one reversible change and repeat the same measurements under comparable load.

10. Validate the Fix

A cumulative drop counter does not return to zero after a fix. Compare the rate of change before and after the modification:

ip -s -s link show dev eth0
ethtool -S eth0
sar -n DEV 1
ss -s
nstat -az

Also review request success rate, P95 and P99 latency, TCP retransmissions, CPU softirq usage, queue backlog, and throughput. If drops fall but latency rises sharply, the change may only have converted packet loss into longer queueing. That is not a complete resolution.

Frequently Asked Questions

Does a rising RX dropped counter mean the NIC is failing?

No. Drops can also occur in driver queues, the kernel backlog, a virtual interface, or protocol processing. Correlate the generic counter with ethtool -S, softnet data, CPU usage, and physical error statistics.

Why are packets dropped when bandwidth is not fully used?

The limiting factor may be packets per second rather than bits per second. A small-packet workload, a hot receive queue, one overloaded softirq CPU, or a short traffic burst can cause drops well below the nominal link rate.

Should I increase netdev_max_backlog immediately?

Only after evidence shows that the softnet backlog is overflowing. Treat it as a measured tuning option, not a default fix. Monitor memory, CPU, and latency after the change and retain the previous value for rollback.

Why does tcpdump show an incorrect checksum?

Transmit checksum offload may calculate the final checksum after the packet passes the local capture point. Confirm the issue with a capture on the receiving side, driver counters, and the active offload settings.

Conclusion

The most important step in Linux packet-drop troubleshooting is to locate the layer that is discarding packets before changing kernel parameters. Start with ip, narrow the scope with driver and per-queue statistics, then examine CPU/IRQ pressure, softnet_stat, qdisc behavior, MTU, and virtual networking. Small, reversible changes backed by before-and-after measurements are safer and more informative than applying a collection of generic tuning values.

References

  1. Linux man-pages: ip-link(8), checked September 7, 2026

  2. Linux man-pages: ethtool(8), checked September 7, 2026

  3. Linux Kernel Documentation: Interface Statistics, checked September 7, 2026

  4. Linux Kernel Documentation: Scaling in the Linux Networking Stack, checked September 7, 2026