1.概述session死锁
2.问题
单页面上线,突然发现偶尔会出现有些请求会延迟到1s的时间,这些请求偶尔会延迟,偶尔不会延迟。# 3.排查 # 3.1.看瓶颈时间 网络请求有很多种情况,dns延迟,路由延迟,或者只是网管看你不顺眼。从后台分析的日志看,延迟更多是由于后台处理导致的,而不是网络问题。 # 3.2.看数据库时间 后台有这么多操作要处理,怎么知道是卡在哪个地方,一般会卡在数据库处理上,可是看日志又不见数据库的延迟太多,只占用了6ms。 # 3.3.profiling 放出大招,使用xhprof测量出每个函数具体耗费的时间。从数据中可以看出,1s的处理延迟中,大概有93%时间耗费在一个叫CI_Session_redis_driver的__get_lock上面。看来这个问题是跟session的死锁有关。 # 4.解决 ci上也探讨了有关session死锁的问题,解决的方案很简单,必要的时候才加载session库,然后用完立即关。
原来的代码是后台一启动请求时就load session库,然后关闭请求才关session库改为需要用到session时才打开session库,每次用完session就马上关闭。改完以后心里爽yy的,再也很少看到延迟1s的请求了。
- 本文作者: fishedee
- 版权声明: 本博客所有文章均采用 CC BY-NC-SA 3.0 CN 许可协议,转载必须注明出处!