Tại sao Windows 2008 sử dụng trao đổi trước khi bộ nhớ đầy?


9

Tôi quản trị máy chủ Windows 2008 (tốt, trên Amazon EC2) đang chạy IIS và ứng dụng Web .NET. Tôi đã nhận được một cảnh báo bộ nhớ vào ngày khác và đi và xem, và chắc chắn rằng bộ nhớ quá trình đã tăng lên theo thời gian thông qua một số loại rò rỉ chậm. Nó không tăng trưởng nhiều, giống như 60M đến 200M, nhưng đủ điều khác đang diễn ra với cái hộp mà nó đã vượt qua ngưỡng khá thấp của chúng tôi (75%) để tắt màn hình.

Tôi đã tái chế nhóm ứng dụng và bộ nhớ được giải phóng và tôi nhận thấy khi xem xét các số liệu thống kê rằng không gian hoán đổi đang được sử dụng đáng kể và hơn 1 GB trong số đó đã giải phóng với tái chế đó.

Có thể đây là một câu hỏi cơ bản, nhưng tôi là một người UNIX và tôi đã quen với việc trao đổi không được sử dụng cho đến khi bạn hết bộ nhớ. Hộp này chưa bao giờ vượt quá 75% sử dụng bộ nhớ. Đây là một thứ Windows hay một thứ .NET hay một thứ Amazon? Tôi nghi ngờ rằng có một rò rỉ bộ nhớ lớn hơn nhiều trong ứng dụng này so với nghi ngờ - nó không bị rò rỉ từ 60M đến 200M, nó bị rò rỉ từ 60M đến 1,2 GB, nhưng phần lớn trong số đó bị "lạnh" và bị đẩy ra để trao đổi?

Tôi có bộ tái chế bộ nhớ trên nhóm ứng dụng, nhưng nó kích hoạt bộ nhớ đầy hộp, vì vậy ứng dụng này có thể trở nên thực sự rất lớn trước khi nó tự động tái chế.

Tôi có thể thiết lập tái chế "đúng thời gian" thường xuyên, nhưng đó là một cách giải quyết, tôi sẽ nhờ nhà phát triển sửa ứng dụng nhưng cần hiểu những gì đang diễn ra ở đây với việc sử dụng trao đổi để đảm bảo tôi hiểu đúng.

Chỉnh sửa với nhiều thông tin hơn: bộ nhớ cá thể: trao đổi 1,7 GB: 4,5 GB

Tôi thấy quá trình w3wp.exe trong taskmgr cho thấy Bộ nhớ: 211.000k. Nhưng khi tôi khởi động lại nó (nó nằm trong nhóm ứng dụng của riêng nó và là ứng dụng duy nhất trên hộp), việc sử dụng bộ nhớ của nó đã giảm xuống mức khởi điểm bình thường là 60 triệu và như 1 GB + trao đổi cũng được giải phóng. Trong taskmgr tôi chỉ có chỉ số Bộ nhớ (Bộ làm việc riêng) thông thường, nhưng đã thấy sự thay đổi hoán đổi thông qua giám sát khác của tôi (Cloudkick). Quay trở lại và xem xét nó ngày hôm nay, bộ nhớ đã lên tới 195M trong quá trình (tổng cộng 1,2 GB) và trao đổi đã tăng từ 1,0 GB lên 1,1 GB, không phải lúc nào cũng sao lưu (đã vẽ đồ thị theo thời gian, đó là một leo chậm).

Tôi ít quan tâm đến ứng dụng cụ thể này và quan tâm nhiều hơn đến việc chỉ hiểu khi Windows hoán đổi và cách sử dụng ứng dụng đó, và những điều cần quan tâm về việc sử dụng bộ nhớ và trao đổi Windows nói chung.


4
BTW, ít nhất Linux sẽ trao đổi các trang một cách cơ hội nếu chúng không được truy cập trong một thời gian dài, ngay cả khi hệ thống không phù hợp với việc sử dụng tất cả RAM có sẵn. Nó thực hiện điều này để giải phóng bộ nhớ cho bộ đệm đĩa, bộ đệm, v.v.
EEAA

Trường hợp này có bao nhiêu bộ nhớ? Bạn đang nói rằng quá trình w3wp.exe đang đạt 1GB? Đây có phải là trang web duy nhất chạy trong nhóm ứng dụng đó?
Kev

