2012-11-19 20 views
6

पर उच्च मेमोरी उपयोग तक पहुंच रही है हमारे पास एक बीएल सेवा के रूप में डब्ल्यूसीएफ सेवा है। सेवा मिश्रित परिवहन मोड में है, इसमें 10 से अधिक भिन्न एंडपॉइंट हैं, बेसिकहट्प बाइंडिंग द्वारा बाध्य, विभिन्न अनुबंधों और उन सभी के लिए एक ही पता के साथ। सेवा आईआईएस -7 पर अपने आवेदन पूल पर चलता है।डब्ल्यूसीएफ सेवा पहली कॉल

समस्या यह है कि सेवा ठीक काम करती है, लेकिन पहली कॉल के बाद भी, डब्ल्यूएसडीएल प्राप्त करने के बाद, w3wp.exe का मेमोरी उपयोग सीधे 300 मेगा तक चला जाता है, सेवा मेमोरी उपयोग लगातार बढ़ता रहता है, सर्वर की सभी भौतिक स्मृति (98 - 100%)। हमें स्मृति अपवाद से बाहर नहीं मिला, लेकिन यह स्थिति अन्य अनुप्रयोगों और सेवा को धीमा कर देती है, इसलिए हमें दिनों के प्रत्येक जोड़े में मैन्युअल रूप से एप्लिकेशन पूल रीफ्रेश करने की आवश्यकता होती है। मैंने पहले ही मेमोरी प्रोफाइलिंग टूल का उपयोग करने की कोशिश की है और समस्या के कारण किसी भी लीड को नहीं मिला है।

क्या किसी को भी इस समस्या का सामना करना पड़ा? और यदि हां, तो आपने क्या किया?

अतिरिक्त जानकारी:

  • बीएल सेवा NHibernate के आधार पर एक दाल ढांचे के ऊपर स्थित है, हम पहले से ही की संभावना से इनकार किया है स्मृति रिसाव वहाँ से होने वाले है।
  • कॉन्फ़िग फ़ाइल

    <?xml version="1.0" encoding="utf-8"?> 
    <configuration> 
        <appSettings> 
        </appSettings> 
        <system.web> 
         <compilation debug="true" targetFramework="4.0" /> 
         <httpRuntime maxRequestLength="20000" requestLengthDiskThreshold="20000" /> 
        </system.web>  
        <system.serviceModel>  
         <behaviors> 
          <serviceBehaviors> 
           <behavior name="DefaultServiceBehavior"> 
            <serviceMetadata httpGetEnabled="true" /> 
            <serviceDebug includeExceptionDetailInFaults="true" /> 
           </behavior> 
          </serviceBehaviors> 
    
          <endpointBehaviors> 
           <behavior name="AnonymousBehavior"> 
           </behavior> 
          </endpointBehaviors> 
         </behaviors> 
    
         <bindings> 
          <basicHttpBinding> 
           <binding name="SecureBinding" 
           closeTimeout="00:10:00" 
           openTimeout="00:10:00" receiveTimeout="00:10:00" 
           sendTimeout="00:10:00" allowCookies="true" 
           hostNameComparisonMode="StrongWildcard" maxBufferSize="65536000" 
           maxBufferPoolSize="524288000" maxReceivedMessageSize="65536000" 
           transferMode="Buffered"> 
            <readerQuotas maxDepth="20000000" 
            maxStringContentLength="8192000" 
            maxArrayLength="16384000" 
            maxBytesPerRead="4096000" 
            maxNameTableCharCount="16384000" /> 
             <security mode="None"> 
              <transport clientCredentialType="None"/> 
             </security> 
           </binding> 
         </basicHttpBinding>   
        </bindings> 
    
    <services> 
    <service name="BL.Services.MyService" 
    behaviorConfiguration="DefaultServiceBehavior"> 
    
    <endpoint address="" 
    binding="basicHttpBinding" 
    bindingConfiguration="SecureBinding" 
    bindingNamespace="Security/Anonymous" 
    behaviorConfiguration="WithSecurityContextInspector" 
    contract="BL.Services.Contracts.IAnonymousClaimsService" /> 
    
    <endpoint address="" 
    binding="basicHttpBinding" 
    bindingConfiguration="SecureBinding" 
    bindingNamespace="Domain/App" 
    behaviorConfiguration="WithSecurityContextInspector" 
    contract="BL.Services.Contracts.IAppService" /> 
    
    <endpoint address="" 
    binding="basicHttpBinding" 
    bindingConfiguration="SecureBinding" 
    bindingNamespace="Domain/App" 
    behaviorConfiguration="WithSecurityContextInspector" 
    contract="BL.Services.Contracts.IAttachmentService" /> 
    
    <endpoint address="" 
    binding="basicHttpBinding" 
    bindingConfiguration="SecureBinding" 
    bindingNamespace="Domain/Site" 
    behaviorConfiguration="WithSecurityContextInspector" 
    contract="BL.Services.Contracts.ISecurityService" /> 
    
    <endpoint address="" 
    binding="basicHttpBinding" 
    bindingConfiguration="SecureBinding" 
    bindingNamespace="Domain/Transaction" 
    behaviorConfiguration="WithSecurityContextInspector" 
    contract="BL.Services.Contracts.ITransactionService" /> 
    
    <endpoint address="" 
    binding="basicHttpBinding" 
    bindingConfiguration="SecureBinding" 
    bindingNamespace="Domain/ActiveDirectory" 
    behaviorConfiguration="WithSecurityContextInspector" 
    contract="BL.Services.Contracts.IActiveDirectoryService" /> 
    
    <endpoint address="" 
    binding="basicHttpBinding" 
    bindingConfiguration="SecureBinding" 
    bindingNamespace="Domain/Report" 
    behaviorConfiguration="WithSecurityContextInspector" 
    contract="BL.Services.Contracts.IReportService" /> 
    
    <host> 
    <baseAddresses> 
    <add baseAddress="//MyService.svc" /> 
    </baseAddresses> 
    </host> 
    </service> 
    </services> 
    
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" /> 
    <defaultDocument> 
    <files> 
        <add value="MyService.svc" /> 
    </files> 
    </defaultDocument> 
    </system.webServer> 
    </configuration> 
    
