在内核空间中捕获数据包的缓冲区大小?

Ano*_*non 5 unix linux networking network-programming linux-kernel

通过这里的tcpdump的手册页 如果缓冲区已满,内核似乎可以丢弃数据包.我想知道是否

1)该大小是可配置的和/或2)我在哪里可以看到我的发行版的大小?

从手册页(以便于参考):

数据包``由内核丢弃''(这是由于缺少缓冲区空间而丢弃的数据包数量,由运行tcpdump的操作系统中的数据包捕获机制,如果操作系统向应用程序报告该信息;如果没有,它将被报告为0).

ezp*_*zpz 10

您可以检查以下几个方面来缓解内核丢弃的数据包:

  • 看看配置/proc/sys/net/core/netdev_max_backlog/proc/sys/net/core/netdev_budget.默认值可能很低; 尝试将每个设置为2000.
  • 写入输出设备屏幕可能阻塞/减慢该tcpdump过程足够长的时间以填充recv缓冲区
    • 用于-nn关闭DNS查找和端口命名
    • 写入文件而不是屏幕
    • 尝试一下gulp这样的工具
  • 如果你有一台多处理器机器看看使用 taskset
  • 使用nice设置进程的优先级

即使使用这些设置,也可能只是因为您无法跟上您尝试捕获的流量速度.查看您的NIC和机器的详细信息,确保您的期望是可能的.