Mengapa Windows 2008 menggunakan swap sebelum memori penuh?


9

Saya mengelola server Windows 2008 (well, di Amazon EC2) yang menjalankan IIS dan aplikasi Web .NET4. Saya mendapat peringatan memori beberapa hari yang lalu dan pergi dan melihat, dan tentu saja proses memori telah tumbuh seiring waktu melalui semacam kebocoran lambat. Itu tidak tumbuh banyak, seperti 60M ke 200M, tapi cukup banyak yang terjadi dengan kotak yang melampaui ambang batas kami yang cukup rendah (75%) untuk mematikan monitor.

Saya mendaur ulang kumpulan aplikasi dan memori membebaskan, dan saya perhatikan setelah meninjau statistik bahwa ruang swap digunakan secara signifikan dan lebih dari 1 GB dibebaskan dengan daur ulang itu.

Mungkin ini adalah pertanyaan dasar, tapi saya pria UNIX dan saya terbiasa bertukar tidak terbiasa sampai Anda kehabisan memori. Kotak ini tidak pernah melebihi 75% penggunaan memori. Apakah ini Windows atau .NET atau Amazon? Saya menduga ada kebocoran memori yang jauh lebih besar dalam aplikasi ini daripada yang diduga - tidak bocor dari 60M ke 200M, bocor dari 60M ke 1.2GB, tapi banyak dari itu entah bagaimana menjadi "dingin" dan terdorong untuk bertukar?

Saya memiliki set daur ulang memori pada kumpulan aplikasi, tetapi memicu memori kotak penuh, sehingga aplikasi ini bisa menjadi sangat, sangat besar sebelum didaur ulang secara otomatis.

Saya dapat mengatur daur ulang "berjangka waktu" secara teratur, tetapi itu solusinya, saya akan meminta dev untuk memperbaiki aplikasi tetapi perlu memahami apa yang terjadi di sini dengan penggunaan swap untuk memastikan saya memahami hal ini dengan benar.

Edit dengan info lebih lanjut: memori instance: swap 1,7 GB: 4,5 GB

Saya melihat proses w3wp.exe di taskmgr yang menunjukkan bahwa Memory: 211,000k. Tetapi ketika saya menyalakannya kembali (itu ada di kumpulan aplikasi sendiri, dan itu satu-satunya aplikasi di kotak), penggunaan memorinya turun ke titik awal normal 60M dan seperti 1 GB + swap juga dibebaskan. Di taskmgr saya baru saja mengaktifkan Memory (Private Working Set) biasa, tetapi melihat perubahan swap melalui pemantauan saya yang lain (Cloudkick). Kembali dan melihatnya hari ini, memori kembali hingga 195 juta pada proses (total 1,2 GB) dan swap telah merayap dari 1,0 GB menjadi 1,1 GB, tetapi tidak semua jalan kembali ke tempat semula (grafik dari waktu ke waktu, itu adalah lambat merayap).

Saya kurang peduli tentang aplikasi khusus ini dan lebih peduli tentang pemahaman saja ketika Windows bertukar dan bagaimana menggunakannya, dan apa yang harus diperhatikan tentang mengingat memori Windows dan penggunaan swap secara umum.


4
BTW, setidaknya Linux akan menukar halaman secara oportunis jika mereka tidak diakses dalam waktu yang lama, bahkan jika sistem tidak mendekati untuk menggunakan semua RAM yang tersedia. Hal ini dilakukan untuk membebaskan memori untuk cache disk, buffer, dll.
EEAA

Berapa banyak memori yang dimiliki oleh instance ini? Apakah Anda mengatakan bahwa proses w3wp.exe mencapai 1GB? Apakah ini satu-satunya situs yang berjalan di kumpulan aplikasi itu?
Kev

@ KevΩ Menambahkan lebih banyak info dalam Q atas permintaan Anda.
Ernest Mueller

