Bộ nhớ tối đa mà một trang web / nhóm ứng dụng IIS6 có thể sử dụng là bao nhiêu?


8

Tôi có máy chủ IIS 6 đang chạy trên Windows 2003 SP2 x86. Máy chủ có 4GB RAM và chạy ổn định với 2GB được phân bổ.

Tôi nhận ra rằng với x86, máy chủ sẽ không sử dụng tất cả RAM 4GB và không gian ứng dụng cũng bị giới hạn nhưng các quy trình IIS dường như bị hạn chế ở nơi khác. w3wp.exe không bao giờ có hơn 500 MB được phân bổ và đôi khi tôi nhận được các ngoại lệ OutOfMemory từ một ứng dụng .NET bận rộn (có một số ứng dụng đang chạy, mỗi ứng dụng có một nhóm ứng dụng riêng).

Bộ nhớ tối đa mà một trang web / nhóm ứng dụng IIS6 có thể sử dụng là bao nhiêu?

Câu trả lời:


7

Các ứng dụng trong Windows x86 được giới hạn ở mức 2gb / ea. Bạn có thể thay đổi điều này bằng cách thêm cờ / 3gb vào boot.ini, nhưng điều này có thể gây ra hành vi ứng dụng không mong muốn và nên thận trọng khi sử dụng. MS chính thức không hỗ trợ điều này ( http://technet.microsoft.com/en-us/l Library / bb124810.aspx )

Giới hạn bộ nhớ của IIS có thể được đặt trong tab Tái chế trong nhóm ứng dụng có liên quan.

Làm thế nào để bạn xác định rằng ứng dụng sẽ không bao giờ vượt quá 500MB? Nếu bạn đang sử dụng Trình quản lý tác vụ, hãy nhớ rằng hiếm khi (nếu có) thể hiện chính xác việc sử dụng bộ nhớ vì Windows hiểu điều đó. Sử dụng Process Explorer: http://technet.microsoft.com/en-us/sysiternals/bb896653.aspx

Có một số câu hỏi liên quan khác:

  • Có lỗi đăng nhập Nhật ký sự kiện của bạn?
  • Đây có phải là một dòng mã đặc biệt ném ngoại lệ? Nếu vậy, ngoại lệ OutOfMemory này thực sự là một vấn đề IIS, hay một vấn đề về mã?
  • Bạn có giới hạn tất cả các nhóm ứng dụng của mình với cài đặt Recomme không?
  • Có dịch vụ nào khác đang chạy trên máy này không?

Nhiều khả năng, IIS, ASP.NET và tất cả hành lý liên quan của họ đang chạy vượt quá giới hạn 2GB mặc dù Windows Task Manager không hiển thị. Đặt giới hạn Tái chế hoặc nâng cấp lên x64 có thể sẽ tạo ra sự khác biệt lớn.


3

thỉnh thoảng nhận các ngoại lệ OutOfMemory từ một ứng dụng .NET bận rộn

Câu trả lời cho điều này là quá phức tạp để phù hợp với một câu trả lời. Xem " Điều chỉnh hiệu suất ứng dụng .NET " để biết cách xử lý hoàn toàn đối tượng.

Đây là một bản tóm tắt cực kỳ đơn giản (nhưng vẫn khá tốt) từ Bruno Jouhier :

Hơn nữa, thời gian chạy .NET không cho phép bạn tăng tới 2 GB. Trình thu gom rác hoạt động bằng cách sao chép các đối tượng sống, vì vậy nó cần một không gian hợp lý để thực hiện các bản sao của nó.

Biên tập:

Đây là nỗ lực của tôi để giải thích ...

Nếu bạn đang tự hỏi kích thước bộ nhớ xử lý công nhân tối đa (như được báo cáo bởi Trình quản lý tác vụ) là gì cho Quy trình công nhân ASP.NET trên x86, thì câu trả lời là "nó phụ thuộc" .

Trong bất kỳ loại mã được quản lý nào như Java hoặc .NET, lập trình viên sẽ từ bỏ quyền kiểm soát bộ nhớ chi tiết để làm việc để không phải đối phó với các con trỏ. Khi một chương trình thực thi, Heap và Stack sẽ được dọn sạch định kỳ bởi Garbage Collector .

Cụ thể liên quan đến ASP.NET, trình thu gom rác chạy bên trong quy trình worker giống như trang web. Các GC tiêu thụ bộ nhớ của riêng mình. Bao nhiêu bộ nhớ hoàn toàn là một chức năng về cách viết mã ứng dụng của bạn. Một ứng dụng có thể sử dụng 1,8 GB bộ nhớ trong khi một ứng dụng khác có thể bị sặc ở mức 500MB. Để hiểu lý do tại sao , bạn cần phải lập hồ sơ ứng dụng cụ thể của bạn.


Tôi đồng ý rằng việc gỡ lỗi các ngoại lệ OutOfMemory rất phức tạp - cảm ơn vì liên kết. Tuy nhiên, tôi đang hỏi làm thế nào bộ nhớ bị hạn chế và có thể trả lời được điều đó.
Robin M

2

Bất kỳ quy trình nào trên HĐH Windows x86 đều bị giới hạn ở mức 2gb trừ khi bạn đã đặt công tắc / 3gb trong tệp boot.ini, trong trường hợp đó, một quy trình có thể sử dụng 3gb.


Có, nhưng tôi không có gần 2GB cho một quá trình?
Robin M

2

Từ bài đăng trên blog này "Đề xuất cho Cài đặt nhóm ứng dụng SharePoint" :

Tập trung vào vật lý Tôi thường muốn giới hạn nhóm ứng dụng khoảng 800 MB đến tối đa 1200 MB trên ứng dụng 32 bit với rất ít nhóm ứng dụng tùy thuộc vào số lượng và dung lượng bộ nhớ. Trên máy chủ có RAM 2 GB, tôi đặt tối đa khoảng 800 MB. Trên máy chủ RAM 4GB khoảng 1GB trở lên nếu nhiều hơn với tối đa khoảng 1200. Trên giao diện web 64 bit với bộ nhớ 8-16 GB tôi đã nghe nói về cài đặt RAM 2GB hoặc thậm chí cho phép nó chạy, thay vì giới hạn nó.

Bạn thực sự cần phải cấu hình nó vì chúng thực sự có thể phát triển để xử lý và bộ đệm. Dung lượng bộ nhớ càng lớn và tải càng lớn thì quá trình worker sẽ phát triển càng cao. Khi mọi người hỏi về việc định cấu hình nhóm ứng dụng, đây là nơi họ thường hỏi những con số nên là gì. Những gì bạn đang làm ở đây rõ ràng là hạn chế nhóm ứng dụng tiêu thụ nhiều bộ nhớ hơn. Lưu ý cài đặt này nằm trên tab tái chế, có một lý do cho điều đó.

Khi nhóm ứng dụng đạt đến mức tối đa, nó không giống như cài đặt bộ xử lý tối đa. Nó sẽ quay vòng quá trình worker giống như một khởi động lại nhỏ hoặc tương tự như iisreset, nhưng không phải vì đôi khi chúng ta muốn điều này xảy ra để chúng ta có thể giải phóng bộ nhớ. Bạn thực sự không muốn đạp xe nhiều hơn một vài lần trong khoảng thời gian 24 giờ trong một thế giới lý tưởng. Tôi đã nghe nói về một số cố gắng quay vòng ngay trước khi đỉnh điểm buổi sáng xảy ra để chúng có sẵn nhiều bộ nhớ nhất, sau đó là một chu kỳ ngay vào cuối ngày trước khi các bản sao lưu hoặc thu thập thông tin bắt đầu.

Theo kinh nghiệm của tôi, 800 MB là ngưỡng cho máy 32 bit (RAM 2-4 GB). Nó tái chế các nhóm ứng dụng trước khi ném ngoại lệ "ra khỏi bộ nhớ".


2

Đảm bảo bạn không đặt kích thước bộ nhớ ảo trên nhóm ứng dụng của mình. Nếu bạn đặt giá trị này thành một số nằm ngoài phạm vi cho phép, nó sẽ trở lại thành 512MB. Xem KB923197 .

Cũng lưu ý rằng nếu bạn đang chạy một ứng dụng ASP.Net, ASP.Net sẽ tái chế nhóm ở mức 60% giới hạn bộ nhớ 2 GB hoặc 1,2 GB. Đây không phải là kịch bản ~ 500 của bạn, nhưng trên các ứng dụng 32 bit có mức sử dụng bộ nhớ lớn, đôi khi chúng tôi sử dụng bộ nhớ này để có thêm một chút bộ nhớ.

<system.web> 
  <processModel memoryLimit="80" />
</system.web> 

1

Trên Windows 2003, bạn có thể đặt Tiện ích mở rộng phân bổ vật lý (PAE) để sử dụng tất cả bộ nhớ. Bộ nhớ mặc định cho một apppool IIS6 là 5MB .


Ok, nhưng điều đó không giải thích tại sao quá trình giới hạn ở 500MB. Bộ nhớ mặc định cho nhóm ứng dụng rất thú vị nhưng không thực sự có liên quan hoặc hữu ích, xin lỗi!
Robin M

Bạn có đang chạy SQL trên cùng một hộp không?

Không. SQL không nằm trên cùng một hộp. Nó bị giới hạn đối với web / ftp / smtp khi sử dụng IIS.
Robin M
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.