免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8521 | 回复: 12
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(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
2 [报告]
发表于 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 试试

论坛徽章:
59
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
3 [报告]
发表于 2010-08-06 13:35 |只看该作者
回复 2# platinum


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

论坛徽章:
0
4 [报告]
发表于 2010-08-06 13:52 |只看该作者
回复  platinum


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


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

论坛徽章:
59
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
5 [报告]
发表于 2010-08-06 13:57 |只看该作者
回复 4# platinum


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

论坛徽章:
0
6 [报告]
发表于 2010-08-06 14:06 |只看该作者
回复  platinum


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


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

论坛徽章:
59
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
7 [报告]
发表于 2010-08-06 14:10 |只看该作者
回复 6# platinum


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

论坛徽章:
0
8 [报告]
发表于 2010-08-06 14:14 |只看该作者
语法几乎相同,所以只要能看懂代码逻辑就行了,呵呵

论坛徽章:
59
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
9 [报告]
发表于 2010-08-06 17:11 |只看该作者
语法几乎相同,所以只要能看懂代码逻辑就行了,呵呵
platinum 发表于 2010-08-06 14:14



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

论坛徽章:
0
10 [报告]
发表于 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)优化,有什么建议。

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP