Tại sao OS X sử dụng hoán đổi khi có rất nhiều bộ nhớ không hoạt động của bộ điều khiển?


22

Tôi đang sử dụng OS X từ vài tháng nay (Lion và giờ là Mountain Lion). Tôi có 8 GB trên mini của mình và gần như hàng ngày bây giờ nó đã gần đến mức đó. Trên máy Windows 7 với 8 GB tôi không bao giờ gặp phải vấn đề đó. Dù sao, tôi đã đọc qua mạng, rằng bộ nhớ không hoạt động là bộ đệm ứng dụng của các chương trình gần đây đã đóng và có thể được sử dụng để mở lại nhanh hơn. Và bộ nhớ không hoạt động này có thể được phát hành cho một ứng dụng mới nếu cần. Nó không được phát hành. Thay vào đó OS X bắt đầu hoán đổi. Vì vậy, câu hỏi của tôi là tại sao OS X sử dụng trao đổi khi có nhiều "bộ nhớ không hoạt động"? Đây là một màn hình hiển thị những gì tôi muốn nói:

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

Tôi thực sự hy vọng sẽ có một chiếc OS X để sử dụng 2,69 GB đó trước khi bắt đầu hoán đổi. Tôi thực sự làm được.


Vâng, nó là lạ. Đây có phải là một ứng dụng chiếm hết RAM không? Có thể OSX giới hạn các ứng dụng không sử dụng hơn 80% RAM cùng một lúc. Không hoạt động không có nghĩa là miễn phí mặc dù. Nó được dành riêng cho một cái gì đó.
Piotr Kula

Không - nhiều ứng dụng, Trình duyệt, Eclipse và vv Từ những gì tôi đọc được là miễn phí vì bộ đệm ứng dụng đã đóng gần đây. Có cách nào để OS X không bị hoán đổi khi có bộ nhớ không hoạt động
Balchev

Tôi có thể sao chép nó bất cứ lúc nào và có thể tạo màn hình của màn hình hoạt động nếu cần
Balchev

2
Bộ nhớ không hoạt động không phải là bộ nhớ trống.
kinokijuf

2
@kinokijuf, tuy nhiên, nên hoạt động như bộ nhớ trống khi không còn bộ nhớ trống. Nếu bộ nhớ không hoạt động luôn luôn được trao đổi vào đĩa, thì không có điểm thực sự nào trong việc phân biệt hoạt động - không hoạt động.
Pieter

Câu trả lời:


18

Việc hoán đổi rõ ràng đã xảy ra khi các trang RAM không hoạt động thực sự hoạt động.

( Cập nhật: như đã được làm rõ trong một nhận xét, đây không phải là trường hợp của bạn. Vì vậy, những người có cùng vấn đề có thể bỏ qua quy tắc ngang .)

Tức là bạn đã có nhiều chương trình đang chạy và kernel đã tráo đổi một số trang. Sau đó, bạn bỏ một số chương trình. Nhân đánh dấu các trang RAM của họ là không hoạt động. Nhưng nó sẽ không trao đổi các trang trở lại RAM cho đến khi các trang này là cần thiết. Điều này dẫn đến việc có cả các trang không hoạt động và tráo đổi.

Tại sao không tráo đổi trang trong? Bởi vì đó sẽ là cá cược chống lại tỷ lệ cược: về lâu dài bạn thua. Hãy nghĩ về một ví dụ đơn giản: Hai chương trình A và B không phù hợp với RAM cùng một lúc. Chương trình A vẫn đang chạy và tất cả các trang bị tráo đổi thuộc về A. Chương trình B đã thoát ra và tất cả các trang không hoạt động thuộc về B.

Nếu hạt nhân hoán đổi trong các trang của A và ngay sau đó:

  • chương trình A cần truy cập vào các trang của nó -> Bạn thắng - các trang đã có trong RAM.
  • bạn khởi chạy lại B -> Bạn thua - bạn đã "trả" chi phí cho việc đưa các trang vào RAM và bây giờ bạn phải gửi lại chúng.
  • bạn khởi chạy một chương trình khác C -> Bạn bị mất nếu A và C không vừa với RAM cùng một lúc. Nếu họ phù hợp, bạn thậm chí.

Ngoài ra, hãy tính đến việc hoán đổi (ghi vào đĩa) đắt hơn so với trao đổi (đọc từ đĩa). Điều này làm cho "đặt cược" này thậm chí không hấp dẫn hơn.

Nói tóm lại: hãy tin vào kernel của bạn và đừng cố gắng vượt qua nó.


Cập nhật: Hóa ra bộ nhớ không hoạt động không hoạt động vì sử dụng Trình theo dõi hoạt động để đọc bài viết Bộ nhớ hệ thống đã khiến nhiều người tin rằng nó hoạt động. Định nghĩa được đưa ra trong bài viết cho bộ nhớ không hoạt động là chính xác:

