我已经为以下问题苦苦挣扎了一段时间,并尝试了各种谷歌搜索中的许多建议。
我们有一个网站在Windows Server 2012 R2上使用IIS 8.5在经典ASP中运行
我们将网站与MySQL一起使用
我们在白天但在不同的时间发生这种情况,我怀疑这是在网站繁忙或许多查询的时候。( 不确定 )
在事件查看器(应用程序)中,我们得到活动服务器页面错误。
发生这种情况时,尝试对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:WindowsSysWOW64inetsrvw3wp.exe
Faulting module path: C:WindowsSYSTEM32ntdll.dll
Report Id: c17383f3-21f4-11e8-80f1-0cc47adae555
Faulting package full name:
Faulting package-relative application ID:
我已经尝试按照应用程序池设置中的其他帖子的建议更改很多内容,增加MySQL缓冲区大小等等。
一旦发生这种情况,我就会进行应用程序池回收,问题就会消失。
我已经下载了DebugDiag 2并为w3wp.exe进程创建了一个规则,当这种情况发生时,记录了一些转储文件。
然后我打开分析器并分析它们,但我似乎不知道如何弄清楚如何阅读或解释它们可能是问题所在。
有没有办法我可以发布或提供这些转储文件供某人尝试帮助我,因为我正处于拔头发的地步。
我期待任何可以帮助我或引导我朝着正确方向前进,甚至指导我尝试其他事情的人的任何回应。
提前致谢
以下是连接到MySQL和使用文件系统对象以及从外部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:inetpubwwwrootmywebsitefiles" & 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.
我有机会分析转储,这就是我发现的。
崩溃线程 31 的调用堆栈如下所示。
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
.
.
.
如前所述,这是堆损坏问题的明显案例。更具体地说,它是通过调用"双重释放"操作发生的,在该操作中,您尝试释放已经空闲的内存块。
仔细观察调用堆栈,我可以看到这是由"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)MySQLConnector.ODBC 5.3myodbc5a.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 个选项来解决此问题。
联系 Oracle 支持并说明您遇到的有关"myodbc5a"dll 的问题,并检查他们是否在最新版本中解决了此问题
按照 - https://forums.mysql.com/read.php?37,661803,661993#msg-661993 将连接器"myodbc5a"降级到 5.3.4
如果您有任何其他问题,请告诉我。
我已经升级到所有相关MySQL更新中的最新版本。然后我将连接器降级为5.3.4,并将其放置几周以查看,问题已经消失。从那以后,我没有遇到过一个问题。