session_start超时、session锁阻塞请求的解决方法

最近公司的网站在访问量大起来后,网站的响应时间经常性的变得很长,页面加载缓慢,经过php-fpm的慢查询日志分析,是session_start()这个函数导致的超时。

网站当中因为许多页面使用ajax发送了多个请求获取数据,并且这些请求大多数还需要操作session。php默认的会话处理器是以文件形式存储在服务器端的(我们的网站也是采用这种方式),为保证session文件中数据的安全,每次只能有一个请求去操作session文件,这个时候session文件就会被加上锁,只能等到脚本执行结束或者session正常关闭才会解锁。
session文件锁定期间,后进来的请求,只能处于等待状态,前面的请求执行结束,后面的请求才能去操作session文件。这就好比厕所里的坑位,先到先得,后面进来的人只能干等着,再着急也没用。

一方面是session锁造成的阻塞,另一方面上在访问量较大的情况下,服务器资源争竞很厉害,相比平时响应时间会有所增加。这么一来,想快都快不起来。

既然是持锁太久造成的阻塞,那就在操作完session后,及时释放文件锁就行了,使用 session_write_close() 函数保存会话数据并释放文件锁。这样问题就解决了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值