Berapa memori maksimum yang bisa digunakan oleh kumpulan situs / situs web IIS6?

8

Saya memiliki server IIS 6 yang berjalan pada Windows 2003 SP2 x86. Server memiliki 4GB RAM dan berjalan secara konsisten dengan alokasi 2GB.

Saya menyadari bahwa dengan x86, server tidak akan menggunakan semua 4GB RAM dan ruang aplikasi juga terbatas tetapi proses IIS tampaknya terbatas di tempat lain. w3wp.exe tidak pernah mengalokasikan lebih dari 500MB dan saya terkadang mendapatkan pengecualian OutOfMemory dari aplikasi .NET yang sibuk (ada beberapa aplikasi yang berjalan, masing-masing dengan kumpulan aplikasi terpisah).

Berapa memori maksimum yang bisa digunakan oleh kumpulan situs / situs web IIS6?

Robin M
sumber

Jawaban:

7

Aplikasi di bawah Windows x86 terbatas pada 2gb / ea. Anda dapat mengubah ini dengan menambahkan flag / 3gb ke boot.ini, tetapi ini dapat menyebabkan perilaku aplikasi yang tidak terduga dan harus digunakan dengan hati-hati. MS secara resmi tidak mendukung ini ( http://technet.microsoft.com/en-us/library/bb124810.aspx )

Batas memori IIS dapat diatur di bawah tab Daur Ulang di kumpulan aplikasi yang relevan.

Bagaimana Anda menentukan bahwa aplikasi tersebut tidak pernah melebihi 500MB? Jika Anda menggunakan Task Manager, ingatlah bahwa ini jarang (jika pernah) merupakan representasi akurat dari penggunaan memori sebagaimana Windows memahaminya. Gunakan Process Explorer: http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

Ada sejumlah pertanyaan relevan lainnya:

  • Apakah ada kesalahan yang dicatat di Log Acara Anda?
  • Apakah ini merupakan baris kode tertentu yang melempar pengecualian? Jika demikian, apakah pengecualian OutOfMemory ini sebenarnya merupakan masalah IIS, atau masalah kode?
  • Apakah Anda membatasi kumpulan aplikasi Anda sama sekali dengan pengaturan Recyling?
  • Apakah ada layanan lain yang berjalan di mesin ini?

Kemungkinan besar, IIS, ASP.NET, dan semua bagasi terkaitnya berjalan melawan batas 2GB meskipun Windows Task Manager tidak menunjukkannya. Pengaturan Batas daur ulang atau peningkatan ke x64 mungkin akan membuat perbedaan besar.

sh-beta
sumber
3

kadang-kadang dapatkan pengecualian OutOfMemory dari aplikasi .NET yang sibuk

Jawaban untuk ini terlalu rumit untuk ditampung dalam suatu jawaban. Lihat " Tuning. Performa Aplikasi NET " untuk perawatan lengkap dari subjek.

Berikut ini ringkasan yang sangat disederhanakan (tapi masih cukup bagus) dari Bruno Jouhier :

Lebih jauh lagi, .NET runtime tidak membiarkan Anda mencapai 2 GB. Pengumpul sampah bekerja dengan menyalin objek hidup, sehingga diperlukan ruang yang cukup untuk melakukan salinannya.

Edit:

Ini usaha saya untuk penjelasan ...

Jika Anda bertanya-tanya berapa ukuran maksimum memori proses pekerja (seperti yang dilaporkan oleh Task Manager) untuk Proses Pekerja ASP.NET di x86, jawabannya adalah "itu tergantung" .

Dalam setiap jenis kode yang dikelola seperti Java atau .NET, programmer melepaskan kendali memori yang baik sebagai penebusan dosa karena tidak harus berurusan dengan pointer. Saat program dijalankan, Heap dan Stack akan dibersihkan secara berkala oleh Pengumpul Sampah .

Khususnya dalam hal ASP.NET, pengumpul sampah berjalan di dalam proses pekerja yang sama dengan situs web. GC mengkonsumsi memori sendiri. Berapa banyak memori sepenuhnya merupakan fungsi dari bagaimana kode aplikasi Anda ditulis. Satu aplikasi mungkin dapat menggunakan memori 1,8GB sementara yang lain mungkin tersedak 500MB. Untuk memahami alasannya , Anda perlu membuat profil aplikasi spesifik Anda.

Portman
sumber
Saya setuju bahwa debugging pengecualian OutOfMemory adalah rumit - terima kasih atas tautannya. Namun, saya bertanya bagaimana memori terbatas dan harus dimungkinkan untuk menjawabnya.
Robin M
2

Setiap proses pada OS Windows x86 terbatas pada 2gb kecuali Anda telah menetapkan sakelar / 3gb di file boot.ini Anda, yang dalam hal ini proses dapat menggunakan 3gb.

Steve Evans
sumber
Ya, tapi saya tidak mendekati 2GB untuk suatu proses?
Robin M
2

Dari posting blog ini "Rekomendasi untuk Pengaturan Kumpulan Aplikasi SharePoint" :

Berfokus pada fisik saya biasanya suka membatasi kumpulan aplikasi sekitar 800MB hingga 1200 MB maks pada aplikasi 32 bit dengan kumpulan aplikasi sangat sedikit tergantung pada jumlah dan jumlah memori. Di server dengan 2 GB RAM saya akan atur di sekitar 800MB maks. Pada server RAM 4GB sekitar 1GB dan lebih jika lebih dengan maks sekitar 1200. Pada front end web 64 bit dengan memori 8-16 GB Saya pernah mendengar pengaturan RAM 2GB atau bahkan membiarkannya, alih-alih membatasinya.

Anda benar-benar perlu membuat profil karena ini benar-benar dapat tumbuh untuk proses dan cache. Semakin besar jumlah memori dan semakin besar beban semakin tinggi proses pekerja akan tumbuh. Ketika orang-orang bertanya tentang cara mengkonfigurasi kumpulan aplikasi, ini adalah tempat mereka biasanya bertanya berapa angka yang seharusnya. Apa yang Anda lakukan di sini secara eksplisit membatasi kumpulan aplikasi untuk menggunakan lebih banyak memori. Perhatikan pengaturan ini ada di tab daur ulang, ada alasannya.

Ketika kumpulan aplikasi mencapai maks, itu tidak seperti pengaturan prosesor maks. Ini akan menggilir proses pekerja yang seperti reboot kecil atau mirip dengan iisreset, tetapi tidak karena kadang-kadang kita ingin ini terjadi sehingga kita dapat melepaskan memori kita. Anda benar-benar tidak ingin bersepeda lebih dari beberapa kali per periode 24 jam di dunia yang ideal. Saya pernah mendengar beberapa mencoba siklus tepat sebelum puncak pagi terjadi sehingga mereka memiliki sebagian besar memori yang tersedia, kemudian siklus tepat di akhir hari sebelum pencadangan atau perayapan dimulai.

Dari pengalaman saya, 800 MB adalah treshold untuk mesin 32bit (RAM 2-4 GB). Ini mendaur ulang kumpulan aplikasi sebelum membuang "kehabisan memori" pengecualian.

percikan
sumber
2

Pastikan Anda tidak mengatur ukuran memori virtual pada kumpulan aplikasi Anda. Jika Anda menetapkan nilai ini ke angka di luar rentang yang diizinkan, itu akan kembali ke 512MB. Lihat KB923197 .

Juga perhatikan bahwa jika Anda menjalankan aplikasi ASP.Net, ASP.Net akan mendaur ulang kumpulan pada 60% dari batas memori 2GB, atau 1,2 GB. Ini bukan skenario Anda ~ 500, tetapi pada apppools 32 bit dengan penggunaan memori yang besar, kami terkadang men-tweak ini untuk mendapatkan sedikit lebih banyak memori.

<system.web> 
  <processModel memoryLimit="80" />
</system.web> 
Christopher_G_Lewis
sumber
1

Pada Windows 2003 Anda dapat mengatur Ekstensi Alokasi Fisik (PAE) untuk menggunakan semua memori. Memori default untuk apppool IIS6 adalah 5MB .

Komunitas
sumber
Oke, tapi itu tidak menjelaskan mengapa prosesnya dibatasi hingga 500MB. Memori default untuk kumpulan aplikasi menarik tetapi tidak benar-benar relevan atau berguna, maaf!
Robin M
Apakah Anda menjalankan SQL pada kotak yang sama?
Tidak. SQL tidak ada di kotak yang sama. Ini terbatas pada web / ftp / smtp menggunakan IIS.
Robin M