微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

asp.net – dbo.TempGetStateItemExclusive3重复调用

我正在调查一个使用sql Server来管理会话的网站的问题.该网站是基于sitecore CMS的asp.net webforms.我们在各种环境中具有相同的代码,例如质量保证,分期和生产.

在生产中,我们正在看到的是,定期地,我们可以快速上升cpu使用率,并不会以任何方式与服务器通信.随着这个cpu的尖峰,我们看到了网络I / O的相应的尖峰.

我们的监控软件不区分流量到互联网和流量到DB服务器;然而,我们在数据库服务器上看到的数据是asp数据库中每秒数百次调用dbo.TempGetStateItemExclusive3,所有这些都是相同的会话ID,没有相应的页面请求数量进入Web服务器.

使用相同的代码和配置,我们根本看不到其他环境的这种行为.我们也看不到其他会话ID,只是这一个具体的一个.

数据库删除行简单地导致它被重新创建为具有相同的会话ID.

UPDATE

我在事件日志中发现了这个错误

Violation of PRIMARY KEY constraint 'PK__ASPState__C9F49290145C0A3F'. Cannot insert duplicate key in object 'dbo.ASPStateTempSessions'. The duplicate key value is (sessionidwiththeproblem). The statement has been terminated.
Stack trace:

at System.Data.sqlClient.sqlConnection.OnError(sqlException exception,Boolean\ breakConnection)
at System.Data.sqlClient.TdsParser.ThrowExceptionAndWarning()
at System.Data.sqlClient.TdsParser.Run(RunBehavior runBehavior,sqlCommand\ cmdHandler,sqlDataReader dataStream,BulkcopySimpleResultSet bulkcopyHandler,\ TdsParserStateObject stateObj)
at System.Data.sqlClient.sqlCommand.FinishExecuteReader(sqlDataReader ds,\ RunBehavior runBehavior,String resetoptionsstring)
at System.Data.sqlClient.sqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,Boolean returnStream,Boolean async)
at System.Data.sqlClient.sqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,String method,DbAsyncResult result)
at System.Data.sqlClient.sqlCommand.InternalExecuteNonQuery(DbAsyncResult\ result,String methodName,Boolean sendToPipe)
at System.Data.sqlClient.sqlCommand.ExecuteNonQuery()
at System.Web.SessionState.sqlSessionStateStore.sqlExecuteNonQueryWithRetry(sqlCommand\ cmd,Boolean ignoreInsertPKException,String id)

任何人有什么想法如何尝试创建重复的会话ID?

解决方法

我们遇到类似的问题,具有以下配置:

> IIS 7.5
> .NET Framework 4.0
> Windows 2008(在IIS和DB服务器上)
>由ASPState数据库管理的会话

问题是有时一些会话仍被锁定到ASPState数据库中,每秒锁定会话的dbo.TempGetStateItemExclusive3每秒钟会产生数百个调用.

IIS服务器上的cpu最终会随着锁定会话的次数而上升.临时解决方案是回收应用程序池.

进一步并启用IIS服务器上的跟踪,然后分析跟踪,我们注意到,只要EXECUTE_REQUEST_HANDLER模块出现问题(即导致500内部服务器错误的网络连接问题),则下一个模块为RELEASE_REQUEST_STATE (并且应该解锁会话)未被执行.因此,会议保持锁定.

它发现是IIS的一个错误,我们通过在web.config中将uploadReadAheadSize的值更改为0来修复它:

<system.webServer>
  <serverRuntime uploadReadAheadSize="0" />
</system.webServer>

UploadReadAheadSize属性建立Web服务器将读入缓冲区并传递给ISAPI扩展的字节数.每发生一次客户端请求.

也可以看看:
ManagedPipelineHandler for an AJAX POST crashes if an IE9 user navigates away from a page while that call was in progress

原文地址:https://www.jb51.cc/aspnet/246077.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