系统环境
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开发水也深啊,适可而止……
参考:
阅读(2483) | 评论(0) | 转发(0) |