请教一个问题: 孤儿连接(套接字) sock orphan

发布于 2022-10-15 05:42:31 字数 177 浏览 19 评论 0

内核日志dmesg打出很多 Out of socket memory
看内核代码,一个可能性是孤儿连接超出了限制。
请教:
1. 孤儿连接的产生原因是什么?
2. 孤儿连接过多,超过阀值后,会产生怎样的后果?

(现在有个现象是一台linux设备充当代理服务器,但通过它上网会很慢)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

浪漫之都 2022-10-22 05:42:31

为啥不做NAT?

偏闹i 2022-10-22 05:42:31

不知道你的内存是否足够大。看了一下代码

出现问题的地方在这里

static int tcp_out_of_resources(struct sock *sk, int do_reset)
{
...
        if (orphans >= sysctl_tcp_max_orphans ||
            (sk->wmem_queued > SOCK_MIN_SNDBUF &&
             atomic_read(&tcp_memory_allocated) > sysctl_tcp_mem[2])) {
                if (net_ratelimit())
                        printk(KERN_INFO "Out of socket memory\n");
...

因此你可做的地方有
cat /proc/net/sockstat
TCP: inuse 8 orphan 0 tw 0 alloc 8 mem 1
看看这里的orphan有多少
再看看cat /proc/sys/net/ipv4/tcp_max_orphans
是否小于上面的值,如果是,改大一些

其次
再看看上面的mem值是多少
对比一下
cat /proc/sys/net/ipv4/tcp_mem
第三个值
如果后者小,调大一点,单位是页

天气好吗我好吗 2022-10-22 05:42:31

不知道你的内存是否足够大。看了一下代码

出现问题的地方在这里

static int tcp_out_of_resources(st ...
qtdszws 发表于 2011-05-31 09:01

谢谢。
但你说的这些我都是清楚的,内存足够,tcp_mem没问题
出现那个现象时的sockstat信息现在暂时没有——因为客户的设备,重启后就正常了。

我想了解的,还是我贴子中的问题: 孤儿连接是怎样产生的? 如果超出阀值,会有什么后果?(目前代码中看到的就是超出阀值的孤儿连接会直接发rst包断开,未超出的则有可能后续会处理些别的事情,比如重传数据包……)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文