2011-10-27 9 views
5

मुझे लगभग 500 क्लाइंट्स के साथ डब्ल्यूसीएफ सेवा मिली है जो हर 3 मिनट में कॉल करता है। जब सेवा चालू होती है तो lsass.exe प्रक्रिया मेरे CPU का 95% उपयोग कर रही है।
मैंने एक परीक्षण किया और जब भी कोई क्लाइंट कॉल करता है, तो lsass CPU% लगभग 7 या उससे भी अधिक तक चला जाता है। तो मैं समझता हूं कि सर्वर एक कॉल पर धीमा क्यों कर रहा है जब एक ही समय में दो सौ कॉल भेज रहे हैं।
जो मुझे समझ में नहीं आता है, यही कारण है कि lsass का उपयोग क्यों किया जा रहा है? मैं प्रमाण पत्र का उपयोग कर संदेश स्तर सुरक्षा के साथ WSHttp बाइंडिंग के आधार पर एक कस्टम बाइंडिंग का उपयोग कर रहा हूं। इंस्टेंस/कंसुरेंसी पेर्कल/सिंगल है (हालांकि मैंने दो बदलावों के बिना दोनों के संयोजन को काफी बदलाव नहीं किया है), और यह आईआईएस 6 में होस्ट किया गया है।
मेरा अनुमान है कि प्रत्येक कॉल के लिए, lsass प्रमाण पत्र की जांच कर रहा है, और यह किसी भी तरह से बहुत सी सीपीयू लेता है? क्या कोई रास्ता है जिससे मैं इसे कम कर सकता हूं? मुझे पता है कि लोगों ने डब्ल्यूसीएफ सेवाओं को बहुत बड़ी संख्या में बढ़ा दिया है, तो यह क्या है कि मैं गलत कर रहा हूं?मुझे सुरक्षा के साथ डब्ल्यूसीएफ स्केलिंग नहीं समझा/lsass.exe CPU% इतना उच्च क्यों है?

पीएस कुछ अतिरिक्त जानकारी: मैं पर अनुरेखण है और पहली बात यह आमतौर पर लॉग होता है कि

<TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Warning"> 
    <TraceIdentifier>http://msdn.microsoft.com/en-US/library/System.ServiceModel.Activation.WebHostNoCBTSupport.aspx</TraceIdentifier> 
     <Description>Extended protection is not supported or not enabled on this platform. Please install the appropriate patch and enable it if you want extendedProtection support for https with windows authentication.</Description> 
     <AppDomain>/LM/W3SVC/920256058/Root/WCFServices/smt-7-129642078492968750</AppDomain> 
     <Source>System.ServiceModel.Activation.MetabaseSettingsIis6/17731154</Source> 
</TraceRecord> 

है और वहाँ भी का एक समूह है:

http://msdn.microsoft.com/en-US/library/System.ServiceModel.Security.SecuritySessionDemuxFailure.aspx 
The incoming message is not part of an existing security session. 

और

<ExceptionType>System.ServiceModel.Security.SecurityNegotiationException, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType> 
<Message>Cannot find the negotiation state for the context 'uuid-4caa56ff-3d38-4905-9151-ce12acdd676c-6778'.</Message> 

और

<NegotiationTokenAuthenticator>System.ServiceModel.Security.TlsnegoTokenAuthenticator</NegotiationTokenAuthenticator> 
<AuthenticatorListenUri>http://myserviceendpoint</AuthenticatorListenUri> 
<Exception>System.ServiceModel.Security.SecurityNegotiationException: Cannot find the negotiation state for the context 'uuid-4caa56ff-3d38-4905-9151-ce12acdd676c-6778'.at System.ServiceModel.Security.NegotiationTokenAuthenticator`1.ProcessRequestCore(Message request) at System.ServiceModel.Security.NegotiationTokenAuthenticator`1.NegotiationHost.NegotiationSyncInvoker.Invoke(Object instance, Object[] inputs, Object[]&amp;amp; outputs)</Exception> 

मेरा आईआईएस लॉग पूर्ण है सेवा config:

200 0 64 
500 0 64 
200 0 1236 
500 0 1236 

अधिकतर पिछले दो

संपादित के एल