Thông tin này có trong RAM nhưng nó không được sử dụng tích cực, nó đã được sử dụng gần đây.

Nhưng ví dụ sau đây hoàn toàn sai lệch và đơn giản hóa quá mức (như ví dụ của tôi là thẳng thắn):

Ví dụ: nếu bạn đã sử dụng Mail và sau đó thoát nó, RAM mà Mail đang sử dụng được đánh dấu là Bộ nhớ không hoạt động. Bộ nhớ không hoạt động có sẵn để sử dụng bởi một ứng dụng khác, giống như Bộ nhớ miễn phí. Tuy nhiên, nếu bạn mở Mail trước khi bộ nhớ Không hoạt động của nó được sử dụng bởi một ứng dụng khác, Mail sẽ mở nhanh hơn vì bộ nhớ Không hoạt động của nó được chuyển đổi sang Bộ nhớ hoạt động, thay vì tải nó từ ổ đĩa chậm hơn.

Tôi đã tìm kiếm thêm các tài nguyên trực tuyến và kết thúc với chủ đề này trong danh sách gửi thư hạt nhân darwin khá nhiều thông tin. Trích dẫn Jim Magee (từ nhóm darwin - tôi nghĩ):

Nói tóm lại, hệ thống VM kernel khi xử lý áp suất bộ nhớ sẽ quét qua các trang đang sử dụng và cố gắng giữ chúng ở trạng thái cân bằng giữa các dấu hiệu hoạt động và không hoạt động. Các trang không hoạt động được quét để sử dụng lại trong khi được đánh dấu là không hoạt động. Nếu chúng đã được sử dụng lại, chúng được đánh dấu là đang hoạt động và một số trang khác phải chuyển từ trạng thái hoạt động sang trạng thái không hoạt động để phát hiện nếu nó đang được sử dụng. Vì vậy, không hoạt động là một cách hiểu sai. Nó là viết tắt của "có thể không hoạt động, hãy thử xác minh điều đó."

Như bạn đã khám phá, số dư nội bộ mà chúng tôi (hiện tại) đang phấn đấu là khoảng 2/3 hoạt động so với 1/3 không hoạt động ...

Điều này giải thích hành vi bạn quan sát. Tức là các trang không hoạt động mà bạn thấy thuộc về các chương trình đang chạy gần đây. Vì vậy, khi bạn khởi động một chương trình mới, các trang không hoạt động sẽ bị tráo đổi. Đồng thời các trang từ các chương trình khác được đánh dấu là không hoạt động để duy trì tỷ lệ 2/1 của hoạt động so với không hoạt động.

Các chủ đề cũng chứa một số gợi ý để tìm hiểu thêm về nội bộ darwin. Ngoài ra còn có một số gợi ý trong trường hợp bạn bắt đầu điều tra việc sử dụng bộ nhớ vì các vấn đề về bóng ném (thường không liên quan đến nó).

Kết luận vẫn giống nhau: Tin tưởng hạt nhân của bạn và đừng cố gắng vượt qua nó. :-)


1
Xin chào, Không chắc bạn hiểu tôi - Tôi đang nói về thời điểm bạn có bộ nhớ trống 100-200 MB, "không hoạt động" 2,6 GB và bắt đầu một chương trình khác, giả sử nhật thực, xcode và vv Điều gì xảy ra là nó không sử dụng những thứ đó 2,6 GB và thay vào đó trao đổi từ bộ nhớ hoạt động. Không chắc chắn nếu bạn hiểu ý tôi. Dù sao, cảm ơn câu trả lời của bạn
Balchev

Điều này là rõ ràng bây giờ. Có lẽ bạn nên thêm ví dụ trong bình luận này vào câu hỏi của bạn. Tôi đã thêm thông tin bổ sung mà tôi nghĩ cung cấp một lời giải thích đầy đủ cho những gì bạn quan sát.
m000

Không chắc chắn nếu tôi sẽ chỉnh sửa câu trả lời ban đầu của tôi. Nó giải thích một trường hợp khác (vì tôi không nhận được câu hỏi của bạn ngay trước bình luận của bạn) và có thể khiến mọi người nhầm lẫn.
m000

Vì vậy, như Radoo nói trong bình luận của mình - "OS X là một con thú đói". Tôi không mong đợi OS X sẽ bị đói nhiều bộ nhớ như vậy (cả Sư tử và bây giờ là Sư tử núi) và đó là lý do tại sao tôi nghĩ rằng có điều gì đó đáng nghi ở đây. Cảm ơn bạn đã trả lời cập nhật của bạn.
Balchev

6

Bạn có thể vô hiệu hóa phân trang một cách an toàn nếu bạn có đủ ram.

Hãy thử các lệnh này.

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
sudo rm /private/var/vm/swapfile*

Sau đó khởi động lại và xác minh rằng quy trình Dynamic_pager không còn chạy.