+0

मुझे डब्ल्यूसीएफ के साथ मेमोरी के मुद्दे थे जो दूर जाने से इनकार कर दिया। डब्ल्यूसीएफ के लिए कॉन्फ़िगरेशन विकल्पों के असंख्य के आसपास दस्तावेज बहुत खराब आईएमओ है। इसके नीचे कभी नहीं मिला और अपना खुद का रिमोटिंग फ्रेमवर्क लिखना समाप्त कर दिया जो मुझे स्मृति खपत के नियंत्रण में वापस रखता था। आशा है कि आपको एक बेहतर समाधान मिलेगा। – spender

+0

आपकी कॉन्फ़िगरेशन कैसी दिख रही है? विशेष रूप से ऑब्जेक्ट ITemsInGraph विकल्प आदि के आसपास? क्या आप एक साथ चल रहे हैं? आप कितने सक्रिय सत्र इत्यादि की अनुमति दे रहे हैं? इन सभी का प्रभाव है। – Chris

उत्तर

4

एक लंबी खोज के बाद हमें समस्या मिली। हमारी सेवा ने कार्य पैटर्न की एक इकाई में बहुत सारी तर्क इकाइयों का उपयोग किया। प्रत्येक तर्क इकाई बेसलॉगिक कक्षा से विरासत में मिली है। बेसलॉगिक यूनिट में एंटरप्राइज़ लाइब्रेरी यूनिटीकॉन्टेनर प्रॉपर्टी है जिसने एक कारखाना बनाया है।प्रत्येक कॉल ने इस कारखाने के कई उदाहरण बनाए, इस संपत्ति को एक स्थैतिक संपत्ति में बदलकर समस्या को हल किया।

3

300MB करने के लिए पहले प्रारंभिक कूद मैं क्या हमारे अनुप्रयोगों में देखा है के अनुरूप है। वास्तव में उस संख्या को कम करने का कोई तरीका नहीं मिला है, लेकिन यह समय के साथ उस आंकड़े पर रहता है।

स्मृति के बढ़ते हिस्से के लिए यह मानक मेमोरी रिसाव या कम से कम एक जीसी मुद्दा की तरह लगता है। क्या आप इकाई ढांचे का उपयोग कर रहे हैं और क्या आपने लाल गेट्स मेमोरी प्रोफाइलर जैसे टूल के साथ प्रोफाइल किया है, वीएस प्रोफाइलर में निर्मित नहीं?

प्रश्न में जानकारी के आधार पर कोई और विशिष्ट उत्तर देना मुश्किल है।

इस बीच, एप्लिकेशन पूल के आईआईएस ऑटो रीफ्रेश का उपयोग करने का प्रयास करें। इसे अपनी पसंद के दहलीज पर सेट करें और इसे स्वचालित रूप से रीफ्रेश को संभालने दें।

+0

मुझे पता है कि सवाल थोड़ा अस्पष्ट है, मैं आवश्यक जानकारी जोड़ूंगा। –

5

300 एमबी असामान्य नहीं है क्योंकि अंकमैनन नोट करता है। भारी उपयोग की जाने वाली सेवा लगभग 700 एमबी या उससे अधिक आसानी से पठार कर सकती है। सेवा लेने वाली सबसे उपलब्ध सर्वर स्मृति लेकिन स्मृति अपवाद के बाहर एक ट्रिगर नहीं कर की दूसरी अवलोकन गैर-डिफ़ॉल्ट config मूल्यों के कारण होने की संभावना है:

binding: 
maxBufferSize="65536000" 
maxBufferPoolSize="524288000" 
maxReceivedMessageSize="65536000" 
transferMode="Buffered" 

readerQuotas: 
maxDepth="20000000" 
maxStringContentLength="8192000" 
maxArrayLength="16384000" 
maxBytesPerRead="4096000" 
maxNameTableCharCount="16384000" 

आप वास्तव में साथ अत्यधिक स्मृति का उपभोग करने के WCF कॉन्फ़िगर कर रहे हैं आपके द्वारा चुने गए मान जब तक कि आप किसी विशेष स्थिति का सामना नहीं करते हैं जिसके लिए किसी भी विशेषताओं के लिए डिफ़ॉल्ट मान को बदलने की आवश्यकता होती है, तो उन्हें न बदलें। एकमात्र मूल्य जो मैं नियमित रूप से बदलता हूं वह maxReceivedMessageSize 64K से लगभग 1 से 2 एमबी के डिफ़ॉल्ट से अपरिहार्य है। यदि आप नियमित रूप से 3 एमबी से बड़े संदेशों के आसपास झुका रहे हैं, तो आपको अपने डेटा अनुबंध डिजाइन पर पुनर्विचार करना चाहिए। डब्ल्यूसीएफ पर कई प्रदर्शन मुद्दों का आरोप है कि वास्तव में गलत कॉन्फ़िगरेशन डब्ल्यूसीएफ में प्रदर्शन की समस्या नहीं है।

+0

आपकी टिप्पणी के लिए धन्यवाद, मुझे इस मुद्दे से अवगत है, हमने पहले से ही इसकी जांच की है और यह मुद्दा नहीं है। –