Chinaunix首页 | 论坛 | 博客
  • 博客访问: 57665
  • 博文数量: 9
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 119
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-23 18:05
文章分类

全部博文(9)

文章存档

2014年(2)

2013年(7)

我的朋友

分类: PHP

2014-04-08 19:07:40

系统环境
windows server 2003
php 5.3.10
apache 2.2.21

   系统上装了WAMP ,部署了一套用php开发的来演示的系统,偶然间发现登陆这个系统后,apache会时不时的挂掉,重启apache时需要老半天才能启动。而在其他环境下,比如linux ,我自己电脑的 win8 系统上也都没有问题。

   乍看上去很奇怪,无奈有问题就要解决,于是各种找问题的原因,然后发现apache挂起的时候,php的session文件发生死锁了,然后又各种找死锁发生的原因。找了半天发现貌似没有地方会发生死锁,但session确实是死锁了,于是在几个常用的处理ajax的php文件中,加了session_write_close()来直接结束session。情况有了好转,但还是会死锁。再继续找问题,最后对比了几个php文件,发现其中调用exec的那个页面会引起apache挂起,而其他的则正常,顿时觉得有了眉目,然后各种google baidu,看到网上也有人遇到这样问题,说是 如果有另外的线程在等待一个文件锁时去执行exec()函数,exec 函数会一直阻塞在那里。这样就解释通了,先是一个页面打开了session文件,然后又来了一个请求,而处理这个请求的脚本需要同一个session文件,而之前的那个页面又执行了exec, 然后一直阻塞,然后apache就挂起了,session也被锁住了。再看前辈们发的帖子,貌似这是apache的问题,而且只在win32下会出现。解决的方法就是在exec前先session_write_close(), exec后如果还需要修改session的话再session_start()。事已至此整个问题也算是解决了,至于这个问题会在哪些系统上,哪些版本的apache中存在 也不去深究了,搞web开发水也深啊,适可而止……


参考:

阅读(2477) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~