以下是我在linux系统上处理tcp和打开文件的当前值:
$cat /proc/sys/fs/file-max # outputs 1,624,164.
$cat /proc/sys/net/ipv4/tcp_max_syn_backlog #outputs 1,048,576
$cat /proc/sys/net/core/somaxconn # output 65535
$ulimit -a # open files = 1,024,000, max user processes = 10,240
Q2: 我也将redis中的超时设置为0,tcp-keepalive设置为60,tcp-backlog设置为65535.我使用的是predis,我将超时设置为0,read_write_timeout设置为-1。但是,我们会定期收到以下错误。
2015-10-28 11:24:14 406309 cron-web Error while reading line from the server. [tcp://10.0.0.1:6379]
2015-10-28 19:15:13 0 web-billing-3 Error while reading line from the server. [tcp://10.0.0.1:6379]
2015-10-28 19:56:58 0 web-billing-3 Operation timed out [tcp://10.0.0.1:6379]
2015-10-29 10:02:25 437257 web-billing-1 Error while reading line from the server. [tcp://10.0.0.1:6379]
2015-10-29 12:03:54 439897 cron-web Error while reading line from the server. [tcp://10.0.0.1:6379]
2015-10-29 15:06:23 443772 web-billing-3 Error while reading line from the server. [tcp://10.0.0.1:6379]
我已尝试将超时内容更改为300但仍然无法正常工作。 linux系统参数也设置如问题1所示。所有这些都没有帮助这种情况。有什么建议吗?
答案 0 :(得分:0)
似乎这种情况发生在PR / PR之前,它可能是它使用连接导致服务器上的IP连接跟踪过载的方式。或者你的脚本正在激活"太多"连接。无论哪种方式,如果是这种情况,你都可以相当容易地找出答案。
在Redis服务器上,运行dmsg| grep conntrack
。如果您看到ip_conntrack: table full, dropping packet
之类的消息,那就是问题所在。您可以按照this article中的步骤进行修改,通过更改/proc/sys/net/ipv4/ip_conntrack_max
设置来匹配/超过您在/proc/sys/net/ipv4/netfilter/ip_conntrack_count
中看到的峰值。
最终虽然可能属于超级用户,因为它可能是系统级问题。
编辑:
要确定并发连接,您需要查看info clients
并查看当前连接数。您需要随着时间的推移跟踪它以确定并发配置文件是什么,以便查看它是否是问题。显然,你运行的更细粒度的分辨率(即,你检查和存储的频率越高),你获得并发峰值的机会就越大。
我真的怀疑Predis存在问题,因为它已知道连接管理问题。如果可以,请尝试使用phpredis查看是否继续发生。