Chúng tôi có dịch vụ WCF làm dịch vụ BL. Dịch vụ này ở chế độ Giao thông hỗn hợp, có hơn 10 điểm cuối khác nhau, được liên kết bởi BasicHttpBinding, với các hợp đồng khác nhau và cùng một địa chỉ cho tất cả chúng. Dịch vụ chạy trên nhóm ứng dụng trên IIS-7.Dịch vụ WCF đạt mức sử dụng bộ nhớ cao vào lần gọi đầu tiên
Vấn đề là dịch vụ hoạt động tốt, nhưng sau cuộc gọi đầu tiên, ngay cả khi nhận được WSDL, việc sử dụng bộ nhớ của w3wp.exe đi thẳng tới 300 mega, việc sử dụng bộ nhớ dịch vụ liên tục tăng tất cả bộ nhớ vật lý của máy chủ (98 - 100%). Chúng tôi đã không nhận được ra khỏi ngoại lệ bộ nhớ, nhưng tình trạng này làm chậm các ứng dụng khác và dịch vụ vì vậy chúng tôi cần phải làm mới hồ bơi ứng dụng một cách thủ công một lần mỗi cặp vợ chồng của ngày. Tôi đã cố gắng sử dụng công cụ định cấu hình bộ nhớ và không tìm thấy bất kỳ dẫn đến nguyên nhân của vấn đề.
Có ai gặp phải sự cố này không? và nếu có, bạn đã làm gì?
thông tin bổ sung:
- Dịch vụ BL nằm trên một khuôn khổ DAL dựa trên NHibernate, chúng tôi đã loại trừ khả năng rò rỉ bộ nhớ là có nguồn gốc từ đó.
tập tin Config
<?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>
Tôi gặp vấn đề về bộ nhớ với WCF đã từ chối không tham gia. Các tài liệu xung quanh vô số các tùy chọn cấu hình cho WCF là khá nghèo IMO. Không bao giờ đi đến đáy của nó và kết thúc bằng văn bản khuôn khổ từ xa của riêng tôi mà đưa tôi trở lại trong kiểm soát tiêu thụ bộ nhớ. Hy vọng bạn tìm thấy một giải pháp tốt hơn. – spender
cấu hình của bạn trông như thế nào? đặc biệt là xung quanh các tùy chọn objectItemsInGraph vv? Bạn có đang chạy đồng thời không? Bạn cho phép bao nhiêu phiên hoạt động? Tất cả đều có hiệu lực. – Chris