net.core.netdev_max_backlog
我们想了解内核值非常低且不符合建议值时会出现哪些情况
在我们的 Linux RHEL 机器上,此参数的值为1000
因为我们的机器是 HADOOP 机器(BIGDATA 集群)
我们看到最佳做法是增加价值65536
如下所述:
https://datasayans.wordpress.com/2015/11/04/performance-kernel-tuning-for-hadoop-environment/
背景:
内核参数“netdev_max_backlog”是接收队列的最大大小。接收的帧将从 NIC 上的环形缓冲区中取出后存储在此队列中。对于高速卡,请使用高值以防止丢失数据包。在像 SIP 路由器这样的实时应用中,必须为长队列分配高速 CPU,否则队列中的数据将过期(旧)。
那么 - 当这个内核参数的值不足时,可能出现什么情况?
其他-参考-https://gist.github.com/leosouzadias/e37cd189794bb78de502ac25cb605576
https://www.senia.org/2016/02/28/hadoop-and-redhat-system-tuning-etcsysctl-conf/
https://mapredit.blogspot.com/2014/11/hadoop-server-performance-tuning.html
https://gist.github.com/phaneesh/38b3d80b38cc76abb1d010f598fbc90a
答案1
此内核参数值不足时会产生什么影响
运行以下命令:
for i in {1..30}; do date; cat /proc/net/softnet_stat; sleep 1; done
输出内容如下:
001c1216 000000b0 00000040 00000000 00000000 00000000 00000000 00000000 00000000 00000000
02fdffa5 000000aa 00000032 00000000 00000000 00000000 00000000 00000000 00000000 00000000
02fdffa5是数据包数量 000000aa是被丢弃的数据包数量
运行该命令,通过将值转换为十进制,查看丢弃的数据包数量是否增加。如果数据包数量增加,则增加到net.core.netdev_max_backlog
适当的值。
您可以通过运行以下命令暂时增加该值:
sysctl -w net.core.netdev_max_backlog=2000
您可以通过运行以下命令使该值永久生效:
echo "net.core.netdev_max_backlog = X" >> /etc/sysctl.conf
此外,65536 的值太大,并且对于正常的系统性能来说没有必要。 您显然应该将其更改X
为您希望使用的值。
如果 softnet_stat 的第二列和第三列没有增长,则需要增加net.core.netdev_max_backlog
来源:如何调整net.core.netdev_max_backlog
sysctlnet.core.netdev_budget
内核可调参数?