@ErikA, baik untuk tahu, saya kira saya sudah mendengarkan orang-orang yang mengatakan "jika Anda bertukar Anda sudah memiliki kinerja yang buruk, matikan saja swap sama sekali dan jangan kehabisan RAM" jadi saya tidak perlu t menonton swap sebanyak itu.
Ernest Mueller

Jika disk Anda meronta-ronta ke disk, itu benar. Jika swap, itu membuat ruang untuk buffer dan semacamnya.
Bart Silverstrim

Jawaban:


17

Windows dan linux memiliki dua strategi halaman / swap yang berbeda.

Linux

Linux ingin menghindari penggunaan ruang swap sama sekali, dan menunggu hingga saat terakhir yang memungkinkan. Jika Anda melihat sejumlah besar swap di linux, sistem Anda kemungkinan sedang atau sedang dalam masalah. Strategi ini baik untuk meminimalkan disk i / o secara keseluruhan, yang merupakan bagian paling lambat dari sistem Anda, tetapi lebih lemah untuk sistem dengan periode beban ringan dan berat yang berganti-ganti (dan sejujurnya, itulah sebagian besar dari kita). Saat-saat ketika beban Anda sudah berat sekarang akan dibebani oleh disk "ekstra" i / o, atau, dengan kata lain, Anda perlu merancang server Anda dengan tujuan untuk memiliki cukup ram yang tidak Anda tukarkan bahkan selama waktu muat yang diharapkan tertinggi.

Windows

Windows ingin memperlakukan memori hanya sebagai cache dari file halaman. Memori asli Anda selalu di disk, tetapi akan membaca / menulis dari "cache" terlebih dahulu jika bisa. Strategi ini bagus untuk menghabiskan waktu di malam hari; ketika sistem sibuk dan perlu menukar halaman, halaman saat ini sudah ada di disk dan setengah dari pekerjaan sudah dilakukan. Pendekatan ini masuk akal kembali ketika Windows masih muda, 32MB (lupa GB) masih banyak RAM, dan sering perlu menggunakan ruang swap diberikan. Bahkan hari ini ini bagus untuk beban kerja yang berganti-ganti antara beban ringan dan sibuk, karena membantu menyebarkan disk i / o lebih merata dari waktu ke waktu.

Versi Windows modern memiliki optimisasi tambahan - seperti SuperFetch - untuk memuat sebelumnya dan menyiapkan halaman memori pada disk dan dalam RAM ketika beban dinyatakan ringan, untuk membantu menghindari kebutuhan penulisan disk tambahan saat memuat program untuk pertama kalinya. Semua ini berarti Anda dapat merancang sistem Anda hanya membutuhkan RAM yang cukup untuk sesuatu yang kurang dari beban yang diharapkan tertinggi, sehingga Anda masih dapat memiliki setidaknya kinerja yang dapat diterima sepanjang waktu, dengan biaya yang lebih rendah.

Konvergensi

Konsep ini mengukur atau memprediksi beban dalam lingkungan pengujian terlebih dahulu dan kemudian mengalokasikan sumber daya produksi ketika beban diketahui adalah pengembangan yang relatif baru dalam pembangunan sistem, dimungkinkan, atau setidaknya praktis, sebagian dengan munculnya server virtual dan kemudian cloud . Tergantung pada beban Anda, Anda bahkan dapat merancang sistem sedemikian rupa sehingga tidak perlu bertukar sama sekali. Dalam kasus ini, Windows memungkinkan Anda untuk mematikan paging dan berperilaku lebih seperti sistem linux. Namun, Anda harus berhati-hati; jika desain sistem Anda membutuhkan lebih banyak memori dari yang diharapkan, Anda bisa mendapatkan masalah dengan cara ini.

