laravel redis Error while reading line from the server.

代码运行一段时间后,会报下面的错误。

[Predis\Connection\ConnectionException]

Error while reading line from the server. [tcp://127.0.0.1:6379]

最初的怀疑是连接数过多,导致连接不上服务器,出现上述错误。查看进程,发现大量redis状态为TIME_WAIT的tcp连接。

首先考虑的是,减少TIME_WAIT的进程,保持随时可以连接到服务器。所以想到的减少TIME_WAIT状态的进程,将进程快速回收。修改内核参数sysctl.conf,net.ipv4.tcp_timestamps=1(1为开启),开启快速回收net.ipv4.tcp_tw_recycle=1。tw_recycle是通过时间戳判断哪个是最新的进程,将不是最新的TIME_WAIT的进程回收,所以需要先开启tcp_timestamps。

修改后观察,果然没有继续报错。

但是使能快速回收TIME_WAIT进程,可能会丢包,导致没有收到应答,不能成功建立连接。但这种办法也不是最佳解决办法,尤其修改内核参数,涉及环节太多,需深入了解才可修改。

底层不去修改,就从predis客户端入手,源码发现有read_write_timeout这个参数,可以设置超时时间,这样读取流数据时就不会报错。Predis作者建议设置关闭redis.conf中timeout(修改timeout 0),表示不关闭与客户端的连接,我感觉这样比较耗费资源,可以适当增加timeout时间。

所以这次暂时是这样解决的,设置read_write_timeout=-1和redis.conf的timeout参数。

其实有很多解决方式,后续可以继续寻找一个更优的方案。

比较了常见的两个php连接redis客户端,phpredis和predis。Laravel中使用的predis,其中连接redis使用connect,当请求结束连接关闭。而phpredis使用pconnect连接,依赖于php-fpm,php-fpm不关闭,连接一直都在。再次使用pconnect,连接会被重用,不会再次新建。

后来查看predis源码发现,persistent这个参数,手册说明都没有提到,但是看字面意思,可能类似于pconnect方式的持久连接,这个后续再研究一下。

时间: 2024-11-05 20:41:13

laravel redis Error while reading line from the server.的相关文章

error: bad top line in state file /var/lib/logrotate.status 解决方法

发现日志切割并没有按计划执行,后来手动强制执行时,发现如下报错: [[email protected] logrotate.d]# logrotate -f httpd error: bad top line in state file /var/lib/logrotate.status [[email protected] logrotate.d]# 解决访求: 删除/var/lib/logrotate.status 这个文件即可解决. 解决后,最好再运行一下logrotate -f /etc

An error occurred at line: 1 in the generated java file问题处理

tomcat6启动后,加载jsp页面报错,提示无法将jsp编译为class文件,主要报错信息如下: An error occurred at line: 1 in the generated java file 最后确认该错误原因为:tomcat6不支持jdk1.8版本 修改jdk为1.7,刷新工程,通过!

Faster RCNN 运行自己的数据,刚开始正常,后来就报错: Index exceeds matrix dimensions. Error in ori_demo (line 114) boxes_cell{i} = [boxes(:, (1+(i-1)*4):(i*4)), scores(:, i)];

function script_faster_rcnn_demo() close all; clc; clear mex; clear is_valid_handle; % to clear init_key run(fullfile(fileparts(fileparts(mfilename('fullpath'))), 'startup')); %% -------------------- CONFIG -------------------- opts.caffe_version = '

编译sass,遇到报错error style.scss (Line 3: Invalid GBK character "\xE5")

今天学习sass,写了一行中文注释,结果却遇到了报错: 1 cmd.exe /D /C call C:/Ruby23-x64/bin/scss.bat --no-cache --update style.scss:style.css 2 error style.scss (Line 3: Invalid GBK character "\xE5") 3 4 Process finished with exit code 1 以前在公司使用的mac没用遇到这种问题,当使用windows 7

新部署tomcat,An error occurred at line: [1] index_jsp.java

环境: centos6.5 32位 oracle jdk 1.8 tomcat 7 问题: yum install tomcat后,返回如下错误: [[email protected]]~# curl -v http://localhost:8080 * About to connect() to localhost port 8080 (#0) * Trying 127.0.0.1... connected * Connected to localhost (127.0.0.1) port 8

报错:An error occurred at line: 22 in the generated java file The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory

org.apache.jasper.JasperException: Unable to compile class for JSP: An error occurred at line: 22 in the generated java file The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory 加入Myeclipse自带的java EE 6 library即可解决:

在WSL中安装swool报错 error: unrecognized command line option '-V' 的解决方法

Windows Subsystem for Linux Ubuntu中使用pecl安装swool时遇到错误"error: C compiler cannot create executables"."error: unrecognized command line option '-V'" 解决方法 先看解决方法, 将gcc版本降低到4.8即可,因为高版本gcc取消了-V参数: sudo apt install gcc-4.8 -y sudo update-alte

mysql恢复和数据导入的问题(ERROR 2006 (HY000) at line 1016: MySQL server has gone away)

今天在上班过程中需要将一个1.3G的数据库sql文件导入到mysql数据库中去,在执行过程遇到了一些问题,执行到一半时报错,错误如下 ERROR 2006 (HY000) at line 1016: MySQL server has gone away 报错后百度查了下资料,大概是因为mysql在导入数据时sql语句过长,超过了mysql的max_allowed_packet的限制,这个可以通过修改这个 参数的大小来调节: set global max_allowed_packet=1024*1

error: unrecognized command line option "-std=c11" 解决办法

今天在安装php版本 grpc扩展的时候报错如下: cc1: error: unrecognized command line option "-std=c11" cc1: warnings being treated as errors cc1: error: unrecognized command line option "-Wno-parentheses-equality" 开始搜寻解决方案,经查,出现这个 编译错误的原因在g++ gcc 版本不够高. 解决