AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 118403
Accepted
p.campbell
p.campbell
Asked: 2010-03-03 10:23:33 +0800 CST2010-03-03 10:23:33 +0800 CST 2010-03-03 10:23:33 +0800 CST

IIS 6 + ASP.NET Web 服务 - DW20 和 stackoverflow 异常

  • 772

考虑一个 ASP.NET SOAP Web 服务,该服务启动良好,但在收到第一次命中时就很难启动。

请注意,这是在测试环境中进行的部署,而不是在 PreProd 环境中。两者都是 Windows 2003 SP3 + IIS 6 + ASP.NET 3.5。都是最新的。

我们看到的行为是:

  • 重新启动站点和应用程序池
  • 应用程序池配置为在网络服务下运行。
  • 正如预期的那样,浏览到 .asmx 和 .wsdl 会正常响应。
  • 向 Web 服务发送一个格式良好的普通 SOAP 请求/普通有效负载
  • 100% CPU 使用率
  • 5秒后,页面请求/站点返回“服务不可用”
  • IIS 日志文件中未创建任何条目(即 c:\windows\system32\logfiles\W3C-foo)
  • 应用程序池最终被停止

对 CPU 造成重创的进程是dw20.exe. 我不确定为什么 Watson 博士会参与其中。

事件日志显示 ASP.NET 运行时错误: 替代文字

任务管理器:

替代文字

事件日志文本:

替代文字

EventType clr20r3、P1 w3wp.exe、P2 6.0.3790.3959、P3 45d6968e、P4 错误管理、P5 1.0.0.0、P6 4b86a13f、P7 24、P8 0、P9 system.stackoverflowexception、P10 NIL。

问题

关于这个 system.stackoverflow 异常可能是什么的任何想法?鉴于环境之间的代码相同,这可能是有效负载问题吗?会不会是配置问题?您可以在异常消息中看到我的 .NET 程序集的名称:“ErrorManagement”

windows-server-2003 web-server iis-6
  • 5 5 个回答
  • 2686 Views

5 个回答

  • Voted
  1. Best Answer
    p.campbell
    2010-03-09T10:52:49+08:002010-03-09T10:52:49+08:00

    这个(可能是唯一的)问题的解决方案:

    • 删除并重新创建所有应用程序池(这可能是多余且不需要的)
    • 删除磁盘上的应用程序文件
    • 重新部署和新的构建和版本的应用程序
    • 确保所有引用都包含在 bin 目录中
    • 2
  2. realMarkusSchmidt
    2010-03-09T11:39:36+08:002010-03-09T11:39:36+08:00

    Stackoverflow 异常是一种特殊情况,因为受影响的应用程序不能再做任何事情(例如记录堆栈跟踪) - 在这种情况下,应用程序池进程 (w3p.exe) 会被操作系统终止。这就是沃森博士/DW20 参与其中的原因。您可以尝试使用带有 SOS 扩展的 WinDbg 调试 DW20 保存的转储(如果您不熟悉该工具集,预计会出现陡峭的学习曲线 - 我希望使用 VS2010 时这会变得更容易)。

    高 CPU 使用率(通常是高内存使用率)是由 DW20 引起的,如果“crash-and-restart-loop”比 DW20 快,因此会累积多个 DW20 进程,这尤其令人讨厌。

    默认的 IIS 应用程序池设置是在短时间内重启崩溃的应用程序不超过 3 次,否则它们将被停止以保护服务器免受 DoS 攻击。

    关于根本原因,stackoverflow:可能是一切......但是这个疯狂的猜测怎么样:由于配置错误,数据库访问失败,生成异常,并且您的应用程序正在将异常记录到数据库中,而没有在异常处理中捕获异常; )

    • 2
  3. Robert
    2012-02-29T15:42:07+08:002012-02-29T15:42:07+08:00

    我遇到了这个问题,发现我有一个 LINQ 语句试图删除一些行。它每天都在失败,所以行数一直在增加。异常实际上已被处理并记录到我创建的表中,因此我在那里找到了它。找到问题表,它是 700k+ 的超重行。我的 LINQ 看起来像这样:

    var db = new DatabaseDataContext();
            var updateQueueLogs = db.UpdateQueueLogs;
    
            List<UpdateQueueLog> listToDelete;
    
            using (new TransactionScope(
                TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.ReadUncommitted }))
            {
                listToDelete = (from updateQueueLog
                                  in db.UpdateQueueLogs
                                where updateQueueLog.CreatedAt < DateTime.Now.AddDays(-7)
                                select updateQueueLog).ToList();
            }
    
            updateQueueLogs.DeleteAllOnSubmit(listToDelete);
    
            db.SubmitChanges();
    

    所以它正在提取完整的对象并获得 OutofMemory 异常。我将此代码更改为存储过程:

    delete from UpdateQueueLogs
     where CreatedAt < DATEADD(day,-7,getdate())
    

    我只是想发布这个,因为如果您没有看到异常,您可能需要检查一些 SQL 表的行数,看看是否有一些 LINQ 语句超时。

    • 1
  4. smoak
    2010-03-03T11:50:05+08:002010-03-03T11:50:05+08:00

    听起来您可能会遇到未处理的异常,这反过来会杀死 asp.net 工作进程。看看这是否有帮助:

    http://support.microsoft.com/?id=911816

    • 0
  5. stolsvik
    2012-07-28T01:16:55+08:002012-07-28T01:16:55+08:00

    在事件查看器中检查错误(通常是应用程序日志)。它在管理工具下。

    此外,@markus 的优点是 IIS 具有相当硬的默认设置“每 Y 时间不超过 X 个线程崩溃”-设置,因此如果您只点击该页面几次出现此类错误,则整个应用程序池都会被删除. 再次检查事件查看器。

    • 0

相关问题

  • 在域加入时将“工作站管理员”添加到本地管理员组

  • 如何轻松地将 DFS 共享移动到新驱动器?

  • 服务器 2003 R2 上的 Cisco VPN 客户端

  • 通过 VPN 更改 Active Directory 密码

  • 如何从 ISA 服务器后面安装 magento 扩展?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve