bộ nhớ lợn w3wp.exe


8

Trên bản cài đặt Máy chủ doanh nghiệp nhỏ 2011, toàn bộ số lượng quy trình w3wp.exe dường như đang sử dụng rất nhiều bộ nhớ không cân xứng. Các bản cài đặt bên ngoài của SBS đi kèm với tổng cộng 7 trang web và 20 nhóm ứng dụng ASP.NET (Sharepoint, Exchange, WSUS và các công cụ dành riêng cho SBS như Remote Web Workplace).

Kết quả là hàng tá các quá trình w3wp.exe có xu hướng tiêu thụ hơn 4 GB bộ nhớ của máy chủ theo thời gian với nhóm ứng dụng cao nhất là một thuộc về WSUS với khoảng 800 MB trong bộ làm việc. Tái chế thủ công các nhóm ứng dụng thông qua IIS MMC giúp giảm tạm thời việc sử dụng bộ nhớ (các quy trình w3wp.exe thu nhỏ lại còn 10 MB, một số trong số chúng đang hồi phục nhanh chóng), nhưng rõ ràng đó không phải là điều mà quản trị viên muốn làm cả ngày. Tôi không thể tìm thấy bất kỳ đề xuất nào về việc tái chế tự động các nhóm ứng dụng được cài đặt sẵn của SBS, vì vậy tôi hơi miễn cưỡng khi "chỉ làm điều đó" trên các hệ thống sản xuất.

Nghiên cứu của tôi trên mạng về cách hạn chế điều này chỉ đưa ra một số bài đăng nói rằng mức tiêu thụ bộ nhớ w3wp sẽ không gây hại nhưng hiệu quả vì bộ nhớ sẽ được "giải phóng khi cần bởi các ứng dụng khác". Vấn đề là nó không hoạt động:

  • đối với một, SBS là một máy chủ đa vai trò, một trong những vai trò (vai trò chính) là lưu trữ mạng CIFS mang lại lợi ích vô cùng lớn từ bộ nhớ đệm hệ thống tập tin, một lần nữa dựa vào bộ nhớ là "miễn phí" như trong các quy trình khác không được sử dụng trong bất kỳ quy trình nào cách "- Nhóm ứng dụng ASP.NET mà hầu như không bao giờ thấy người dùng và bộ nhớ ăn uống đều phản tác dụng
  • một điều nữa là tôi vẫn phải thấy mức tiêu thụ bộ nhớ w3wp giảm đáng kể khi thiếu bộ nhớ - điều tôi thấy là giảm nhẹ dưới 100 mb và thay đổi quá mức - thay vào đó lại làm giảm hiệu suất

Tôi hầu như không bao giờ quản trị các ứng dụng IIS hoặc ASP.NET, vì vậy mọi ý tưởng về cách cắt giảm hiệu quả các yêu cầu bộ nhớ cho nhóm ứng dụng đều được hoan nghênh.


Ứng dụng ASP.NET này làm gì? Tôi đã thấy w3wp.exe sử dụng rất nhiều bộ nhớ khi một ứng dụng không đóng kết nối với Linq-To-SQL hoặc Entity Framework.
Nate

Có một số. Nhiều người có liên quan đến các dịch vụ Exchange như OWA / OMA và Sync, một dịch vụ đặc biệt lớn là WSUS, một số được sử dụng cho các trang web Sharepoint hoặc tùy chỉnh của SBS (CompanyWeb, Remote Web Workplace)
the-wmus

Câu trả lời:


7

Chào mừng đến với thế giới tuyệt vời của SBS. Yêu cầu đề xuất cho RAM = 10GB ... và nó YÊU CẦU tối thiểu 8gb. ( theo Microsoft .) vì một lý do tốt. Nó không phải là một cỗ máy được điều chỉnh tốt dầu ... nó rất cẩu thả, cồng kềnh và có mọi thứ dưới ánh mặt trời kết hợp với nhau. Càng nhiều RAM bạn có thể ném vào hộp đó ... càng tốt. Thật không may, bạn bị giới hạn tối đa 32gb. Mà imho ... thật ngớ ngẩn.


