PHP使用Redis存储session时的一个Warning定位

在PHP应用中,遇到一个警告:Unknown: Failed to write session data (redis)。通过检查php配置、源代码和Redis日志,发现每隔5分钟Redis会重启。进一步分析,确定是由于系统中缺少nmap命令,导致监控Redis的定时脚本执行失败,进而重启Redis。安装nmap后,问题得到解决。
摘要由CSDN通过智能技术生成

1. 问题现象

系统页面刷新的时候,偶尔会报错下面的Warnning,但是不经常出现:

Warning: Unknown: Failed to write session data (redis). Please verify that the current setting of session.save_path is correct (tcp://x.x.x.x:6379?auth=yyy) in Unknown on line 0

看网络有人说是redis版本的问题、但是没有具体结论,那么本着学习的态度,自己试试看看能不能捉出这个bug.

定位问题:

  1. 查看php文件是否有设置session的地方,发现没有

  2. 继续检查php配置文件,发现配置了session存储到redis里面

[Session]
session.save_handler = redis
session.save_path = "tcp://x.x.x.x:6379?auth=yyyy"
session.use_cookies = 1

  1. 继续查看php Session扩展源代码,定位出错提示语在函数php_session_save_current_state中

检查session扩展文件中出错提示:


static void php_session_save_current_state(TSRMLS_D) /* {
   {
   { */
{
    int ret = FAILURE;

    //是否session数组
    IF_SESSION_VARS() {
        if (PS(mod_data) || PS(mod_user_implemented)) {
            char *val;
            int vallen;

          //变量编码
            val = php_session_encode(&vallen TSRMLS_CC);
            if (val) {
                //保存session数据
                ret = PS(mod
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值