asp.net mvc 请求缓慢原因之一(session影响并发)
2015-02-27 13:36
99 查看
现象:在网站中,打开一个页面耗时比较严重,进而打开另一个页面进行登录验证,发现多个http请求没有响应和返回值。
在网上所查资料,偶然发现是由于session的锁机制。
原来Session实现了Reader/Writer的锁机制:
当页面对Session具有可写功能(即页面有<%@ Page EnableSessionState="True" %>标记),此时直到请求完成该页面的Session持有一个写锁定。
当页面对Session具有只读功能(即页面有<%@ Page EnableSessionState="ReadOnly" %>标记),此时知道请求完成该页面的Session持有一个读锁定。
读锁定将阻塞一个写锁定;读锁定不会阻塞读锁定;写锁定将阻塞所有的读写锁定。这就是为什么两个框架中的同一个页面都去写同一个Session时,其中一个要等待另一个(稍快的那个)完成后,才开始写。
解决方案:
1.在Global.asax设置session会话状态
public override void Init() {
this.PostAuthenticateRequest += (sender, e) =>
HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.ReadOnly);
base.Init();
}
2.在单独页面中设置session会话状态
<%@ Page EnableSessionState="ReadOnly" %>
在网上所查资料,偶然发现是由于session的锁机制。
原来Session实现了Reader/Writer的锁机制:
当页面对Session具有可写功能(即页面有<%@ Page EnableSessionState="True" %>标记),此时直到请求完成该页面的Session持有一个写锁定。
当页面对Session具有只读功能(即页面有<%@ Page EnableSessionState="ReadOnly" %>标记),此时知道请求完成该页面的Session持有一个读锁定。
读锁定将阻塞一个写锁定;读锁定不会阻塞读锁定;写锁定将阻塞所有的读写锁定。这就是为什么两个框架中的同一个页面都去写同一个Session时,其中一个要等待另一个(稍快的那个)完成后,才开始写。
解决方案:
1.在Global.asax设置session会话状态
public override void Init() {
this.PostAuthenticateRequest += (sender, e) =>
HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.ReadOnly);
base.Init();
}
2.在单独页面中设置session会话状态
<%@ Page EnableSessionState="ReadOnly" %>
相关文章推荐
- 高并发下CURL请求缓慢原因及解决方…
- Tuxedo不能全部处理并发的客户端,请求是什么原因?
- session存放数据过大导致频繁GC影响服务器性能以及高并发问题解决
- 分布式高并发服务器做请求分发,session共享(nginx+tomcat+redis)
- 在ASP.NET中使用IHttpHandler处理请求(如自实现AJAX)时,无法获得Session(或者说是Session 为 null)的原因及解决方法
- session_write_close() PHP在访问Session数据时存在互斥情况,导致Ajax请求响应缓慢
- android 保持同一Session网络请求
- Mysql并发时经典常见的死锁原因及解决方法
- IOS网络请求之NSURLSession使用
- 弹出窗口Session丢失,是什么原因?有没有办法解决?
- oracle EBS中使用PLSQL提交"关闭离散"并发请求
- Nginx 高并发TCP请求Linux系统参数配置
- Java并发-ConcurrentModificationException原因源码分析与解决办法
- 当Ajax请求遇到Session超时
- Oracle Form中调用并发请求生成报表并输出为PDF的方法
- 一个高并发请求的算法
- 腾讯管家与本地运行的jquery冲突,影响页面请求速度
- Oracle E-Business Suite并发请求的优先级(Concurrent Request Priority)
- Golang适合高并发场景的原因分析
- Struts2中request,session,application三种请求方法