Tôi đoán tôi nên tinh chỉnh câu trả lời của tôi một chút. Nếu bạn lo lắng về dung lượng RAM mà nó tiêu tốn, bạn sẽ tiết kiệm cho mình rất nhiều thời gian / đau đầu bằng cách thực hiện một trong những điều sau: A) Đừng sử dụng SBS ... hãy sử dụng máy chủ tiêu chuẩn và thiết lập các vai trò bạn CẦN cá nhân. hoặc B) Ném thêm RAM vào hệ thống ... vì RAM khá rẻ. SBS được thiết kế cho các văn phòng rất nhỏ ... (10-20 máy trạm ...) và không có quy mô tốt.
TheCompWiz

Cảm ơn câu trả lời của bạn. Hệ thống nơi tôi quan sát hành vi có 16 GB RAM là giới hạn vật lý. Bộ nhớ khả dụng nhanh chóng được lấp đầy với Store.exe của Exchange và nhiều phiên bản SQL Server và w3wp.exe không chỉ "không tinh chỉnh" mà còn hoàn toàn dũng cảm. Tôi biết cách xử lý các vấn đề tiêu thụ bộ nhớ quá mức của hai người kia khi tôi thường xuyên quản lý các hệ thống Exchange và SQL Server, nhưng với w3wp, tôi hơi thua lỗ. Bản thân mạng chỉ có 11 người dùng.
the-wợi

Exchange, SQL Server và IIS đều có các cơ chế sẽ thử và tiêu thụ 100% RAM cho dữ liệu "được lưu trong bộ nhớ cache". Nếu một cái gì đó khác yêu cầu thêm RAM ... cả 3 được cho là thu nhỏ lại để cho phép các dịch vụ khác chạy mà không cần phải dùng đến việc hoán đổi. (về lý thuyết) Trong thực tế, tuy nhiên tôi thấy rằng bạn chỉ cần tung ra những cú đấm vào một số thứ ... Bạn có thể thử và điều chỉnh mọi thứ bằng tay & đặt giới hạn cứng ... nhưng bạn sẽ không bao giờ đuổi theo cái đó. Tôi sẽ xem liệu tôi có thể tìm thấy một bài viết mà tôi đã đọc vài năm trước về việc giới hạn nhóm ứng dụng trong IIS cho bạn không ...
TheCompWiz



7

Đây là những gì tôi đã làm:

đặt bộ đệm ứng dụng máy chủ cho .NET AppPools thành giá trị thấp (5 MB) bằng cách đặt tham số privateBytesLimit web.configtheo %WINDIR%\Microsoft.NET\Framework\<version>\Confignhư được đề xuất trong câu trả lời này :

    <configuration>
      <system.web>
         <caching>
           <cache privateBytesLimit="5242880" privateBytesPollTime="00:01:00" />
         </caching>
      </system.web>
    </configuration>

Điều này giúp giảm mức sử dụng bộ nhớ xuống còn hơn 1 GB với cài đặt tái chế nhóm mặc định.

Rõ ràng, việc sử dụng loại "máy chủ" của trình thu gom rác ( <gcServer = "true">) cũng có thể dẫn đến mức tiêu thụ bộ nhớ đáng kể , nhưng dường như, <gcServer>nó được đặt thành false theo mặc định.


FYI - một khi trở lại, chúng tôi bắt đầu thiết lập gcserver false sau khi đọc những bài viết này: forums.asp.net/t/1654596.aspx/1msdn.microsoft.com/en-us/library/ff647787.aspx
Greg Askew

@ the-wợi Có phải lời khuyên để đặt gcServer = false vẫn còn hiện tại khi việc thu gom rác máy chủ xảy ra đồng thời?
Michael Steele

6

Nếu bạn nghi ngờ rằng việc tiêu thụ bộ nhớ kết quả là sự cố do lỗi phần mềm, bạn có thể sử dụng Microsoft DebugDiag 1.2 để tạo kết xuất bộ nhớ đầy đủ và phân tích kết xuất cho các vấn đề phổ biến. Nếu bạn nghĩ rằng có thể có vấn đề về bộ nhớ, bạn cần kích hoạt theo dõi rò rỉ bằng cách chọn tùy chọn "Giám sát rò rỉ" và để nó chạy một lúc trước khi tạo / phân tích kết xuất.

