我们定期收到用户关于以下服务器错误的报告。
[OutOfMemoryException: Exception of type System.OutOfMemoryException was thrown.]
[HttpException (0x80004005): Unable to serialize the session state. Please note that non-serializable objects or MarshalByRef objects are not permitted when session state mode is ‘StateServer’ or ‘SQLServer’
一旦处于出现此错误的状态,无论这些错误是否可在本地重现,似乎都会受到打击或遗漏。如果是这样,那么我们通常可以将它们复制几分钟,但不是在每一个页面上都可以复制。这通常会自行逐渐减少,并且通常在我们重新与用户联系时自行解决。
Web 服务在工作时间内有大约 90-100 个活动连接。此服务器上唯一的其他站点是此站点的暂存版本,它很少受到攻击。会话状态存储在与应用程序数据库相同的 SQLServer 实例上,应用程序数据库位于相当大的虚拟机集群上。在此过程中,Web 服务器或 SQLServer 似乎都没有被征税(无论是处理器还是内存)。
哪些页面出错的分布似乎与每个页面的正态分布相当。就发生时间而言,似乎没有任何模式。我们在周末的平均错误确实较少(这与正常的网站负载相关),但即使这似乎也不一致。
记录的错误与记录的任何类型的性能监视器事件之间似乎也没有关联。这包括一系列性能计数器,包括:
.NET CLR Jit(w3wp)\notal # of IL Bytes Jitted
.NET CLR Jit(w3wp)\IL Bytes Jitted / sec
.NET CLR Jit(w3wp)\% Time in Jit
.NET CLR Jit(w3wp)\# of Methods Jitted
.NET CLR Jit(w3wp)\# of IL Bytes Jitted
ASP.NET Apps v1.1.4322(__Total__)\Requests Failed
ASP.NET Apps v1.1.4322(__Total__)\Errors Unhandled During Execution/Sec
ASP.NET Apps v1.1.4322(__Total__)\Errors Unhandled During Execution
ASP.NET Apps v1.1.4322(__Total__)\Cache Total Turnover Rate
ASP.NET Apps v1.1.4322(__Total__)\Errors During Preprocessing
ASP.NET Apps v1.1.4322(__Total__)\Errors During Execution
ASP.NET Apps v1.1.4322(__Total__)\Requests Executing
ASP.NET Apps v1.1.4322(__Total__)\Requests Total
ASP.NET Apps v1.1.4322(__Total__)\Errors Total
ASP.NET Apps v1.1.4322(__Total__)\Sessions Abandoned
ASP.NET Apps v1.1.4322(__Total__)\Errors Total/Sec
ASP.NET Apps v1.1.4322(__Total__)\Anonymous Requests/Sec
ASP.NET Apps v1.1.4322(__Total__)\Requests/Sec
ASP.NET Apps v1.1.4322(__Total__)\Session SQL Server connections total
ASP.NET Apps v1.1.4322(__Total__)\Cache Total Hit Ratio
ASP.NET v1.1.4322\Requests Current
ASP.NET v1.1.4322\Request Execution Time
Memory\Pages/sec
Bytes Total/sec
PhysicalDisk(_Total)\Avg. Disk Queue Length
Processor(_Total)\% Processor Time
Web Service Cache\File Cache Hits %
Web Service Cache\File Cache Misses
Web Service Cache\File Cache Hits
Web Service(_Total)\Current Connections
Web Service(_Total)\Post Requests/sec)
我可以在日志中看到的唯一模式与这些错误的发生无关,但是我可以看到的唯一模式。查看 perfmon 日志,我们看到“Total # of IL Bytes Jitted”、“IL Bytes Jitted / sec”、“% Time in Jit”、“# of Methods Jitted”和“# of IL Bytes Jitted” " 暂存站点的计数器(不应获得任何流量)在 20-50 分钟内不会提取数据,之后“IL Bytes Jitted / sec”会立即出现峰值,“% Time”会出现跳跃在 Jit 中" 2-20 分钟,主站点最高可达 99%。
如果有人对可能导致此问题的原因有任何想法,或者有过类似问题的经验,我将不胜感激。
谢谢!