@ KevΩ Đã thêm thông tin trong Q theo yêu cầu của bạn.
Ernest Mueller

@ErikA, rất tốt để biết, tôi đoán tôi đã lắng nghe những người nói rằng "nếu bạn trao đổi, bạn đã có hiệu suất tào lao, chỉ cần tắt hoàn toàn và không hết RAM" vì vậy tôi không ' t xem hoán đổi mà nhiều.
Ernest Mueller

Nếu đĩa của bạn đang đập vào đĩa, điều đó đúng. Nếu nó hoán đổi, nó sẽ nhường chỗ cho bộ đệm và như vậy.
Bart Silverstrim

Câu trả lời:


17

Windows và linux có hai chiến lược trang / trao đổi khác nhau.

Linux

Linux muốn tránh sử dụng không gian hoán đổi, và đợi đến giây phút cuối cùng có thể. Nếu bạn thấy một lượng lớn trao đổi trong linux, hệ thống của bạn có thể đang gặp sự cố. Chiến lược này tốt cho việc giảm thiểu i / o đĩa tổng thể, đây là phần chậm nhất trong hệ thống của bạn, nhưng yếu hơn đối với các hệ thống có thời gian tải nhẹ và tải nặng (và thành thật mà nói, đó là hầu hết chúng ta). Thời gian tải của bạn quá nặng sẽ bị gánh nặng bởi đĩa "phụ", hoặc, nói cách khác, bạn cần thiết kế các bản dựng máy chủ của mình để có đủ ram mà bạn không trao đổi ngay cả trong khi thời gian tải dự kiến ​​cao nhất.

các cửa sổ

Windows muốn coi bộ nhớ là bộ đệm đơn thuần của tệp trang. Bộ nhớ thực của bạn luôn ở trên đĩa, nhưng nó sẽ đọc / ghi từ "bộ đệm" trước nếu có thể. Chiến lược này là tốt cho buổi tối ra tải của bạn theo thời gian; khi hệ thống bận và cần trao đổi trang, trang hiện tại đã có trên đĩa và một nửa công việc đã hoàn thành. Cách tiếp cận này có ý nghĩa rất lớn khi Windows còn trẻ, 32 MB (quên GB) vẫn còn rất nhiều RAM và nhu cầu sử dụng thường xuyên không gian hoán đổi là điều được đưa ra. Ngay cả ngày nay điều này cũng tốt cho tải công việc xen kẽ giữa tải nhẹ và bận, vì nó giúp phân tán đĩa i / o ra đều hơn theo thời gian.

Các phiên bản Windows hiện đại có tối ưu hóa bổ sung - chẳng hạn như SuperFetch - để tải trước và chuẩn bị các trang bộ nhớ trên đĩa và trong RAM khi tải nhẹ, để giúp tránh phải ghi thêm đĩa khi tải chương trình lần đầu tiên. Tất cả điều này có nghĩa là bạn có thể thiết kế hệ thống của mình chỉ cần đủ RAM cho một cái gì đó thấp hơn tải dự kiến ​​cao nhất, do đó bạn vẫn có thể có hiệu suất ít nhất có thể chấp nhận mọi lúc, với chi phí giảm.

Hội tụ

Khái niệm đo lường hoặc dự đoán tải trong môi trường thử nghiệm trước tiên và sau đó phân bổ tài nguyên sản xuất khi tải được biết là một sự phát triển tương đối gần đây trong việc xây dựng hệ thống, có thể, hoặc ít nhất là thực tế, một phần với sự ra đời của máy chủ ảo và sau đó là máy chủ đám mây . Tùy thuộc vào tải của bạn, bạn thậm chí có thể thiết kế hệ thống sao cho không bao giờ cần phải trao đổi. Trong những trường hợp này, Windows cho phép bạn tắt phân trang và hoạt động giống như một hệ thống linux. Tuy nhiên, bạn phải cẩn thận; nếu thiết kế hệ thống của bạn đòi hỏi nhiều bộ nhớ hơn dự kiến, bạn có thể gặp rắc rối theo cách này.

