请教一个问题: 孤儿连接(套接字) sock orphan
内核日志dmesg打出很多 Out of socket memory
看内核代码,一个可能性是孤儿连接超出了限制。
请教:
1. 孤儿连接的产生原因是什么?
2. 孤儿连接过多,超过阀值后,会产生怎样的后果?
(现在有个现象是一台linux设备充当代理服务器,但通过它上网会很慢)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
为啥不做NAT?
不知道你的内存是否足够大。看了一下代码
出现问题的地方在这里
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
第三个值
如果后者小,调大一点,单位是页
谢谢。
但你说的这些我都是清楚的,内存足够,tcp_mem没问题
出现那个现象时的sockstat信息现在暂时没有——因为客户的设备,重启后就正常了。
我想了解的,还是我贴子中的问题: 孤儿连接是怎样产生的? 如果超出阀值,会有什么后果?(目前代码中看到的就是超出阀值的孤儿连接会直接发rst包断开,未超出的则有可能后续会处理些别的事情,比如重传数据包……)