从服务器读取行时Redis错误

时间:2015-11-09 04:11:01

标签: tcp redis predis

以下是我在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所示。所有这些都没有帮助这种情况。有什么建议吗?

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查看是否继续发生。