免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7285 | 回复: 12

内核中大量的tcp overflow的报错,寻求解决方法 [复制链接]

论坛徽章:
0
发表于 2010-08-05 13:10 |显示全部楼层
一台Red hat 服务器,做负载交换,当连接达到上万后,内核里都报大量的这种错误,不知道各位有什么解决办法?
  1. printk: 7277 messages suppressed.
  2. TCP: time wait bucket table overflow
  3. printk: 16031 messages suppressed.
  4. TCP: time wait bucket table overflow
  5. printk: 8401 messages suppressed.
  6. TCP: time wait bucket table overflow
  7. printk: 4277 messages suppressed.
  8. TCP: time wait bucket table overflow
  9. printk: 8677 messages suppressed.
  10. TCP: time wait bucket table overflow
  11. printk: 1027 messages suppressed.
  12. TCP: time wait bucket table overflow
  13. printk: 4217 messages suppressed.
  14. TCP: time wait bucket table overflow
  15. printk: 5709 messages suppressed.
  16. TCP: time wait bucket table overflow
  17. TCP: time wait bucket table overflow
  18. TCP: time wait bucket table overflow
复制代码
另外想知道为什么会报这个错。谢谢。

论坛徽章:
0
发表于 2010-08-06 12:33 |显示全部楼层

  1.         struct inet_timewait_sock *tw = NULL;
  2.         const struct inet_connection_sock *icsk = inet_csk(sk);
  3.         const struct tcp_sock *tp = tcp_sk(sk);
  4.         int recycle_ok = 0;

  5.         if (tcp_death_row.sysctl_tw_recycle && tp->rx_opt.ts_recent_stamp)
  6.                 recycle_ok = icsk->icsk_af_ops->remember_stamp(sk);

  7.         if (tcp_death_row.tw_count < tcp_death_row.sysctl_max_tw_buckets)
  8.                 tw = inet_twsk_alloc(sk, state);

  9.         if (tw != NULL) {
  10.         ......
  11.         ......
  12.         ......
  13.         } else {
  14.                 /* Sorry, if we're out of memory, just CLOSE this
  15.                  * socket up.  We've got bigger problems than
  16.                  * non-graceful socket closings.
  17.                  */
  18.                 LIMIT_NETDEBUG(KERN_INFO "TCP: time wait bucket table overflow\n");
  19.         }
复制代码

  1. struct inet_timewait_sock *inet_twsk_alloc(const struct sock *sk, const int state)
  2. {
  3.         struct inet_timewait_sock *tw =
  4.                 kmem_cache_alloc(sk->sk_prot_creator->twsk_prot->twsk_slab,
  5.                                  GFP_ATOMIC);
  6.         if (tw != NULL) {
  7.                 ......
  8.                 ......
  9.                 ......
  10.         }

  11.         return tw;
  12. }
复制代码
综上分析,几种可能导致提示这句话:
1、在 tcp_death_row.tw_count >= tcp_death_row.sysctl_max_tw_buckets 的情况下
2、在调用 kmem_cache_alloc 分配 tw 错误的情况下

估计你的情况是由于 “1” 导致的
尝试用 sysctl 增大 net.ipv4.tcp_max_tw_buckets 试试

论坛徽章:
53
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
发表于 2010-08-06 13:35 |显示全部楼层
回复 2# platinum


    你是做LINUX C开发的吗?太强了,源码都找出来了。

论坛徽章:
0
发表于 2010-08-06 13:52 |显示全部楼层
回复  platinum


    你是做LINUX C开发的吗?太强了,源码都找出来了。
renxiao2003 发表于 2010-08-06 13:35


对于这种问题,最好的解决办法就是从代码入手,看因为什么提示

论坛徽章:
53
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
发表于 2010-08-06 13:57 |显示全部楼层
回复 4# platinum


    是的。但是也要有良好的C功能。我就是C太烂了。

论坛徽章:
0
发表于 2010-08-06 14:06 |显示全部楼层
回复  platinum


    是的。但是也要有良好的C功能。我就是C太烂了。
renxiao2003 发表于 2010-08-06 13:57


不会啊,兄台不是程序员吗,C 是最基础的编程语言了,怎么会烂呢

论坛徽章:
53
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
发表于 2010-08-06 14:10 |显示全部楼层
回复 6# platinum


    是程序员,但不是C程序员啊。做JAVA和NET的。

论坛徽章:
0
发表于 2010-08-06 14:14 |显示全部楼层
语法几乎相同,所以只要能看懂代码逻辑就行了,呵呵

论坛徽章:
53
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
发表于 2010-08-06 17:11 |显示全部楼层
语法几乎相同,所以只要能看懂代码逻辑就行了,呵呵
platinum 发表于 2010-08-06 14:14



    但是像C语言的指针,在JAVA等语言里就没有,特别是C的*和&这些地址/指针操作的,多用几回就迷糊得很。不知道什么是什么了。

论坛徽章:
0
发表于 2010-08-06 18:05 |显示全部楼层
综上分析,几种可能导致提示这句话:
1、在 tcp_death_row.tw_count >= tcp_death_row.sysctl_max_tw_buck ...
platinum 发表于 2010-08-06 12:33



    tcp_death_row.tw_count

这个能统计到吗?
目前我把net.ipv4.tcp_max_tw_bucket已经从5000 改到10000了。

另外有一个问题想请教 platinum 对于大的连接(HTTP)的Server(64位的Linux)优化,有什么建议。

谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

ITPUB技术栈

ITPUB技术栈是ITPUB企业打造的垂直于IT领域的知识社群平台,在这里,你既可以是创作者也可以是消费者。如果你的IT生涯丰富多彩,喷薄的个人价值尽可在小栈内体现;如果你渴望找到志同道合的伙伴,拓宽人脉,小栈比跑会场更快。 小栈特色:
1.极高的用户转化率,实现更直接的知识变现;
2.随时随地,刷个朋友圈的时间,实现更长效的信息沉淀;
3.戳痛、难点的专业咨询,更接近成功解决方案的时刻;
4.贴近意见领袖,个人高速成长,迈入更富有价值的人际圈。

----------------------------------------

技术小栈>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP