首页 新闻 会员 周边 捐助

公司网站定期报错,重启IIS后就一切正常,有经验的帮忙一起分析一下!谢谢!

0
悬赏园豆:100 [已解决问题] 解决于 2011-10-11 14:57

以下一大段是一些报错后的信息,所有这些报错在重启IIS后就全部没有了。

【1】


“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------

指定的转换无效。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.InvalidCastException: 指定的转换无效。

源错误:

执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。 

堆栈跟踪:


[InvalidCastException: 指定的转换无效。]
   System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult) +847
   System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries) +113
   System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query) +344
   System.Data.Linq.DataQuery`1.System.Linq.IQueryProvider.Execute(Expression expression) +49
   System.Linq.Queryable.First(IQueryable`1 source) +269
   ZKEShop.BizFacade.ProductSystem.GetProductCataNameByID(Int16 ProductCataID) +455
   ZKEShop.BizFacade.ProductSystem.printProCataIDBro(Int16 productCataID) +332
   YiLeWebSite.product.ProductList.ShowList() +3082
   YiLeWebSite.product.ProductList.Page_Load(Object sender, EventArgs e) +121
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
   System.Web.UI.Control.OnLoad(EventArgs e) +99
   System.Web.UI.Control.LoadRecursive() +50
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627

 

【2】

“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------

事务(进程 ID 56)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Data.SqlClient.SqlException: 事务(进程 ID 56)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。

源错误:

只有在调试模式下进行编译时,生成此未处理异常的源代码才会显示出来。若要启用此功能,请执行以下步骤之一,然后请求 URL:

1. 在产生错误的文件的顶部添加一条“Debug=true”指令。例如:

  <%@ Page Language="C#" Debug="true" %>

或:

2. 将以下的节添加到应用程序的配置文件中:

<configuration>
   <system.web>
       <compilation debug="true"/>
   </system.web>
</configuration>

请注意,第二个步骤将使给定应用程序中的所有文件在调试模式下进行编译;第一个步骤仅使该特定文件在调试模式下进行编译。

重要事项: 以调试模式运行应用程序一定会产生内存/性能系统开销。在部署到生产方案之前,应确保应用程序调试已禁用。 

堆栈跟踪:


[SqlException (0x80131904): 事务(进程 ID 56)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。]
   System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +1950890
   System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +4846875
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +194
   System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2392
   System.Data.SqlClient.SqlDataReader.HasMoreRows() +157
   System.Data.SqlClient.SqlDataReader.ReadInternal(Boolean setTimeout) +197
   System.Data.SqlClient.SqlDataReader.Read() +9
   System.Data.Linq.SqlClient.ObjectReaderBase`1.Read() +49
   System.Data.Linq.SqlClient.ObjectReader`2.MoveNext() +12
   ASP.product_productlist_aspx.__Render__control1(HtmlTextWriter __w, Control parameterContainer) +1487
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +256
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +19
   System.Web.UI.Page.Render(HtmlTextWriter writer) +29
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +99
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1266

 


--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:2.0.50727.3623; ASP.NET 版本:2.0.50727.3618

 

【3】

“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------

事务(进程 ID 56)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Data.SqlClient.SqlException: 事务(进程 ID 56)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。

源错误:

只有在调试模式下进行编译时,生成此未处理异常的源代码才会显示出来。若要启用此功能,请执行以下步骤之一,然后请求 URL:

1. 在产生错误的文件的顶部添加一条“Debug=true”指令。例如:

  <%@ Page Language="C#" Debug="true" %>

或:

2. 将以下的节添加到应用程序的配置文件中:

<configuration>
   <system.web>
       <compilation debug="true"/>
   </system.web>
</configuration>

请注意,第二个步骤将使给定应用程序中的所有文件在调试模式下进行编译;第一个步骤仅使该特定文件在调试模式下进行编译。

重要事项: 以调试模式运行应用程序一定会产生内存/性能系统开销。在部署到生产方案之前,应确保应用程序调试已禁用。 

堆栈跟踪:


