Bagaimana saya bisa menghangatkan aplikasi web asp.net mvc saya setelah daur ulang kumpulan aplikasi?

23

Saya menjalankan webapp ASP.NET MVC di IIS 8.0. Aplikasi saya perlu dihangatkan sebelum menerima permintaan. Kami sudah memiliki proses untuk menghangatkan aplikasi secara otomatis ketika kami menggunakan kode baru. Namun, kami melihat acara Daur Ulang Pool App berkala yang mengakibatkan aplikasi tidak menjadi hangat.

Apakah ada praktik terbaik untuk mendeteksi acara daur ulang kumpulan aplikasi dan menjalankan skrip atau kode tertentu?

AgileJon
sumber

Jawaban:

55

Ada beberapa hal yang dapat Anda lakukan:

1. Inisialisasi Aplikasi

Anda dapat menggunakan Modul Inisialisasi Aplikasi yang disertakan dengan IIS 8.0

Anda dapat memiliki sesuatu seperti ini di blog Anda web.config

<applicationInitialization
     doAppInitAfterRestart="true" >
   <add initializationPage="/" />
</applicationInitialization>

Ini akan mengirimkan permintaan ke root aplikasi Anda ( initializationPage="/") setiap kali aplikasi Anda mulai secara otomatis.

Anda juga dapat mengkonfigurasi Mode Mulai untuk kumpulan aplikasi Anda Always Runningyang berarti setiap kali IIS memulai kembali, itu akan memastikan untuk memulai kumpulan aplikasi Anda segera (ini jika dari klik kanan pada kumpulan aplikasi Anda kemudianAdvanced Settings

masukkan deskripsi gambar di sini

dan Preloaduntuk situs Anda sendiri (klik kanan pada situs itu Manage SitelaluAdvanced Settings

masukkan deskripsi gambar di sini

2. Nonaktifkan Idle Time-out

Selain itu Anda dapat menonaktifkan idleTimeout (secara default IIS akan mematikan aplikasi setelah 20 menit beraktivitas) dengan mengubah dalam Idle Time-outuntuk kumpulan aplikasi Anda menjadi 0 (tak terbatas)

masukkan deskripsi gambar di sini

3. Nonaktifkan daur ulang berkala

juga mematikan Regular Time Interval (minutes)secara default IIS akan mendaur ulang aplikasi Anda setiap 29 jam.

masukkan deskripsi gambar di sini

Untuk

ahmelsayed
sumber
3
Komentar tentang kekurangan pada pengaturan ini akan dihargai. Tentunya ada alasan mereka tidak default.
user42134
2
Tentu, konsumsi memori tinggi jika Anda menjalankan beberapa situs pada kotak IIS yang sama karena semua situs tetap hidup sepanjang waktu, yang mengarah ke kepadatan situs yang sangat rendah. Juga tidak ada perlindungan terhadap kebocoran memori di aplikasi Anda. Perlu diingat bahwa IIS ada sebelum bahasa yang dikelola menjadi populer untuk web dan banyak aplikasi menjalankan penangan asli yang masuk ke kebocoran memori & keadaan aneh jika dibiarkan berjalan untuk waktu yang lama. Itu dilakukan untuk membantu sysadmin yang harus bangun di tengah malam untuk mengatur ulang server karena masalah aplikasi. Mereka masih default sebagian besar karena alasan keterbandingan mundur
ahmelsayed
1
Alternatif di IIS 7.5 - Windows Server 2008 R2 ?
Kiquenet
2
Anda bisa mendapatkan Modul Inisialisasi Aplikasi untuk IIS 7.5 agar # 1 berfungsi. # 2 dan # 3 berlaku apa adanya untuk IIS 7.5
ahmelsayed
1
FYI untuk orang-orang yang menggunakan ini: applicationInitializationmasuk ke<configuration><system.webServer>
Paul
1

Dari pengalaman saya, AlwaysRunning dan Preload diaktifkan tidak mendapatkan banyak kecepatan. Waktu tunggu terbanyak berjalan pada kompilasi dinamis (yang dapat diperbaiki dengan aspx precompile) dan memuat rakitan ke dalam memori dan caching.

zikik
sumber