Seperti yang kita ketahui bersama, tidak mudah mengimplementasikan aplikasi yang berjalan 24*7. Salah satu proyek saya pernah bertahan selama lebih dari 20 jam di bawah beban berat dan masih mati secara heroik. Untungnya, ASP.NET dan IIS memberi kita beberapa fasilitas mudah yang memungkinkan kita membangun aplikasi .Net super stabil dengan mudah. Namun, yang agak tidak menyenangkan adalah metode konfigurasi pada sistem Windows 2000 (versi di bawah IIS6.0) dan Windows 2003 (IIS6.0) berbeda.
Mari kita bicara tentang sistem windows 2000 terlebih dahulu. Mereka yang akrab dengan ASP.NET pasti tahu file machine.config. File ini disimpan di direktori %WindowPath%Microsoft.NetFramework%.NetVersion%CONFIG. Gunakan editor teks apa pun (tentu saja yang paling populer adalah "Notepad") untuk membuka file dan menemukan bagian <processModel...>. ASP.NET mengontrol proses layanan ASP.NET (aspnet_wp.exe atau w3wp.ext) berdasarkan pengaturan di bagian ini. Kode aplikasi ASP.NET yang kami tulis berjalan di ruang proses ini. Jika Anda menggunakan Framework 1.1, Anda akan melihat lebih dari n properti di bagian ini. Kami memperhatikan tiga properti berikut, yang diikuti dengan tanda sama dengan adalah nilai defaultnya:
timeout="Infinite"
idleTimeout="Infinite"
memoryLimit="60"
Anda tidak dapat melihatnya di Framework 2.0, namun Anda dapat menambahkannya secara manual.
Izinkan saya menerjemahkan arti dari ketiga atribut ini. Setelah berjalan terus menerus selama waktu yang ditentukan oleh batas waktu, restart proses layanan ASP.NET. Nilai default batas waktu adalah tak terbatas " , misalnya, timeout=24:00:00 berarti memulai ulang setelah 24 jam; Jika tidak ada yang mengakses dalam waktu yang ditentukan oleh idleTimeout, mulai ulang proses layanan ASP.NET. Nilai default idleTimeout juga tidak terbatas, dan metode pengaturan adalah seperti di atas; jika persentase memori yang digunakan oleh proses layanan ASP.NET terhadap total memori sistem melebihi jumlah yang ditentukan oleh memoryLimit, proses layanan ASP.NET akan dimulai ulang.
Maklum, melalui kerja sama ketiga atribut tersebut, proses layanan bisa dimulai ulang tanpa kita sadari, sehingga aplikasi kita bisa terus berjalan. Ketika saya mengatakan ini, pembaca yang cermat mungkin telah menemukan masalahnya. Ketika proses layanan dimulai ulang, sesi klien pasti akan hilang dan operasi pengguna akan terganggu. Bagaimana kita bisa mencapai "Tuhan tidak mengetahui dan hantu tidak mengetahui"?
Masalah ini memang ada, namun dampaknya dapat diminimalkan atau bahkan dihilangkan sama sekali dengan langkah-langkah berikut:
Pertama, kita dapat mengatur idleTimeout ke nilai yang wajar, biasanya saya akan mengaturnya ke 1,5-1,5 dari pengaturan batas waktu sesi sebanyak 3 kali. Atur batas waktu ke batas atas agar program dapat bertahan. Saya biasanya mengaturnya menjadi 24 jam. Ini akan memaksa proses layanan untuk memulai kembali saat tidak ada aktivitas. Karena tidak ada sesi saat ini, tidak mungkin mengganggu operasi pengguna. Pengaturan ini sangat efektif di lingkungan perkantoran usaha kecil dan menengah, karena pada dasarnya tidak ada akses setelah jam kerja.
Tentu saja cara di atas memiliki keterbatasan yang besar dan hanya dapat berhasil dalam situasi tertentu. Jika seseorang terus mengakses atau memulai ulang ketika memori melebihi batas, pengoperasian pengguna akan tetap terganggu. Solusi utamanya adalah menyimpan status sesi dalam proses terpisah. Di ASP.Net hal ini juga dimungkinkan dengan konfigurasi sederhana.
Sumber: Ruang rekaman BLOG