Mengapa OS X menggunakan swap ketika ada banyak "memori tidak aktif"?

22

Saya menggunakan OS X dari beberapa bulan (Singa dan sekarang Singa Gunung). Saya memiliki 8 GB pada mini saya dan hampir setiap hari sekarang mendekati itu. Pada mesin Windows 7 dengan 8 GB saya tidak pernah memiliki masalah seperti itu. Bagaimanapun, saya membaca dari internet, bahwa memori yang tidak aktif adalah cache aplikasi dari program-program yang baru saja ditutup dan dapat digunakan untuk pembukaan kembali yang lebih cepat. Dan memori tidak aktif ini dapat dilepaskan ke aplikasi baru jika diperlukan. Itu tidak dirilis. Sebaliknya OS X mulai bertukar. Jadi pertanyaan saya adalah mengapa OS X menggunakan swap ketika ada banyak "memori tidak aktif"? Di sini layar yang menunjukkan apa yang saya maksud:

masukkan deskripsi gambar di sini

Saya sangat berharap ada yang jauh untuk membuat OS X untuk menggunakan mereka 2,69 GB sebelum mulai bertukar. Saya benar-benar melakukannya.

Balchev
sumber
Ya itu aneh. Apakah ini satu aplikasi yang menggunakan semua RAM? Mungkin OSX membatasi aplikasi untuk tidak menggunakan lebih dari 80% RAM sekaligus. Tidak aktif bukan berarti gratis. Itu disediakan untuk sesuatu.
Piotr Kula
Tidak - banyak aplikasi, Peramban, Eclipse, dll. Dari apa yang saya baca, ini gratis karena merupakan cache aplikasi yang baru saja ditutup. Seharusnya ada cara untuk membuat OS X untuk tidak bertukar ketika ada memori yang tidak aktif
Balchev
Saya dapat mereproduksinya kapan saja dan dapat membuat layar monitor aktivitas jika diperlukan
Balchev
2
Memori tidak aktif bukanlah memori bebas.
kinokijuf
2
@kinokijuf seharusnya bertindak sebagai memori bebas ketika tidak ada memori kosong yang tersisa. Jika memori tidak aktif selalu ditukar ke disk, tidak ada gunanya membuat perbedaan aktif - tidak aktif.
Pieter

Jawaban:

18

Pertukaran tampaknya terjadi ketika halaman RAM tidak aktif sebenarnya aktif.

( Pembaruan: seperti yang telah diklarifikasi dalam komentar, ini bukan kasus Anda. Jadi, orang dengan masalah yang sama dapat beralih ke aturan horizontal .)

Yaitu Anda memiliki banyak program yang berjalan dan kernel menukar beberapa halaman. Kemudian Anda berhenti dari beberapa program. Kernel menandai halaman RAM mereka sebagai tidak aktif. Tetapi itu tidak akan menukar halaman kembali ke RAM sampai halaman ini diperlukan. Ini menghasilkan halaman yang tidak aktif dan tidak aktif.

Mengapa tidak terlebih dahulu bertukar halaman? Karena itu akan bertaruh melawan peluang: dalam jangka panjang Anda kalah. Mari kita pikirkan contoh sederhana: Dua program A dan B yang tidak sesuai dengan RAM secara bersamaan. Program A masih berjalan dan semua halaman yang ditukar menjadi milik A. Program B telah berhenti dan semua halaman tidak aktif milik B.

Jika kernel terlebih dahulu bertukar halaman A dan segera setelahnya:

  • Program A perlu mengakses halamannya -> Anda menang - halaman sudah ada dalam RAM.
  • Anda meluncurkan B lagi -> Anda kehilangan - Anda "membayar" biaya untuk membawa halaman ke RAM dan sekarang Anda harus mengirimnya kembali.
  • Anda meluncurkan program lain C -> Anda kehilangan jika A dan C tidak sesuai dengan RAM pada saat yang sama. Jika cocok, Anda seimbang.

Juga pertimbangkan bahwa menukar (menulis ke disk) lebih mahal daripada menukar (membaca dari disk). Yang membuat "taruhan" ini bahkan lebih tidak menarik.

Singkatnya: percayai kernel Anda dan jangan mencoba mengakali itu.


Pembaruan: Ternyata memori tidak aktif tidak berfungsi karena Menggunakan Activity Monitor untuk membaca artikel Memori Sistem telah membuat banyak orang percaya itu berfungsi. Definisi yang diberikan dalam artikel untuk memori tidak aktif benar:

