执行Redis make test报错:主从同步测试失败(Ubuntu16+Apache环境)
make test replication-psync.tcl测试失败的问题 我之前在Ubuntu 16搭配Apache的环境里编译Redis后跑make test时,也碰到过一模一样的报错——就是tests/integration/replication-psync.tcl里的「Slave should be able to synchronize with the master」测试用例挂了,最终导致整个test目标失败。下面是我亲测有效的几个解决办法,你可以挨个试试:
补全测试依赖包
Redis的测试用例依赖Tcl环境,Ubuntu 16默认的Tcl版本可能不够或者没装全。执行下面的命令安装所需依赖:sudo apt-get update sudo apt-get install tcl8.5 build-essential安装完成后,重新回到Redis源码目录,再跑
make test试试。检查端口占用情况
Redis测试过程中会启动多个Redis实例,大概率会用到6379、6380这类默认端口。如果Apache或者其他服务刚好占用了这些端口,就会导致主从同步测试失败。执行下面的命令排查端口占用:sudo netstat -tulpn | grep -E '6379|6380'如果发现有进程占用这些端口,可以先临时停止对应的服务(比如Apache用
sudo service apache2 stop),等测试跑完再启动回来。重新编译Redis并清理缓存
有时候编译过程中生成的缓存文件可能会导致奇怪的问题,先彻底清理之前的编译产物,再重新编译:make distclean make编译完成后再执行
make test,大概率能解决一些隐性的编译问题。调整系统资源限制
Ubuntu 16默认的文件描述符限制比较低,而Redis测试会创建大量的文件和套接字,资源不足也会导致测试失败。先临时调高限制:ulimit -n 10240然后在当前shell窗口重新跑
make test。如果想永久生效,可以编辑/etc/security/limits.conf文件,添加以下内容:* soft nofile 10240 * hard nofile 10240保存后重启系统或者重新登录就能生效。
如果上面的方法都试过还是不行,你可以试试跑make test V=1,这个命令会输出更详细的测试日志,能帮你定位到更具体的失败原因。
内容的提问来源于stack exchange,提问作者Aaron