Di sisi lain, kernel linux modern lebih bersedia untuk bertukar ke disk secara oportunis daripada sebelumnya. Jadi perbedaan dalam strategi manajemen memori antara kedua sistem masih ada, tetapi sekarang kurang berbeda dari dulu. Kedua sistem memiliki kelebihan masing-masing, dan masing-masing mengawasi yang lain untuk melihat kemajuan mana yang dapat mereka salin.


Sangat spesifik pada strategi ujung Windows, terima kasih! Juga divalidasi oleh Microsoft KB ini saya temukan ... support.microsoft.com/kb/2267427
Ernest Mueller

1
Linux tidak perlu menunggu momen terakhir yang mungkin kecuali Anda secara eksplisit mengatur vm.swappiness = 0. Pada nilai default 60, itu akan menukar halaman yang belum tersentuh untuk sementara.
Kjetil Joergensen

@KjetilJoergensen pastikan Anda membaca bagian terakhir tentang konvergensi.
Joel Coel

1
@ JoelCoel Saya tanpa syarat menarik kembali kritik saya :)
Kjetil Joergensen

7

Windows (dan Linux & OS mirip Unix lainnya) akan memindahkan halaman yang belum pernah digunakan selama beberapa waktu ke disk untuk memberikan ruang bagi buffer dan cache untuk mempercepat aktivitas I / O yang aktif. Juga aplikasi akan sering mengalokasikan lebih banyak memori daripada yang akan segera digunakan - ini dapat mendorong Kernel untuk halaman beberapa hal yang belum tersentuh di latar belakang, sehingga aplikasi mengatakan tidak melihat penundaan paging ketika mereka tiba-tiba mulai menggunakan alokasi itu.

Di Linux Anda dapat mengubah (atau memblokir) perilaku ini dengan mengubah nilai "swappiness" yang relevan di sistem /procfile - tidak diragukan lagi ada nilai registri yang dapat Anda atur untuk mengubah cara Windows berperilaku dalam hal ini juga.

Hal lain yang perlu diperhatikan adalah bahwa ketika sesuatu telah paged dan kemudian dibaca kembali, kernel tidak akan menghapusnya dari file halaman sampai file tersebut penuh atau halaman dalam RAM diubah. Dengan cara ini jika perlu halaman yang dipotong lagi dapat melakukannya tanpa harus benar-benar menulis halaman ke disk: konten sudah ada di sana. Hal ini dapat sangat meningkatkan kinerja dalam situasi di mana memory-over-commit menjadi sangat buruk sehingga menyebabkan meronta-ronta file halaman (sejumlah besar halaman terus-menerus dipetakan masuk dan keluar). Anda mungkin menemukan bahwa beberapa data didorong oleh kebocoran memori tersebut, dan sejak itu telah dibaca kembali tetapi tidak dihapus dari disk seandainya halaman tersebut perlu dipetakan atau RAM untuk membuat ruang lagi nanti. Di Linux, nilai "SwapCached" di/proc/meminfomenunjukkan berapa banyak data yang ada di halaman yang memiliki salinan identik dalam RAM dan pada disk. Windows tidak diragukan lagi menggunakan optimasi yang sama (atau sesuatu yang serupa) tapi saya tidak tahu di mana harus mencari untuk melihat seberapa banyak ini terjadi (tidak diragukan lagi ada penghitung monitor kinerja yang relevan Anda dapat meminta).

tl; dr: Ini normal. Kernel OS modern akan mencoba menjadi pintar dan memaksimalkan berapa banyak RAM yang dapat digunakan sebagai cache untuk menyelamatkan operasi I / O, dan kadang-kadang data akan disalin dalam disk dan RAM untuk menghemat I / O jika perlu untuk mengeluarkan bit-bit itu keluar RAM nanti. Kemungkinannya, berlawanan dengan intuisi mungkin, bahwa penggunaan file halaman ini dalam dua cara ini, bahkan jika Anda saat ini kekurangan RAM, meningkatkan kinerja Anda secara keseluruhan daripada menguranginya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.