Informasi ini dalam RAM tetapi tidak aktif digunakan, ini baru saja digunakan.

Tetapi contoh berikut ini benar-benar menyesatkan dan terlalu disederhanakan (seperti contoh saya jujur):

Misalnya, jika Anda telah menggunakan Mail dan kemudian berhenti, RAM yang digunakan Mail ditandai sebagai Memori tidak aktif. Memori tidak aktif tersedia untuk digunakan oleh aplikasi lain, seperti halnya memori bebas. Namun, jika Anda membuka Mail sebelum memori tidak aktifnya digunakan oleh aplikasi yang berbeda, Mail akan terbuka lebih cepat karena memori tidak aktif dikonversi ke memori aktif, daripada memuatnya dari drive yang lebih lambat.

Saya mencari lebih banyak sumber daring dan berakhir di utas ini di milis darwin kernel yang cukup informatif. Mengutip Jim Magee (dari tim darwin - saya pikir):

Singkatnya, sistem VM kernel ketika berhadapan dengan tekanan memori memindai melalui halaman yang digunakan dan mencoba untuk menjaga mereka dalam keseimbangan antara tanda aktif dan tidak aktif. Halaman tidak aktif dipindai untuk digunakan kembali sementara ditandai sebagai tidak aktif. Jika mereka telah digunakan kembali, mereka ditandai sebagai aktif dan beberapa halaman lain harus pindah dari status aktif ke tidak aktif untuk mendeteksi jika sedang digunakan. Jadi, tidak aktif adalah keliru. Ini adalah singkatan untuk "mungkin tidak aktif, mari kita coba verifikasi itu."

Seperti yang Anda temukan, keseimbangan internal yang kami (saat ini) perjuangkan adalah sekitar 2/3 aktif vs 1/3 tidak aktif ...

Ini menjelaskan perilaku yang Anda amati. Yaitu halaman tidak aktif yang Anda lihat milik menjalankan program yang belum digunakan baru-baru ini. Jadi, ketika Anda menjalankan program baru, halaman tidak aktif diganti. Pada saat yang sama halaman dari program lain ditandai sebagai tidak aktif untuk mempertahankan rasio 2/1 dari aktif dan tidak aktif.

The benang juga berisi beberapa saran untuk mempelajari lebih lanjut tentang internal darwin. Ada juga beberapa saran jika Anda mulai menyelidiki penggunaan memori karena masalah bola pantai (yang biasanya tidak ada hubungannya dengan itu).

Kesimpulannya tetap sama: Percayai kernel Anda dan jangan mencoba mengakali itu. :-)

m000
sumber
1
Hai, Tidak yakin Anda mengerti saya - Saya berbicara untuk saat ketika Anda memiliki memori bebas 100-200MB, 2,6 GB "tidak aktif" dan memulai program lain, katakanlah gerhana, xcode, dll. Yang terjadi adalah ia tidak menggunakan itu 2,6 GB dan sebagai gantinya bertukar dari memori aktif. Tidak yakin jika Anda mendapatkan apa yang saya maksud. Lagi pula, terima kasih atas jawaban Anda
Balchev
Ini sudah jelas sekarang. Mungkin Anda harus menambahkan contoh di komentar ini ke pertanyaan Anda. Saya telah menambahkan informasi tambahan yang menurut saya memberikan penjelasan yang memadai untuk apa yang Anda amati.
m000
Tidak yakin apakah saya akan mengedit jawaban asli saya. Ini menjelaskan kasus yang berbeda (karena saya tidak mendapatkan pertanyaan Anda tepat sebelum komentar Anda) dan dapat membingungkan orang.
m000
Jadi seperti yang dikatakan Radoo dalam komentarnya - "OS X adalah binatang yang lapar". Saya tidak berharap OS X menjadi memori banyak lapar (baik Singa dan sekarang Singa Gunung) dan itulah mengapa saya pikir ada sesuatu yang mencurigakan di sini. Terima kasih atas jawaban Anda yang diperbarui.
Balchev
6

Anda dapat menonaktifkan paging dengan aman jika Anda memiliki ram yang cukup.

Coba perintah ini.

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

Kemudian mulai ulang dan verifikasi bahwa proses dynamic_pager tidak lagi berjalan.