Tải xuống DebugDiag 1.2
https://www.microsoft.com/doad/en/details.aspx?id=26798

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây


Cảm ơn các liên kết, tôi sẽ thử nó. Gói cài đặt MSI rõ ràng có vấn đề khi chạy trên các phiên bản Windows được bản địa hóa (không phải US-Englisch), tôi phải xem liệu có cách khắc phục nào không.
the-wợi

2

Bạn không cần một nhóm ứng dụng riêng cho mỗi ứng dụng, chỉ những ứng dụng không đáng tin cậy hoặc bạn muốn ưu tiên. Nhiều người có thể chia sẻ (giữ các phiên bản .net khác nhau). Sau đó, bạn có thể giới hạn thực tế hơn bộ nhớ mà nhóm ứng dụng sẽ sử dụng. Không cần phải tái chế nhiều lần hơn một lần một ngày.

Ngoài ra, chỉ có rất nhiều bộ nhớ có thể được giải phóng theo cách này. Mặc dù một số trong số đó sẽ là bộ đệm, mỗi ứng dụng cần một lượng bộ nhớ làm việc nhất định phụ thuộc nhiều vào ứng dụng web cụ thể. Cố gắng hạn chế điều này quá nhiều sẽ khiến mọi thứ bị đình trệ.

Vấn đề thực sự là SBS cố gắng làm quá nhiều việc cùng một lúc, bạn cần nhìn vào những gì bạn thực sự sử dụng và tắt những gì bạn không làm.

Nhưng thành thật mà nói chỉ với 11 người dùng, phần còn lại của bộ nhớ sẽ đi về đâu? Trao đổi và SQL để sử dụng ánh sáng chắc chắn không cần nhiều hơn 12Gb!


Ah, bạn chưa bao giờ trải nghiệm vẻ đẹp của một SBS, phải không? Kho thông tin của Exchange tăng lên 8 GB khi không bị hạn chế, nhiều phiên bản máy chủ SQL sẽ vui vẻ chiếm thêm 3 GB. Hầu hết các nhóm ứng dụng đang chạy chỉ 1-2 ứng dụng có cùng phiên bản .NET và trong cùng bối cảnh bảo mật. Tuy nhiên, tôi không thể tập hợp lại chúng vì vấn đề hỗ trợ. Ngoài ra, không có khả năng giải quyết các vấn đề về bộ nhớ - nếu tôi chỉ có 4 quy trình 1 GB thay vì 12 quy trình nhỏ hơn, sẽ không có nhiều chiến thắng.
the-wợi

Sự khác biệt với việc có ít nhóm ứng dụng hơn là các bộ đệm khác nhau sẽ chứa đầy những gì được sử dụng thường xuyên, loại bỏ những gì không có. Với rất nhiều nhóm ứng dụng sẽ có nhiều lãng phí. Bạn thực sự cần bao nhiêu bối cảnh bảo mật với 11 người dùng? Có, Exchange sẽ sử dụng rất nhiều bộ nhớ của bạn để có thể sử dụng nhưng nó cũng sẽ vui vẻ chạy chỉ với 2GB cho một vài người dùng nếu bạn hạn chế. Với SBS, bạn cần chấp nhận rằng bạn không thể sử dụng các thực tiễn tốt nhất ở mọi nơi hoặc chạy bất kỳ tùy chọn nào một cách tối ưu, bạn cần phải thực dụng một chút và không quá kỹ năng.
JamesRyan

Chà, nếu bạn đang cố chạy 20 phiên bản của nó trên một máy chủ thì không có gì lạ khi bạn đang cố nhồi nhét tất cả vào bộ nhớ. Bạn thực sự nên đề cập rằng trong câu hỏi vì nó đặt mọi thứ trong một ánh sáng hoàn toàn khác.
JamesRyan

Tôi thực sự không - như tôi đã nói vấn đề phát sinh với một hệ thống vật lý, nơi các ứng dụng hiếm khi được sử dụng đánh cắp bộ nhớ từ bộ đệm hệ thống tệp có giá trị hơn nhiều. Tôi nghi ngờ điều này có thể là do một số bộ nhớ đệm đối tượng trong nhóm ứng dụng và đang tìm kiếm một số phương tiện để giảm / tắt bộ đệm.
the-wợi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.