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方式的持久连接,这个后续再研究一下。
laravel redis Error while reading line from the server.的更多相关文章
- Laravel Predis Error while reading line from the server.
问题 Laravel说明文档中的 Redis 发布与订阅案例,命令行运行php artisan redis:subscribe 到60s自动断开并报错 [Predis\Connection\Conne ...
- 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 ...
- make module失败的原因cc1: error: unrecognized command line option “-m64
cc1: error: unrecognized command line option "-m64"cc1: error: unrecognized command line o ...
- linux下安装QT5:error: unrecognized command line option ‘-fuse-ld=gold’
安装qt时在执行./configure时报错:error: unrecognized command line option '-fuse-ld=gold' 这个错误是qt的一个bug. 在装有gol ...
- 编辑sass报错:error style.scss (Line 3: Invalid GBK character "\xE5")解决办法
cmd.exe /D /C call C:/Ruby23-x64/bin/scss.bat --no-cache --update header.scss:header.css error heade ...
- 新部署tomcat,An error occurred at line: [1] index_jsp.java
环境: centos6.5 32位 oracle jdk 1.8 tomcat 7 问题: yum install tomcat后,返回如下错误: [root@centos]~# curl -v ht ...
- cc1plus.exe: error: unrecognized command line option "-fno-keep-inline-dllexport "
在Windows环境下的控制台上,通过qmake指令编译Qt程序时,出现 cc1plus.exe: error: unrecognized command line option "-fno ...
- Solve Error : Undefined function or variable ‘setInitialWorkingFolder’. Error in matlabrc (line 197)
When compile program using Visual Studio 2015, Matlab 2016b, and OpenCV 3.1.0, one might get the err ...
- 编译openwrt时报错:fstools-2018-01-02-11efbf3b/libfstools/overlay.c: At top level: cc1: error: unrecognized command line option '-Wno-format-truncation' [-Werror]
1. 详细错误信息 [ 11%] Building C object CMakeFiles/fstools.dir/libfstools/overlay.c.o/home/jello/openwrt/ ...
随机推荐
- 《剑指offer》— JavaScript(18)二叉树的镜像
二叉树的镜像 题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 相关知识 二叉树的镜像定义: 源二叉树 镜像二叉树 思路 有关二叉树的算法问题,一般都可以通过递归来解决.那么写一个正确的递归程序 ...
- 用JS常规方法是否离开当前页面
该方法在 关闭页面时 会提示 <script type="text/javascript"> var DispClose = true; function CloseE ...
- javascript 常用api
常用API合集 来源于:https://www.kancloud.cn/dennis/tgjavascript/241852 一.节点 1.1 节点属性 Node.nodeName //返回节点名称, ...
- 信号处理——傅里叶变换(FT-DTFT-DFT)
作者:桂. 时间:2017-01-17 23:41:13 链接:http://www.cnblogs.com/xingshansi/articles/6294111.html 声明:转载请注明出处, ...
- Servlet的监听
Servlet监听 在<Servlet和Jsp>中我们使用了ServletConfig获取Servlet的初始配置,用ServletContext来获取整个Web应用的初始配置,但如果需要 ...
- CentOs下安装PHP环境的步骤
前言 在CentOs环境下安装php开发环境,需要首先安装一些源文件,然后使用yum命令直接安装即可,在Fedora 20 源中已经有了PHP的源,直接可以使用以下命令安装即可: # yum inst ...
- 升级后 VTE 类虚拟终端不工作
故障现象 运行 vte 终端,如 gnome terminal.sakura 等光标不出来.xterm 可以运行. 在 xterm 终端中运行 gnome terminal 出现一下错误: grant ...
- MVC+Spring.NET+NHibernate .NET SSH框架整合
在JAVA中,SSH框架可谓是无人不晓,就和.NET中的MVC框架一样普及.作为一个初学者,可以感受到.NET出了MVC框架以后太灵活了(相比之前的web Form),嗯,关于.NET中的MVC框架我 ...
- 《jQuery实战(第二版)》读书笔记
第一部分 jQuery核心 1.jQuery基础 第一章总结了jquery的大致功能,基本原理,使用方式. point: (1).引入:<script type="text/javas ...
- Solr field alias
Field alias Any field, function, or transformer can be displayed with a different name in the output ...