Chinaunix首页 | 论坛 | 博客
  • 博客访问: 757925
  • 博文数量: 144
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1150
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-17 14:32
个人简介

小公司研发总监,既当司令也当兵!

文章分类

全部博文(144)

分类: LINUX

2017-05-24 11:58:07

ARP表溢出

问题描述:路由器连接clients变大时,出现部分人无法分配IP或无法上网;查看日志dmesg有很多“ipv4: Neighbour table overflow.”打印
问题原因:ARP表条目达到限制,新连接的client在路由器上无法正常解析、存储ARP,导致网络异常
解决方法:把默认的ARP条目限制提高

点击(此处)折叠或打开

  1. root@RippleTek:~# sysctl net.ipv4.neigh.default.gc_thresh1
  2. net.ipv4.neigh.default.gc_thresh1 = 128
  3. root@RippleTek:~# sysctl net.ipv4.neigh.default.gc_thresh2
  4. net.ipv4.neigh.default.gc_thresh2 = 512
  5. root@RippleTek:~# sysctl net.ipv4.neigh.default.gc_thresh3
  6. net.ipv4.neigh.default.gc_thresh3 = 1024
  7. root@RippleTek:~# sysctl net.ipv4.neigh.default.gc_interval
  8. net.ipv4.neigh.default.gc_interval = 30
  9. root@RippleTek:~# sysctl net.ipv4.neigh.default.gc_stale_time
  10. net.ipv4.neigh.default.gc_stale_time = 60
见上文,ARP几个常见配置参数和默认值。其中:
net.ipv4.neigh.default.gc_thresh1:存在于ARP高速缓存中的最少层数,如果少于这个数,垃圾收集器将不会运行。缺省值是128。
net.ipv4.neigh.default.gc_thresh2:保存在 ARP 高速缓存中的最多的记录软限制。垃圾收集器在开始收集前,允许记录数超过这个数字 5 秒。缺省值是 512。net.ipv4.neigh.default.gc_thresh3保存在 ARP 高速缓存中的最多记录的硬限制,一旦高速缓存中的数目高于此,垃圾收集器将马上运行。缺省值是1024。
net.ipv4.neigh.default.gc_interval:每次运行GC后的停顿时间,缺省是30秒。
net.ipv4.neigh.defalut.gc_stale_time:决定检查一次相邻层记录的有效性的周期。当相邻层记录失效时,将在给它发送数据前,再解析一次。缺省值是60秒。

根据实际使用人数调整ARP表条目上限:

点击(此处)折叠或打开

  1. vi /etc/sysctl.conf
  2. net.ipv4.neigh.default.gc_thresh3 = 4096
  3. net.ipv4.neigh.default.gc_thresh2 = 2048
  4. net.ipv4.neigh.default.gc_thresh1 = 1024

  5. sysctl -p

TIME_WAIT连接过多导致路由器dhcps无法分配IP

问题描述:路由器在有大量client连接后,出现新client接入时分配IP地址缓慢或无法分配IP地址的情况。日志dmesg打印“No buffer space available”;使用netstat查看系统中有大量TIME_WAIT状态的连接。
问题原因:
大量TIME_WAIT状态的连接存在占用了系统资源,导致DHCP发送报文失败。
解决方案:配置tcp TIME_WAIT状态的连接快速回收:

sysctl改两个内核参数就行了,如下:
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
简单来说,就是打开系统的TIMEWAIT重用和快速回收,至于怎么重用和快速回收,这个问题我没有深究,实际场景中这么做确实有效果。用netstat或者ss观察就能得出结论。
还有些朋友同时也会打开syncookies这个功能,如下:
net.ipv4.tcp_syncookies = 1

打开这个syncookies目的实际上是:“在服务器资源(并非单指端口资源,拒绝服务有很多种资源不足的情况)不足的情况下,尽量不要拒绝TCP的syn(连接)请求,尽量把syn请求缓存起来,留着过会儿有能力的时候处理这些TCP的连接请求”。
如果并发量真的非常非常高,打开这个其实用处不大。
阅读(4166) | 评论(0) | 转发(0) |
0

上一篇:openwrt: Makefile 框架分析

下一篇:lua math 库

给主人留下些什么吧!~~