Hãy chắc chắn rằng không có tệp hoán đổi nào được tạo ra /private/var/vm/.

Để bật lại, hãy thử các lệnh sau:

sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist

Bạn cũng có thể tắt Spotlight để giải phóng thêm ram và giảm hoạt động của đĩa. Các lệnh sau được sử dụng để vô hiệu hóa và kích hoạt Spotlight.

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist
sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.metadata.mds.plist

Tôi đọc trên mạng rằng việc vô hiệu hóa trao đổi trên OSX có thể dẫn đến hành vi không mong muốn của hệ thống và gặp sự cố. Điều này có đúng không?
Balchev

Khi bộ nhớ của bạn thấp, nó sẽ. Nhưng nếu bạn có đủ bộ nhớ, như 8 Gb, nó sẽ không gây ra vấn đề gì.
arundevma

2
Bộ nhớ đủ, như 8 Gb - xin lỗi, thật dễ thương :)
Bombe

0

Bạn không thể làm gì nhiều. Tại sao nó làm điều đó? Bởi vì đó chỉ là cách OS X hoạt động. Phần thú vị là làm thế nào bộ nhớ chiếm dụng ngày càng lớn hơn với mỗi giấc ngủ mà Mac có được.

Bạn có thể làm gì:

  1. Nâng cấp RAM.
  2. Chạy lệnh " thanh trừng " thần thánh để dọn sạch hầu hết bộ nhớ không hoạt động, bất cứ khi nào cần thiết.
  3. Vô hiệu hóa trao đổi http://osxd Daily.com/2010/10/08/mac-virtual-memory-swap/

Xin chào, tôi đã sử dụng lệnh thanh lọc, nhưng hầu hết thời gian nó giải phóng ít hơn một nửa bộ nhớ "không hoạt động". Tôi đọc được rằng việc vô hiệu hóa trao đổi trên OSX có thể dẫn đến hoạt động không mong muốn của hệ thống và gặp sự cố. Vì vậy, tôi đã sử dụng 1) Bây giờ thì ổn với 16 gb :) Chỉ cần lượng bộ nhớ đó sử dụng cho máy chủ, không phải máy tính để bàn :) Cảm ơn vì câu trả lời của bạn
Balchev

Tôi có 16GB trên Macbook pro, đó không phải là máy chủ. :) OS X nổi tiếng là một con thú đói khi nói đến bộ nhớ, đặc biệt là khi nhiều ứng dụng tầm trung / lớn được sử dụng cùng một lúc. Tôi đã quản lý để lấp đầy tất cả 16GB đó mà không cần mở bất kỳ phần mềm chỉnh sửa hình ảnh / video nào, chỉ một số trò chơi và ứng dụng nhỏ. Bộ nhớ không hoạt động là khoảng 4GB ...

Bạn cũng phải tính đến việc nhiều ứng dụng OS X đã 64bit. Các ứng dụng 64 bit phân bổ nhiều bộ nhớ hơn các ứng dụng 32 bit, do không gian địa chỉ ngày càng lớn hơn.

0

Hệ thống đang hoạt động như thiết kế. Ngay cả khi không có áp lực bộ nhớ, việc viết một số trang không thể bị loại bỏ nhưng gần đây không được sử dụng để trao đổi khi hệ thống không bận rộn. Bằng cách đó, nếu có áp lực bộ nhớ sau này, các trang này có thể bị xóa khỏi RAM mà không cần phải ghi chúng trước để trao đổi trong khi hệ thống đang bận.


1
Nó được thiết kế tồi rồi. quá tích cực trong việc phân bổ và sử dụng không gian trao đổi.
mendota

Tại sao nó quan trọng? Nếu có nhiều trao đổi miễn phí, phân bổ không gian trao đổi là vô hại. Điều này đặc biệt đúng khi trao đổi không chứa dữ liệu cần thiết vì loại bỏ phân bổ không có chi phí. Đây là thiết kế tốt - thực hiện công việc khó khăn khi nó gần như không tốn kém thay vì trì hoãn nó để sau này khi hệ thống chịu áp lực.
David Schwartz

2
thiết kế tồi khi nó quá hung hăng và gây ra tình trạng nói lắp hoặc treo máy trong các chương trình, nó nhầm thẻ là không hoạt động và bắt đầu chuyển sang trao đổi. trong khi đó, có tám hợp đồng biểu diễn miễn phí trong RAM: /
mendota

Tôi đồng ý với mendota. Khi tôi hoàn toàn vô hiệu hóa trao đổi, hệ thống của tôi sẽ hoạt động trơn tru mà không bị nói lắp.
Anton Kuzmin

@AntonKuzmin Điều đó thực sự không liên quan gì đến câu hỏi này. Nếu bạn đọc câu hỏi này, nó không nói gì về nói lắp hay bất kỳ vấn đề gì.
David Schwartz
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.