Pastikan tidak ada swapfile yang dibuat di /private/var/vm/.

Untuk mengaktifkan kembali coba perintah berikut:

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

Anda juga dapat menonaktifkan Spotlight untuk membebaskan lebih banyak ram dan mengurangi aktivitas disk. Perintah berikut digunakan untuk menonaktifkan dan mengaktifkan 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
arundevma
sumber
Saya membaca di internet bahwa menonaktifkan swap pada OSX dapat menyebabkan perilaku yang tidak terduga dari sistem dan crash. Apakah ini benar?
Balchev
Ketika ingatan Anda rendah, itu akan terjadi. Tetapi jika Anda memiliki cukup memori, seperti 8 Gb, itu tidak akan menyebabkan masalah.
arundevma
2
"Cukup memori, seperti 8 Gb" - maaf, itu sangat lucu ... :)
Bombe
0

Tidak banyak yang bisa Anda lakukan. Kenapa bisa begitu? Karena begitulah cara kerja OS X. Bagian yang menarik adalah bagaimana memori yang ditempati semakin besar dengan setiap tidur Mac.

Apa yang bisa kau lakukan:

  1. Tingkatkan RAM.
  2. Jalankan perintah suci " pembersihan " untuk menghapus sebagian besar memori tidak aktif, kapan pun diperlukan.
  3. Nonaktifkan swap http://osxdaily.com/2010/10/08/mac-virtual-memory-swap/

sumber
Hai, saya menggunakan perintah pembersihan, tetapi sebagian besar waktu itu membebaskan kurang dari setengah dari memori "tidak aktif". Saya membaca bahwa menonaktifkan swap pada OSX dapat menyebabkan perilaku yang tidak terduga dari sistem dan crash. Jadi saya pergi dengan 1) Sekarang baik-baik saja dengan 16 gb :) Hanya saja jumlah penggunaan memori untuk server, bukan desktop :) Terima kasih untuk jawaban Anda
Balchev
Saya memiliki 16GB di Macbook pro saya, itu bukan server. :) Sudah dikenal OS X adalah binatang yang lapar ketika datang ke memori, terutama ketika beberapa aplikasi menengah / besar digunakan pada saat yang sama. Saya berhasil mengisi semua 16GB itu tanpa membuka perangkat lunak pengeditan gambar / video, hanya beberapa permainan dan aplikasi kecil. Memori tidak aktif sekitar 4GB ...
Anda juga harus memperhitungkan bahwa banyak aplikasi OS X sudah 64bit. Aplikasi 64bit mengalokasikan lebih banyak memori daripada aplikasi 32bit, karena mengatasi ruang yang semakin besar.
0

Sistem ini berfungsi seperti yang dirancang. Bahkan ketika tidak ada tekanan memori, masuk akal untuk menulis beberapa halaman yang tidak dapat dibuang tetapi belum lama ini digunakan untuk bertukar ketika sistem tidak sibuk. Dengan begitu, jika ada tekanan memori kemudian, halaman-halaman ini dapat diusir dari RAM tanpa harus terlebih dahulu menulisnya untuk bertukar saat sistem sedang sibuk.

David Schwartz
sumber
1
itu didesain dengan buruk. terlalu agresif dalam mengalokasikan dan menggunakan ruang swap.
mendota
Mengapa itu penting? Jika ada banyak swap gratis, mengalokasikan ruang swap tidak berbahaya. Ini terutama benar ketika swap tidak berisi data yang diperlukan karena menghapus alokasi tidak ada biaya. Ini adalah desain yang bagus - melakukan kerja keras ketika hampir tanpa biaya daripada menunda untuk nanti ketika sistem berada di bawah tekanan.
David Schwartz
2
itu desain yang buruk ketika terlalu agresif dan menyebabkan gagap atau hangup dalam program yang salah tandai sebagai tidak aktif dan mulai beralih ke swap. Sementara itu ada delapan pertunjukan gratis di RAM: /
mendota
Saya setuju dengan mendota. Setelah saya sepenuhnya menonaktifkan swap, sistem saya berjalan dengan lancar tanpa gagap.
Anton Kuzmin
@AntonKuzmin Itu benar-benar tidak ada hubungannya dengan pertanyaan ini. Jika Anda membaca pertanyaan ini, ia tidak mengatakan apa-apa tentang gagap atau masalah apa pun.
David Schwartz