Linux系统ping默认DNS地址时出现“sendmsg: Operation not permitted”错误
问题描述
- 访问网站慢,ping默认DNS地址显示如下。
- ping本地回环地址显示如下。
ping: sendmsg: Operation not permitted
- 系统负载不高,网络线路通畅,资料库无死锁进程。系统日志出现大量信息,如下所示。
kernel: printk: xxxx messages suppressed.
- 使用dmesg排查后发现大量以下信息,如下所示。
TCP: drop open request from 202.X.X.100/62751
printk: 78 messages suppressed.
问题原因
问题可能出在TCP/IP连接上,IP_conntrack表示连接跟踪数据库(conntrack database),代表NAT机器跟踪连接的数目,连接跟踪表能容纳多少记录是被一个变量控制的,它可由内核中的ip-sysctl函数设置。每一个跟踪连接表会占用350字节的内核存储空间,时间一长就会把默认的空间填满。
解决方案
- 加大ip_conntrack_max值,执行如下命令,查出原本的ip_conntrack_max值。
cat /proc/sys/net/ipv4/ip_conntrack_max
- 参考如下命令,写入理想的数值,每一个ip_conntrack buffer会占用292Bytes,此为临时配置。
echo "[$Num]" >/proc/sys/net/ipv4/ip_conntrack_max
注:[$Num]的值以实际环境为准。
- 如果要每次开机都使用新的数值,可以参照如下3种方式。
- 将命令写入
/etc/rc.d/rc.local
文件。 - 在
/etc/sysctl.conf
中添加如下配置。net.ipv4.ip_conntrack_max =[$Num]
- 在系统中执行如下命令。
sysctl -w net.ipv4.ip_conntrack_max=[$Num]
- 将命令写入
- 参考如下命令,降低ip_conntrack timeout时间,重新设置ip_conntrack_tcp_timeout_established,原值为432000秒。
echo "[$Num1]" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
注:[$Num1]的值以实际环境为准。
- 参考如下命令,开启tcp_syncookies,重新设置tcp_syncookies,默认值为0。
echo '1'> /proc/sys/net/ipv4/tcp_syncookies
- 经过以上设置后,确认系统日志出现如下所示信息,且没有了“kernel: printk: xxx messages suppressed.”提示,网站访问速度明显提升,说明问题解决。
kernel: possible SYN flooding on port 80. Sending cookies.
适用于
- 云服务器 ECS