My server is quad-proc, for whatever reason only 1 CPU is used to process ASP page. I see 100 CPU utilization on 1 processor and others are idle.
I run DebugDiag and it come up with
Detected possible blocking or leaked critical section at 0x03391ef4 owned by thread 74 in dllhost.exe__IIS Out-Of-Process Pooled Applications__PID__4132__Date__06_09_2009__Time_01_03_50PM__953__Manual Dump.dmp
Impact of this lock
78.57% of threads blocked
(Threads 16 17 18 19 20 21 22 23 24 25 26 29 30 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118)
The following functions are trying to enter this critical section
ASP!CHitObj::ViperAsyncCallback+11c
The following module(s) are involved with this critical section
C:\WINNT\system32\inetsrv\ASP.DLL from Microsoft Corporation
Stack for thread 74 is below
Thread 74 - System ID 3664
| Entry point |
comsvcs!STAThread::STAThreadWorker |
| Create time |
6/8/2009 3:18:01 PM |
| Time spent in user mode |
0 Days 00:02:27.375 |
| Time spent in kernel mode |
0 Days 00:01:38.421 |
| Function |
Source |
| vbscript!rtConcatBstr+51 |
|
| vbscript!VbsVarConcat+76 |
|
| vbscript!CScriptRuntime::Run+1795 |
|
| vbscript!CScriptEntryPoint::Call+5c |
|
| vbscript!CScriptRuntime::Run+1f08 |
|
| vbscript!CScriptEntryPoint::Call+5c |
|
| vbscript!CScriptRuntime::Run+1f08 |
|
| vbscript!CScriptEntryPoint::Call+5c |
|
| vbscript!CSession::Execute+b4 |
|
| vbscript!COleScript::ExecutePendingScripts+13e |
|
| vbscript!COleScript::SetScriptState+150 |
|
| ASP!CActiveScriptEngine::TryCall+15 |
|
| ASP!CActiveScriptEngine::Call+4d |
|
| ASP!CallScriptFunctionOfEngine+48 |
|
| ASP!ExecuteRequest+19e |
|
| ASP!Execute+17e |
|
| ASP!CHitObj::ViperAsyncCallback+452 |
|
| ASP!CViperAsyncRequest::OnCall+3f |
|
| comsvcs!STAActivityWorkHelper+a |
|
| OLE32!EnterForCallback+6a |
|
| OLE32!SwitchForCallback+12f |
|
| OLE32!PerformCallback+50 |
|
| OLE32!CObjectContext::InternalContextCallback+10d |
|
| OLE32!CObjectContext::DoCallback+1a |
|
| comsvcs!STAActivityWork::DoWork+75 |
|
| comsvcs!STAThread::STAThreadWorker+423 |
|
| KERNEL32!BaseThreadStart+52 |
|
| ASP request executing on thread |
74 |
| GET request for |
/MC/PTB/V7/Agent/myMain.asp |
| Request alive for |
00:01:34 |
| QueryString |
Mode |
| Request mapped to |
D:\M\MC\PTB\V7\AGENT\MYMAIN.ASP |
| ASP Application |
/LM/W3SVC/1/Root |
| ASP Template |
D:\M\MC\PTB\V7\AGENT\MYMAIN.ASP |
| Function Scope |
Line Of Code |
Source File |
Line Number |
| AddBase64Chars |
strOutput = strOutput & Mid( strAlphabet, iChar + 1, 1 ) |
D:\MVS\MC\PTB\BASE64.ASP |
25 |
| Base64Encode |
AddBase64Chars strOutput, accum, cAccumulated |
D:\MVS\MC\PTB\BASE64.ASP |
51 |
| Global Scope |
Base64Encode ssv_policyXML, ssv_EncodedXML |
D:\M\MC\PTB\V7\AGENT\MYMAIN.ASP |
884 |
2 issues:
1. Why would requests be serialized to single thread?
2. What is causing this high CPU utilization. Source code for Base64 is below?
Thanks,
G
<%
'//////////////////////////////////////////////////////////////
'// Base64 Encode function
'//
Function AddBase64Chars( ByRef strOutput, ByVal accum, ByVal cAccumulated )
' The Base64 alphabet lookup table
Dim strAlphabet
strAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" & _
"abcdefghijklmnopqrstuvwxyz" & _
"0123456789+/"
Dim i, cToOutput
' Output characters is always input characters plus one
cToOutput = cAccumulated + 1
For i = 1 To cToOutput
' Extract 6 bits of the accumulator at the appropriate position
Dim iChar
iChar = (accum \ (64 ^ (4 - i))) And 63
' Add Base64 character to output
strOutput = strOutput & Mid( strAlphabet, iChar + 1, 1 )
Next
' Add padding
For i = 1 To 4 - cToOutput
strOutput = strOutput & "="
Next
End function
Function Base64Encode( ByVal strInput, ByRef strOutput )
strOutput = ""
Dim i
Dim accum, cAccumulated
accum = 0
cAccumulated = 0
For i = 1 To LenB( strInput )
' Shift ASCII of input character up appropriate # of places and OR
' into the accumulator
Dim ch
ch = AscB( MidB( strInput, i, 1 ) )
ch = ch * (256 ^ (2 - cAccumulated))
accum = accum Or ch
cAccumulated = cAccumulated + 1
If cAccumulated = 3 Then
AddBase64Chars strOutput, accum, cAccumulated
cAccumulated = 0
accum = 0
End If
Next
If cAccumulated > 0 Then
AddBase64Chars strOutput, accum, cAccumulated
End If
End function
%>