Linux · 2023年12月5日 0

内核报错kernel: TCP: too many orphaned sockets

通过查看dmesg命令查看,发现大量TCP: too many of orphaned sockets错误

解决办法:

调整tcp_rmem、tcp_wmem、tcp_mem

查看默认值

cat /proc/sys/net/ipv4/tcp_rmem
cat /proc/sys/net/ipv4/tcp_wmem
cat /proc/sys/net/ipv4/tcp_mem

tcp_mem(3个INTEGER变量):low, pressure, high,一般情况下这些值是在系统启动时根据系统内存数量计算得到的

  • low:当TCP使用了低于该值的内存页面数时,TCP不会考虑释放内存。
  • pressure:当TCP使用了超过该值的内存页面数量时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出pressure状态。
  • high:允许所有tcp sockets用于排队缓冲数据报的页面量,当内存占用超过此值,系统拒绝分配socket,后台日志输出“TCP: too many of orphaned sockets”。

调整方式:

echo "net.ipv4.tcp_mem = 6181329	8241772	12362658">> /etc/sysctl.conf
echo "net.ipv4.tcp_rmem = 4096	87380	6291456">> /etc/sysctl.conf
echo "net.ipv4.tcp_wmem = 4096	16384	4194304">> /etc/sysctl.conf
# 生效
sysctl -p