【发布时间】:2015-11-04 05:42:37
【问题描述】:
我们有一个托管在 IIS 7.5 上的 .net Web 应用程序。 早些时候,这个应用程序在 32 位应用程序池上运行,但前段时间我们已经切换到 64 位应用程序池。
最近用户开始抱怨在闲置 1-2 分钟后他们的会话被终止,我们今天已经确认了这一点。
在 web.config 文件中,会话超时设置为 60 分钟。 我们还在任务管理器中注意到,这个应用程序的 w3wp 进程消耗了大约 2-2.4GB 的内存,所以问题可能是应用程序池正在尝试回收一些内存?
回收设置为有限时间段 21:00 和 4:00
会话出现此问题的原因可能是什么?
编辑:
我检查了一些计数器并进行了基本的内存转储分析,但没有发现任何问题。
在转储 eeheap 分析中,我只看到每个堆大约 10-30MB 的第 2 代对象,我有 24 个对象
堆0(0000000003083a90)代0开始于0x00000000fff568b8代1点开始于0x00000000ffa6acf0第2点开始于0x00000000ff471000短暂的段分配上下文:无段开始分配的大小00000000ff470000 00000000ff471000 00000000ffff8de0 0xb87de0(12090848)大于0x00000006ff471000段对象堆BEGIN开始分配的大小00000006ff470000 00000006ff471000 00000006ff7495c8 0x2d85c8(2983368) 堆大小:大小:0xe603a8 (15074216) 字节。
堆1(00000000030889c0)代0开始于0x000000013fc36ed8代1点开始于0x000000013f949348第2点开始于0x000000013f471000短暂的段分配上下文:无段开始分配的大小000000013f470000 000000013f471000 000000014035e7b8 0xeed7b8(15652792)大于0x0000000703471000段对象堆BEGIN开始分配的大小0000000703470000 0000000703471000 00000007035c5d58 0x154d58(1396056) 堆大小:大小:0x1042510 (17048848) 字节。
编辑:2015-08-19 09:00 这些是 2015-08-19 09:00 的计数器
让我担心的是为什么任务管理器中的内存显示为 2.5GB,而所有堆中的字节数仅显示约 100MB,为什么私有字节 (216MB) 比所有堆中的字节大? 当前的负载是这台服务器上大约 40 个用户。
编辑 2015-08-19 14:09
一段时间后,我发现程序集可能存在问题。 当我在没有 !dda 命令的 .NET 4.5 上时,如何使用 windbg 进行检查?
【问题讨论】:
-
你那里有非托管代码吗?
-
您是否在负载平衡的基础架构中托管网站?您使用的是 InProc 会话还是 Sql?
-
我认为这个应用程序中没有非托管代码。在负载平衡基础架构方面,我们使用默认的 windows 功能,两台服务器托管此应用程序。是的,会话模式是 InProc。
-
您是否在任务管理器中确认进程实际上以 64 位模式运行(在每个服务器上)?您没有更改空闲超时时间吗?
-
是的,该进程肯定在 64 位模式下运行。我很确定超时设置正确(我明天会发布一些设置)。当大约有 30-40 个用户时,一切似乎都可以正常工作,但后来当有大约 70-90 个用户时,就会出现这些会话问题。
标签: asp.net .net session iis memory