Mặt khác, các nhân linux hiện đại sẵn sàng trao đổi sang đĩa theo cơ hội hơn so với trước đây. Vì vậy, sự khác biệt trong chiến lược quản lý bộ nhớ giữa hai hệ thống vẫn còn, nhưng bây giờ ít khác biệt hơn so với trước đây. Cả hai hệ thống đều có giá trị của chúng, và mỗi chiếc đồng hồ khác để xem những tiến bộ nào chúng có thể sao chép.


Rất cụ thể về chiến lược cuối Windows, cảm ơn! Cũng được xác thực bởi Microsoft KB này Tôi đã tìm thấy ... support.microsoft.com/kb/2267427
Ernest Mueller

1
Linux không nhất thiết phải đợi đến giây phút cuối cùng có thể trừ khi bạn đặt rõ ràng vm.swappiness = 0. Ở giá trị mặc định 60, nó sẽ trao đổi các trang không được chạm vào trong một thời gian.
Kjetil Joergensen

@KjetilJoergensen đảm bảo bạn đã đọc phần cuối cùng về hội tụ.
Joel Coel

1
@JoelCoel Tôi rút lại những lời chỉ trích của mình một cách vô điều kiện :)
Kjetil Joergensen

7

Windows (và Linux và các hệ điều hành tương tự Unix khác) sẽ di chuyển các trang không được sử dụng trong một thời gian vào đĩa để nhường chỗ cho bộ đệm và bộ đệm để tăng tốc hoạt động I / O hoạt động. Ngoài ra, các ứng dụng thường sẽ phân bổ nhiều bộ nhớ hơn mức chúng sẽ sử dụng ngay lập tức - điều này có thể khuyến khích Kernel trang một số thứ gần đây chưa được chạm vào nền, vì vậy các ứng dụng cho biết không thấy độ trễ phân trang khi chúng khởi động đột ngột sử dụng phân bổ đó.

Trong Linux, bạn có thể điều chỉnh (hoặc chặn) hành vi này bằng cách thay đổi các giá trị "swappiness" có liên quan trong /prochệ thống tệp - không nghi ngờ gì nữa, có các giá trị đăng ký bạn có thể điều chỉnh để thay đổi cách Windows hành xử theo vấn đề này.

Một điều cần lưu ý là khi một cái gì đó đã được phân trang và sau đó đọc lại, kernel sẽ không xóa nó khỏi tệp trang cho đến khi tệp đầy đủ hoặc trang trong RAM bị thay đổi. Bằng cách này, nếu nó cần trang một lần nữa, nó có thể làm như vậy mà không cần phải thực sự ghi các trang vào đĩa: nội dung đã có sẵn. Điều này có thể cải thiện đáng kể hiệu năng trong các tình huống mà bộ nhớ quá mức đã trở nên tồi tệ đến mức gây ra việc đập các tệp trang (số lượng đáng kể các trang liên tục được ánh xạ vào và ra). Bạn có thể thấy rằng một số dữ liệu đã bị đẩy ra do rò rỉ bộ nhớ đó và từ đó đã được đọc lại nhưng không bị xóa khỏi đĩa trong trường hợp các trang đó cần được ánh xạ hoặc RAM để lấy lại phòng sau đó. Trong Linux, giá trị "SwapCached" trong/proc/meminfohiển thị số lượng dữ liệu hiện diện trong các trang có bản sao giống hệt nhau trong RAM và trên đĩa. Windows chắc chắn sử dụng cùng một tối ưu hóa (hoặc một cái gì đó tương tự) nhưng tôi không chính xác nơi để xem điều này đang xảy ra (không nghi ngờ gì có các bộ đếm màn hình hiệu suất liên quan mà bạn có thể truy vấn).

tl; dr: Điều này là bình thường. Một kernel OS hiện đại sẽ cố gắng thông minh và tối đa hóa lượng RAM có thể sử dụng làm bộ đệm để lưu các hoạt động I / O, và đôi khi sẽ có dữ liệu được sao chép trong đĩa và trong RAM để lưu I / O nếu nó cần loại bỏ các bit đó của RAM sau này. Rất có thể, phản ứng trực quan vì có thể, việc sử dụng tệp trang này theo hai cách này, ngay cả khi bạn hiện không có RAM thấp, đang cải thiện hiệu suất tổng thể của bạn thay vì giảm nó.

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.