[SqlException (0x80131904): 事务(进程 ID 56)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。]
   System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +1950890
   System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +4846875
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +194
   System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2392
   System.Data.SqlClient.SqlDataReader.HasMoreRows() +157
   System.Data.SqlClient.SqlDataReader.ReadInternal(Boolean setTimeout) +197
   System.Data.SqlClient.SqlDataReader.Read() +9
   System.Data.Linq.SqlClient.ObjectReaderBase`1.Read() +49
   System.Data.Linq.SqlClient.ObjectReader`2.MoveNext() +12
   ASP.product_productlist_aspx.__Render__control1(HtmlTextWriter __w, Control parameterContainer) +1487
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +256
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +19
   System.Web.UI.Page.Render(HtmlTextWriter writer) +29
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +99
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1266

 


--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:2.0.50727.3623; ASP.NET 版本:2.0.50727.3618

 

 

大致就是这类的信息,网站的首页是可以登录的,一点击进入内页就有很多类似的报错信息,这个网站有一点特殊,使用的是伪静态页面,也就是在Web.Config中使用如下的配置

      <!-- 咨询列表页面 -->
      <RewriterRule>
        <LookFor>~/cms/MoreArticle-(\d*)-(\d*)-(\d*)-(\d*)-(\d*)-(\d*)-(\d*)(-)?(.*)\.htm</LookFor>
        <SendTo><![CDATA[~/cms/MoreArticle.aspx?PageNo=$1&ArtKindID=$2&ProvinceID=$3&CityID=$4&CityZoneID=$5&SortByDate=$6&SortByStatus=$7&KeyWords=$9]]></SendTo>
      </RewriterRule>

 

希望高手指教

适渊的主页 适渊 | 初学一级 | 园豆:2
提问于:2011-09-27 10:22
< >
分享
最佳答案
0

推荐一篇参考文章:SQL Server死锁总结

收获园豆:50
dudu | 高人七级 |园豆:30948 | 2011-09-27 11:58
其他回答(7)
0

ProductList.ShowList 这个列表里面 用到的SQL语句或页面上有强制转换的地方 比如Convert等 并不是所有的数据有问题 只是某些特殊的数据不能转换就报错了 仔细检查一下把

yyy | 园豆:145 (初学一级) | 2011-09-27 11:01
0

这个可以肯定是代码有问题。跟重启iis,伪静态没有关系。

如果有写错误日志,可以在本地还原错误,进行修改。

写代码的小2B | 园豆:4377 (老鸟四级) | 2011-09-27 11:56

我一开始接手也这样认为,但是当发生这个错误之后,去重新启动IIS,整个网站就全部正常了,不会再报错了

支持(0) 反对(0) 适渊 | 园豆:2 (初学一级) | 2011-09-27 12:54
1

关于死锁的问题

1. 你可以查看你错误日志文件,第一次发生的url是什么,注意是第一次发生,因为后面的错误是因为你之前锁住了的原因造成。

2. 然后在本地用个测试工具开20-30个线程访问该url,并发下看可否重现。

3. 如果重现,开sqlserver activity monitor看是哪些对象锁住了,是哪些sql语句。

4. 基本上这些信息你应该可以定位问题了,不要纠结在为什么重启IIS后就正常,代码有问题,你还是得debug。

收获园豆:20
a-peng | 园豆:28 (初学一级) | 2011-09-27 12:34
1

数据库没关闭

starboychina | 园豆:205 (菜鸟二级) | 2011-09-27 17:59
1

关键的错误是SQL执行时死锁了,第一个错误是linq抛出的很有可能也是数据库错误引起的。如果这样的情况不是很有规律发生的话,我想一般都是SQL语句没优化或数据库设计不合理引起SQL查询期间资源锁冲突,虽然有时候感觉SQL不够优化不是大问题,但一旦并发执行就很容易出现这样的死锁或者数据库超时等等一系列问题,但程序重启后因为所有连接都释放了自然也就没问题了

收获园豆:20
七月霄雨 | 园豆:1282 (小虾三级) | 2011-09-27 20:34
0

可以排除是伪静态页面的问题。你可以使用sql profile跟踪一下,出错时sql的执行情况。肯定有一个sql是有问题的。可以通过sql profile来分析sql占用的cpu和时间来确定。我估计很有可能是有一个死循环,即不停的读取database.当重启IIS时,自然就好了。

Jotin | 园豆:160 (初学一级) | 2011-09-28 23:48
0

在所有的select上加with(nolock)

在所以写操作上加with(rowlock)

收获园豆:10
【当耐特】 | 园豆:645 (小虾三级) | 2011-10-03 23:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册