在做一个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的情况)

  

记一次因为session引起的并发问题的更多相关文章

  1. PHP Session可能会引起并发问题

    在进行Web应用程序开发的时候,人们经常会用Session存储数据.但可能有人不知道,在PHP中,Session使用不当可能会引起并发问题.印度医疗行业软件解决方案提供商Plus91 Technolo ...

  2. session文件无法并发操作

    session_start():打开服务器上的session文件. session_commit():会把$_SESSION数组的内容写入到服务器上的session文件中,但不会清空$_SESSION ...

  3. php session在高并发时可能存在的问题。

    如果同一个客户端并发发送多个请求,而每个请求都使用了Session,那么PHP Session锁的存在会导致服务器串行响应这些请求,而不是并行.这是因为在默认情况下,PHP使用文件存储Session数 ...

  4. 【原创】记一次MySQL大表高并发写入引发CPU飙升的排障过程

    目录 一.故障现象... 1 二.初步分析... 2 三.排障过程... 2 1.排查是否QPS或insert并发请求上升导致问题发生... 2 2.排查是否锁资源等待或block导致了insert变 ...

  5. memcached迁移方案——记一次memcached session服务的迁移

    背景: (1)由于机房调整,需要迁移memcached: (2)需要在短期内迁移完成(一周以内): (3)该memcached 保存了用户的登录数据,非常重要,一旦出问题将导致大量的用户被踢出: (4 ...

  6. Flink使用(三)——记一次Flink Session任务反复重启

    前言 环境: JDK 1.8+Flink 1.6+Hadoop 2.7.3 文中若有表述不正确,欢迎大伙留言指出,谢谢! 1.现象 使用yarn-session在yarn上启动flink集群并提交任务 ...

  7. 如何实现 集群化/Session 复制-doc(cluster-howto.html)

    源文档链接: http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html 翻译日期: 2014年3月19日 翻译人员: 铁锚 感受: Tomc ...

  8. session和cookie的简单理解

    0. 引子,我们为什么要cookie和session       因为http请求是无状态的(不能记录用户的登录状态等),所以需要某种机制来保存用户的登录状态等信息,在下次访问web服务的时候,不用再 ...

  9. Cookie与Session的区别-总结很好的文章

    Cookie与Session的区别-总结很好的文章 本文分别对Cookie与Session做一个介绍和总结,并分别对两个知识点进行对比分析,让大家对Cookie和Session有一个更深入的了解,并对 ...

随机推荐

  1. java的poi技术读取和导入Excel实例

    本篇文章主要介绍了java的poi技术读取和导入Excel实例,报表输出是Java应用开发中经常涉及的内容,有需要的可以了解一下. 报表输出是Java应用开发中经常涉及的内容,而一般的报表往往缺乏通用 ...

  2. 1. 容器化部署一套云服务 第一讲 Jenkins(Docker + Jenkins + Yii2 + 云服务器))

    容器化部署一套云服务系列 1. 容器化部署一套云服务之Jenkins 一.购买服务器 服务器

  3. [Abp vNext 源码分析] - 文章目录

    一.简要介绍 ABP vNext 是 ABP 框架作者所发起的新项目,截止目前 (2019 年 2 月 18 日) 已经拥有 1400 多个 Star,最新版本号为 v 0.16.0 ,但还属于预览版 ...

  4. 【python3基础】相对路径,‘/’,‘./’,‘../’

    python3相对路径 “/” 前有没有 “.” ,有几个“.”,意思完全不一样. “/”:表示根目录,在windows系统下表示某个盘的根目录,如“E:\”: “./”:表示当前目录:(表示当前目录 ...

  5. AssetsUtils【读取assets、res/raw、./data/data/包名/目录下的文件】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 封装了以下功能: 1.读取assets目录下的资源html.文件.图片,将文件复制到SD卡目录中: 2.读取res/raw目录下的文 ...

  6. TabBottomFragmentLayout【自定义底部选项卡区域(搭配Fragment)】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 自定义底部选项卡布局LinearLayout类,然后配合Fragment,实现切换Fragment功能. 缺点: 1.底部选项卡区域 ...

  7. Linux之用户和权限

    自从我大微软终于放下身段,决定给开源社区一个迟来的拥抱,追随多年的拥趸们像是突然得到了女神的垂青,各种茫然失措.痛哭流涕.欢欣鼓舞,纷纷唱了起来:“等了好久终于等到今天,梦了好久终于把梦实现……”唱完 ...

  8. asp.net 仿微信端菜单设置

    第一步:添加引用文件 <link rel="stylesheet" href="~/assets/css/bootstrap.min.css"> & ...

  9. jqGrid 常用 总结 -1

    这篇文章是因为,我们在做的后台项目,里面有大量的表格统计,这个不可能自己手写,所以其中的表格使用的是jqgrid. 这个插件其实使用起来还是不错的,里面有很多的功能很赞.这篇博客就是自己的的一个记录, ...

  10. Skyline Terra Explorer6.6弹出窗口实现复制功能

    前段时间继续下来的基于Skyline的B/S项目,是基于Terra Explorer6.6实现的.项目中涉及到基于三维模型查询设备编码等操作,从用户友好角度来讲,查询到的设备编码应该要支持复制,方便用 ...