<?xml version="1.0"?> 
<configuration> 
    <configSections> 
    <section name="dataConfiguration"  type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings,  Microsoft.Practices.EnterpriseLibrary.Data"/> 
    </configSections> 
    <connectionStrings> 
    <add name="conString" connectionString="Data Source=source1;Failover  Partner=source2;database=myDatabase;Integrated Security=false;uid=userName;pwd=password"  providerName="System.Data.SqlClient"/> 
    </connectionStrings> 
    <dataConfiguration defaultDatabase="conString"/> 
    <system.web> 
    <compilation debug="true" targetFramework="4.0"/> 
    <authorization> 
     <allow users="?"/> 
    </authorization> 
    </system.web> 

    <system.serviceModel> 
    <services> 
     <service name="ServiceLibrary.Service"> 
     <endpoint address="ws" binding="wsHttpBinding"  bindingConfiguration="WSHttpBinding_IService" 
      name="WSHttpEndpoint_IService"  contract="ServiceLibrary.IService" /> 
     <endpoint address="cs1" binding="customBinding"  bindingConfiguration="CustomBinding_IService" 
      name="CustomEndpoint_IService"  contract="ServiceLibrary.IService" /> 
     <endpoint address="basic" binding="basicHttpBinding"  name="BasicHttpEndpoint_IService" 
      contract="ServiceLibrary.IService" /> 
     <endpoint address="mex" binding="mexHttpBinding" 
      contract="IMetadataExchange" /> 
     </service> 
    </services> 
    <bindings> 
     <wsHttpBinding> 
     <binding name="WSHttpBinding_IService" 
      maxBufferPoolSize="524288" maxReceivedMessageSize="1048576"> 
      <readerQuotas maxDepth="32" maxStringContentLength="65536" maxArrayLength="16384" 
       maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
      <security mode="Message"> 
      <message clientCredentialType="Certificate" negotiateServiceCredential="true" 
       algorithmSuite="Default" /> 
      </security> 
     </binding> 
     </wsHttpBinding> 
     <customBinding> 
     <binding name="CustomBinding_IService"> 
      <transactionFlow /> 
      <security authenticationMode="SecureConversation"  messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10"> 
      <localServiceSettings maxClockSkew="00:10:00" maxPendingSessions="102400" /> 
      <localClientSettings maxClockSkew="00:10:00" /> 
      <secureConversationBootstrap authenticationMode="MutualSslNegotiated"  messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10" /> 
      </security> 
      <textMessageEncoding> 
      <readerQuotas maxDepth="32" maxStringContentLength="65536" maxArrayLength="16384"  maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
      </textMessageEncoding> 
      <httpTransport maxBufferSize="1048576" maxReceivedMessageSize="1048576" /> 
     </binding> 
     </customBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <serviceCredentials> 
      <serviceCertificate findValue="CN=[domain]" storeLocation="LocalMachine"  storeName="TrustedPeople" /> 
      <clientCertificate> 
       <authentication revocationMode="NoCheck" certificateValidationMode="PeerTrust"  /> 
      </clientCertificate> 
      </serviceCredentials> 
      <serviceThrottling maxConcurrentCalls="1000" maxConcurrentSessions="1000"  maxConcurrentInstances="1000" /> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true"/> 
    </system.serviceModel> 
</configuration> 

ग्राहकों सभी CustomBinding उपयोग कर रहे हैं। हालांकि समस्या अभी भी डब्ल्यूएस बाध्यकारी के साथ होती है। असल में मैंने कस्टमबिंग को ऐसी समस्या हल करने के लिए बनाया जहां सेवा लंबित सत्रों से बाहर हो रही थी।

+0

अपनी सेवा के कॉन्फ़िगरेशन को भी दिखाएं। –

उत्तर

0

तो, आखिरकार, मुझे आखिरकार सबकुछ फिर से काम कर रहा था, कम या ज्यादा। मेरी समस्या यह थी कि सभी ग्राहक एक बार कॉल करने की कोशिश कर रहे थे, और यह सर्वर को अधिभारित कर दिया गया। मैंने आईआईएस आवेदन को सभी आने वाले यातायात से इनकार करने के लिए सेट किया है, फिर अंततः आईपी के समूह धीरे-धीरे वापस आते हैं जब तक वे सभी कनेक्ट करने में सक्षम नहीं होते।

Lsass अभी भी उच्च मात्रा में CPU का उपयोग कर रहा है, जो अस्वीकार्य है। मुझे एक अलग सुरक्षा विधि (प्रमाणपत्रों के अलावा) ढूंढना होगा जो तेजी से है और lsass पागल नहीं बनता है क्योंकि हमारे पास सैकड़ों ग्राहक हैं।

संबंधित मुद्दे