memori babi w3wp.exe

8

Pada instalasi Small Business Server 2011 seluruh proses w3wp.exe tampaknya menggunakan banyak memori yang tidak proporsional. Instalasi SBS out-of-the-box hadir dengan total 7 situs dan 20 kumpulan aplikasi ASP.NET (Sharepoint, Exchange, WSUS dan hal-hal khusus SBS seperti Remote Web Workplace).

Selusin proses w3wp.exe yang dihasilkan cenderung mengkonsumsi lebih dari 4 GB memori server dari waktu ke waktu dengan kumpulan aplikasi puncak menjadi milik WSUS dengan sekitar 800 MB di set kerja. Secara manual mendaur ulang kumpulan aplikasi melalui IIS MMC membantu sementara mengurangi penggunaan memori (proses w3wp.exe menyusut kembali menjadi 10 MB, beberapa dari mereka menumbuhkan kembali dengan cepat), tetapi jelas bukan sesuatu yang ingin dilakukan admin sepanjang hari. Saya tidak dapat menemukan rekomendasi untuk daur ulang otomatis dari kumpulan aplikasi pra-instal SBS, jadi saya agak enggan untuk "lakukan saja" pada sistem produksi.

Penelitian saya di internet tentang bagaimana membatasi ini hanya memunculkan sejumlah posting yang menyatakan bahwa konsumsi memori w3wp tidak akan merugikan tetapi menguntungkan kinerja karena memori akan "dibebaskan ketika dibutuhkan oleh aplikasi lain". Masalahnya adalah itu tidak berhasil:

  • untuk satu, SBS adalah server multi-peran, salah satu peran (yang utama) menjadi penyimpanan jaringan CIFS yang sangat diuntungkan dari cache sistem file yang lagi-lagi bergantung pada memori yang "bebas" seperti dalam "tidak digunakan oleh proses lain dalam cara "- kumpulan aplikasi ASP.NET yang jarang melihat pengguna dan memakan memori kontraproduktif
  • hal lain adalah bahwa saya masih harus melihat penurunan substansial dari contoh w3wp konsumsi memori pada kekurangan memori - apa yang saya lihat adalah penurunan kecil secara signifikan kurang dari 100 mb dan sebaliknya bertukar berlebihan - lagi-lagi melukai kinerja

Saya hampir tidak pernah mengelola aplikasi IIS atau ASP.NET, jadi ide apa pun tentang cara memangkas persyaratan memori secara efektif untuk kumpulan aplikasi dipersilahkan.

the-wabbit
sumber
Apa yang dilakukan aplikasi ASP.NET ini? Saya telah melihat w3wp.exe menggunakan banyak memori ketika sebuah aplikasi gagal menutup koneksi dengan Linq-To-SQL atau Entity Framework.
Nate
Ada beberapa. Banyak yang terkait dengan Exchange seperti OWA / OMA dan layanan Sync, satu yang sangat besar adalah WSUS, beberapa digunakan untuk Sharepoint atau situs khusus SBS (CompanyWeb, Remote Web Workplace)
yang disesuaikan

Jawaban:

7

Selamat datang di dunia indah SBS. Persyaratan yang disarankan untuk RAM = 10GB ... dan MEMBUTUHKAN minimal 8gb. ( menurut Microsoft .) untuk alasan yang bagus. Ini bukan mesin yang diminyaki dengan baik ... sangat ceroboh, kembung, dan memiliki segalanya di bawah matahari yang disatukan. Semakin banyak RAM yang bisa Anda lemparkan ke kotak itu ... semakin baik. Sayangnya, Anda dibatasi maksimal 32 GB. Imho ... yang konyol.

TheCompWiz
sumber
Saya kira saya harus sedikit memperbaiki jawaban saya. Jika Anda khawatir dengan jumlah RAM yang dikonsumsi, Anda akan menghemat banyak waktu / sakit kepala dengan melakukan salah satu dari yang berikut: A) Jangan menggunakan SBS ... gunakan server standar dan atur peran yang Anda BUTUHKAN secara individual. atau B) Lempar lebih banyak RAM ke dalam sistem ... karena RAM cukup murah. SBS dirancang untuk kantor yang sangat kecil ... (10-20 workstation ...) dan tidak berskala sangat baik.
TheCompWiz
Terima kasih atas jawaban anda. Sistem tempat saya mengamati perilaku memiliki 16 GB RAM yang merupakan batas fisik. Memori yang tersedia dengan cepat terisi dengan Exchange's store.exe dan banyak contoh SQL Server dan w3wp.exe yang tidak hanya "tidak disetel" tetapi juga braindead langsung. Saya tahu bagaimana menangani masalah konsumsi memori yang berlebihan dari dua lainnya karena saya sering mengelola sistem Exchange dan SQL Server, tetapi dengan w3wp saya agak bingung. Jaringan itu sendiri hanya memiliki 11 pengguna.
the-wabbit
Exchange, SQL Server, dan IIS semuanya memiliki mekanisme yang akan mencoba & mengkonsumsi 100% RAM untuk data "cache". Jika ada yang lain meminta lebih banyak RAM ... ketiganya seharusnya mengurangi untuk memungkinkan layanan lain berjalan tanpa menggunakan swapping. (dalam teori) Dalam prakteknya, namun saya menemukan bahwa Anda hanya perlu berguling dengan pukulan pada beberapa hal ... Anda dapat mencoba & men-tweak semuanya secara manual & menetapkan batas keras ... tetapi Anda akan selalu mengejar ekor Anda yang itu. Saya akan melihat apakah saya dapat menemukan artikel yang saya baca beberapa tahun yang lalu tentang membatasi kumpulan aplikasi di IIS untuk Anda ...
TheCompWiz
7

Inilah yang akhirnya saya lakukan:

mengatur cache aplikasi server untuk .NET AppPools ke nilai rendah (5 MB) dengan mengatur parameter privateBytesLimit di web.configpada %WINDIR%\Microsoft.NET\Framework\<version>\Configseperti yang disarankan dalam jawaban ini :

    <configuration>
      <system.web>
         <caching>
           <cache privateBytesLimit="5242880" privateBytesPollTime="00:01:00" />
         </caching>
      </system.web>
    </configuration>

Ini membantu mengurangi penggunaan memori hingga lebih dari 1 GB dengan pengaturan daur ulang kolam standar.

Rupanya, menggunakan "server" jenis pengumpul sampah ( <gcServer = "true">) dapat menyebabkan konsumsi memori yang signifikan juga, tetapi sepertinya, <gcServer>disetel ke false secara default.

the-wabbit
sumber
FYI - beberapa waktu lalu kami mulai menetapkan gcserver ke false setelah membaca artikel ini: forums.asp.net/t/1654596.aspx/1 dan msdn.microsoft.com/en-us/library/ff647787.aspx
Greg Askew
@ the-wabbit Apakah saran untuk mengatur gcServer = false masih ada sekarang karena pengumpulan sampah server terjadi secara bersamaan?
Michael Steele
6

Jika Anda menduga bahwa konsumsi memori yang dihasilkan adalah masalah karena cacat perangkat lunak, Anda dapat menggunakan Microsoft DebugDiag 1.2 untuk membuat dump memori penuh dan menganalisis dump untuk masalah umum. Jika Anda berpikir mungkin ada masalah memori, Anda harus mengaktifkan pelacakan kebocoran dengan memilih opsi "Monitor untuk Kebocoran" dan membiarkannya berjalan beberapa saat sebelum membuat / menganalisis dump.

DebugDiag 1.2 Unduh
https://www.microsoft.com/download/en/details.aspx?id=26798

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Greg Askew
sumber
Terima kasih atas tautannya, saya akan mencobanya. Paket instalasi MSI tampaknya memiliki masalah ketika dijalankan pada versi Windows yang dilokalkan (non-AS-Englisch), saya harus melihat apakah ada solusi untuk ini.
the-wabbit
2

Anda tidak memerlukan kumpulan aplikasi terpisah untuk setiap aplikasi, hanya aplikasi yang tidak dapat diandalkan atau Anda ingin memprioritaskan. Banyak yang dapat berbagi (memisahkan versi .net yang berbeda). Anda kemudian dapat lebih realistis membatasi memori yang akan digunakan kumpulan aplikasi. Seharusnya tidak perlu berulang kali mendaur ulang kolam lebih dari sekali sehari.

Juga, hanya ada begitu banyak memori yang dapat dibebaskan dengan cara ini. Meskipun beberapa di antaranya adalah cache, setiap aplikasi membutuhkan sejumlah memori kerja yang sangat tergantung pada aplikasi web tertentu. Mencoba membatasi ini terlalu banyak akan membuat segalanya terhenti.

Masalahnya sebenarnya adalah bahwa SBS mencoba melakukan terlalu banyak sekaligus, Anda perlu melihat apa yang sebenarnya Anda gunakan dan mematikan apa yang tidak Anda lakukan.

Tetapi jujur ​​untuk hanya 11 pengguna, di mana sisa memori akan pergi? Exchange dan SQL untuk penggunaan ringan tentu saja tidak membutuhkan lebih dari 12GB!

JamesRyan
sumber
Ah, Anda tidak pernah mengalami keindahan SBS, bukan? Penyimpanan informasi Exchange tumbuh hingga 8 GB ketika tidak dibatasi, beberapa contoh server SQL akan dengan senang hati mengambil 3 GB lagi. Sebagian besar kumpulan aplikasi menjalankan hanya 1-2 aplikasi dengan versi .NET yang sama dan dalam konteks keamanan yang sama. Namun, saya tidak dapat mengelompokkan mereka kembali karena masalah dukungan. Juga tidak mungkin untuk memecahkan masalah memori - jika saya hanya memiliki 4 proses 1-GB daripada 12 yang lebih kecil, tidak banyak yang dimenangkan.
the-wabbit
Perbedaannya dengan memiliki lebih sedikit kumpulan aplikasi adalah bahwa berbagai cache akan penuh dengan apa yang biasa digunakan, mendorong keluar apa yang tidak. Dengan banyak kolam aplikasi akan ada lebih banyak yang terbuang. Berapa banyak konteks keamanan yang Anda perlukan dengan 11 pengguna? Ya, Exchange akan dengan senang hati menggunakan sebanyak mungkin memori Anda yang bisa didapatkannya tetapi itu juga akan berjalan dengan senang hati hanya pada 2GB untuk beberapa pengguna tersebut jika Anda membatasi. Dengan SBS Anda harus menerima bahwa Anda tidak dapat menggunakan praktik terbaik di mana pun atau menjalankan opsi mana pun secara optimal, Anda harus sedikit pragmatis dan tidak berlebihan dalam hal-hal merekayasa.
JamesRyan
Nah, jika Anda mencoba menjalankan 20 contoh di server, tidak heran Anda mencoba menjejalkan semuanya ke dalam memori. Anda benar-benar harus menyebutkan hal itu dalam pertanyaan karena menempatkan hal-hal dalam cahaya yang sama sekali berbeda.
JamesRyan
Saya tidak benar-benar - karena saya menyatakan masalah muncul dengan sistem fisik di mana aplikasi yang jarang digunakan mencuri memori dari cache sistem file yang jauh lebih berharga. Saya menduga ini akan disebabkan oleh beberapa objek caching dalam kumpulan aplikasi dan sedang mencari beberapa cara untuk mengurangi / menonaktifkan cache.
the-wabbit