zoukankan      html  css  js  c++  java
  • 记一次因为session引起的并发问题

    在做一个DSP系统(不要纠结这个系统是做什么的)时,碰到了一个很奇特的bug。

    事情背景:

    1.媒体方要求素材必须通过API提交给他们审核后,方可投放使用。

    2.上线不久,运营反馈“每当提交素材的时候,后台就会卡住...”(后台提交素材,会同步提交API)

    3.访问量:不超100IP(后台仅内部人员访问)

    原因调查:

    环境:WAMP

      系统:Windows server 2012(也不要问我为啥不是linux...)  

      web:apache2.4.23

      数据库:mysql5.7.14

       语言:PHP 5.6.25

    框架:ThinkPHP

      起初认为是mysql占住了进程(瞎猜),后来一想走API也不会涉及到数据库呀?

      后来实测发现:只有操作人会卡住(再想访问就会等待之前的API请求完成),其他人不会卡住。

       在A用户提交素材走API后,在访问的第二个页面会卡住

       而B用户在此时不会卡住

      而A的第二次链接和B的链接的区别就在于,A的session和走API时的session是同一个!!

        而A之所以卡住,绝对是session锁住了!

      PHP默认 session是以文件方式存放的,而且如果不声明不需要写session,php会在本次连接结束前一直写锁住session文件.

      B用户不会卡住,就是因为它没有用到走API时被锁住的session文件。

      解决办法:session_write_close()

      在不需要写session时,要调用上述方法,让php解锁session文件(本bug仅限以文件方式存放session的情况)

      

    欢迎各位指点!
  • 相关阅读:
    B1295 [SCOI2009]最长距离 最短路
    B1588 [HNOI2002]营业额统计 set||平衡树
    B1202 [HNOI2005]狡猾的商人 并查集
    B1303 [CQOI2009] 中位数图 数学
    B2002 [Hnoi2010]Bounce 弹飞绵羊 分块
    B1192 [HNOI2006]超级英雄Hero 二分图匹配
    逐个击破
    HAOI2009 毛毛虫
    HNOI/AHOI2018 道路
    NOI2005 瑰丽华尔兹
  • 原文地址:https://www.cnblogs.com/thors/p/10788996.html
Copyright © 2011-2022 走看看