连码是什么意思:session_start()卡死、session锁定导致并发阻塞 解决办法

连码四七靠三活猜生肖 www.dvwa8.cn 今天测试网站的时候,发现网站好卡的,通过php-fpm慢日志查看发现:session_start()卡死

 

通过上图就知道我使用的ajax进行异步获取数据时,一个页面中存在2个ajax异步执行!

 

根据观察ajax.php:

第一个ajax请求发起成功,这个请求得php运算100秒后才返回结果。

第二个ajax在第一个请求发起后也跟随发起请求,第二个请求php运算10秒就可以发回结果,但是结果却是得第一个请求完全执行完成返回结果后第二个才跟随返回。

 

原因:

原因在于:执行session_start()后,对应的session文件是被锁定的,直到当前脚本结束才会解锁。

session数据被锁定以防止并发写入,所以任何时候只有一个脚本可以在session上运行。

在锁定期间,另一个进程访问相同session id 要等文件解锁后session_start()才会开始。

 

解决办法

办法也非常简单,开启session后,做了相应的操作,一定要关闭session;

例如:只需要在 session 设置好数据后调用, session_write_close() 将数据写入文件并且结束session;

 

PHP示例代码如下:

<?php
session_start();
$_SESSION["count"]=1;
session_write_close();
sleep(10);
?>

如果不加入session_write_close();并发3个进程访问该页面,第一个进程执行10秒 第二个执行20秒 第三个执行30秒。

加入session_write_close()后 ,并发3个进程会同时在10秒后执行完成!

    A+
发布日期:2018年06月13日  所属分类:PHP
最后修改时间:2018-06-13 20:20
评分: (当前没有评级)
付杰
永久免费SSL证书服务 HTTPS申请 安装 配置 支持通配符*
永久免费SSL证书服务 HTTPS申请 安装 配置 支持通配符*
  • ¥ 199.9元
  • 市场价:20000元
服务器管理面板/主机控制面板“安装”服务
服务器管理面板/主机控制面板“安装”服务
  • ¥ 9.9元
  • 市场价:49.9元
wordpress站群服务 泛解析二级域名站群 二级目录站群
wordpress站群服务 泛解析二级域名站群 二级目录站群
  • ¥ 1999.9元
  • 市场价:4800元
PHP运行环境 Wamp Lamp Lnmp 安装、配置、搭建服务
PHP运行环境 Wamp Lamp Lnmp 安装、配置、搭建服务
  • ¥ 9.9元
  • 市场价:49.9元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: