w3wp.exe崩溃IIS 8.5经典ASP页面

时间:2018-03-08 17:56:47

标签: mysql asp-classic iis-8.5

我正在努力解决以下问题一段时间,并尝试了各种谷歌搜索的许多建议。

我们在 Windows服务器2012 R2 上使用 IIS 8.5

经典ASP 中运行一个网站

我们使用 MySQL

的网站

我们在白天但在不同的时间发生这种情况,我怀疑这是在网站繁忙或许多查询时。 (不确定)

事件查看器(应用程序)中,我们得到 Active Server Pages错误

当发生这种情况时,尝试向MySQL发出查询的页面只会响应错误500(内部错误)

有几种类型的错误,下面是一些:

以下错误可能发生在许多不同的页面上,这只是最后一个的例子。

Error: File /update-project.asp  CreateObject Exception. The CreateObject of '(null)' caused exception C0000005..

还有这种应用程序错误。这是最后一个例子:

Faulting application name: w3wp.exe, version: 8.5.9600.16384, time stamp: 0x52157ba0

Faulting module name: ntdll.dll, version: 6.3.9600.18895, time stamp: 0x5a4b127e

Exception code: 0xc0000374

Fault offset: 0x000e6214

Faulting process id: 0x2cd0

Faulting application start time: 0x01d3b5ffb8b88f62

Faulting application path: C:\Windows\SysWOW64\inetsrv\w3wp.exe

Faulting module path: C:\Windows\SYSTEM32\ntdll.dll

Report Id: c17383f3-21f4-11e8-80f1-0cc47adae555

Faulting package full name:

Faulting package-relative application ID:

我已尝试更改应用程序池设置中其他帖子的建议,增加MySQL缓冲区大小等等。

一旦发生这种情况,我就会进行 ApplicationPool回收,问题就会消失。

我已下载 DebugDiag 2 并为 w3wp.exe 进程创建了规则,当发生这种情况时,会记录一些转储文件。

然后我打开分析仪并分析它们,但我似乎没有看到如何阅读或解释它们可能是什么问题。

有没有办法可以发布或提供这些转储文件给某人试图帮助我,因为我正在把我的头发拉出来。

我期待任何能够帮助我或引导我走向正确方向的人的任何回应,甚至指出我尝试其他事情。

提前致谢

以下是连接到MySQL并使用FileSystemObject以及从外部API获取数据的3个示例。这些样本中的任何内容看起来都不正确,因为它不会一直发生,因为它不会一直发生,可以在我的任何页面上,而不是总是相同的。

sConnection = "DRIVER={MySQL ODBC 5.3 ANSI Driver}; SERVER=localhost; PORT=3306;" &_
"DATABASE=accufilemain; USER=myuser; PASSWORD=mypassword; OPTION=3;"
Set con = Server.CreateObject("ADODB.Connection")
con.Open(sConnection)

sql_check = "Select * From clients Where id = " & ClientID
Set RS = con.Execute(sql_check)
If Not RS.EOF Then

'''Get my field values
   ValABC = RS("CustomerID")

End If
State = RS.State
If State <> 0 Then
    RS.Close
    Set RS = Nothing
End If

con.Close
Set con = Nothing

sFolder1 = "C:\inetpub\wwwroot\mywebsite\files\" & ClientID

Set fs=CreateObject("Scripting.FileSystemObject") 
If Not fs.FolderExists(sFolder1) Then 
fs.CreateFolder(sFolder1) 
End If

Set fs = nothing



GetURL = ""
set objHttp = Server.CreateObject("Msxml2.ServerXMLHTTP") 
objHttp.open "GET", "otherwebsite/api/1.1.2/Customer/Get?$skip=" & MyVAL4 & "&$top=100&apikey=" & Myapikey & "&CompanyId=" & MyCompanyId, false
objHttp.setRequestHeader "Authorization", "Basic " & MyBase64AuthDetails 
objHttp.setRequestHeader "Content-Type", "application/json" 
objHttp.Send
GetURL = objHttp.ResponseText

Set objHttp = Nothing

'''' Then I can search GetURL for what I need as a string.

2 个答案:

答案 0 :(得分:0)

我有机会分析转储,这就是我找到的。

崩溃线程31的callstack如下。

0:031> kL
# ChildEBP RetAddr  
00 026ce798 778c8d78 ntdll!RtlReportCriticalFailure+0x83
01 026ce7a8 778c9629 ntdll!RtlpHeapHandleError+0x1c
02 026ce7d8 77866035 ntdll!RtlpLogHeapFailure+0xa1
03 026ce830 7174ecfa ntdll!RtlFreeHeap+0x44485
04 026ce844 717a0100 msvcr120!free+0x1a
05 026ce890 7184bab0 msvcr120!setlocale+0x186
06 026ce8bc 7184a8c3 myodbc5a!SQLFreeHandle+0x1a362
07 026ce8dc 71df704a myodbc5a!SQLFreeHandle+0x19175
.
.
.

如前所述,这是一个明显的堆腐败问题。更具体地说,它是通过调用“double free”操作来实现的,在该操作中你试图释放已经空闲的内存块。

仔细观察调用堆栈,我可以看到这是由“myodbc5a”模块引起的。这是一个Oracle模块。

0:031> lmvm myodbc5a
Browse full module list
start    end        module name
71830000 71d6b000   myodbc5a C (export symbols)       myodbc5a.dll
Loaded symbol image file: myodbc5a.dll
Image path: C:\Program Files (x86)\MySQL\Connector.ODBC 5.3\myodbc5a.dll
Image name: myodbc5a.dll
Browse all global symbols  functions  data
Timestamp:        Mon Jul 17 23:53:56 2017 (596D9464)
CheckSum:         00000000
ImageSize:        0053B000
File version:     5.3.9.0
Product version:  5.3.9.0
File flags:       0 (Mask 3)
File OS:          40004 NT Win32
File type:        2.0 Dll
File date:        00000000.00000000
Translations:     0409.04e4
CompanyName:      Oracle Corporation
ProductName:      Connector/ODBC 5.3
InternalName:     myodbc5a
OriginalFilename: myodbc5a.dll
ProductVersion:   5, 3, 9, 0
FileVersion:      5, 3, 9, 0
PrivateBuild:     Production
SpecialBuild:     GA release
FileDescription:  MySQL ODBC 5.3 ANSI Driver
LegalCopyright:   Copyright (c) 1995, 2013, Oracle and/or its affiliates.
LegalTrademarks:  MySQL, MyODBC, Connector/ODBC are trademarks of Oracle Corporation
Comments:         provides core driver functionality

您现在有2个选项可以解决此问题。

  1. 联系Oracle支持人员并说明您遇到的与“myodbc5a”dll相关的问题,并检查他们是否在最新版本中解决了此问题

  2. 根据 - https://forums.mysql.com/read.php?37,661803,661993#msg-661993

  3. 将连接器“myodbc5a”降级为5.3.4

    如果您有任何其他问题,请与我们联系。

答案 1 :(得分:0)

我已升级到最新的所有相关MySQL更新。然后我将连接器降级为5.3.4连接器并将其放置几周以查看并且问题已经消失。我没有遇到过一个问题。

相关问题