ฉันจะอุ่นเครื่องแอป asp.net mvc ของฉันหลังจากรีไซเคิลแอพพูลได้อย่างไร


23

ฉันใช้ ASP.NET MVC webapp ใน IIS 8.0 แอปพลิเคชันของฉันต้องได้รับการอุ่นเครื่องก่อนรับคำขอ เรามีกระบวนการในการอุ่นเครื่องแอปพลิเคชันโดยอัตโนมัติเมื่อเราปรับใช้รหัสใหม่ อย่างไรก็ตามเราเห็นเหตุการณ์รีไซเคิลกลุ่มแอพเป็นระยะซึ่งส่งผลให้แอพไม่ได้รับการอุ่นเครื่อง

มีวิธีปฏิบัติที่ดีที่สุดในการตรวจจับเหตุการณ์การรีไซเคิลแอพและเรียกใช้งานสคริปต์หรือโค้ดบางส่วนหรือไม่?

คำตอบ:


55

มีหลายสิ่งที่คุณสามารถทำได้:

1. การเริ่มต้นแอปพลิเคชัน

คุณสามารถใช้Application Initialization Moduleซึ่งมาพร้อมกับ IIS 8.0

คุณสามารถมีสิ่งนี้ในของคุณ web.config

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

การดำเนินการนี้จะส่งคำขอไปยังรูทของแอปของคุณ ( initializationPage="/") ทุกครั้งที่แอปเริ่มต้นโดยอัตโนมัติ

คุณยังสามารถกำหนดค่าโหมดเริ่มต้นสำหรับกลุ่มแอปพลิเคชันของคุณAlways Runningซึ่งหมายความว่าทุกครั้งที่ IIS รีสตาร์ทมันจะทำให้แน่ใจว่าจะเริ่มกลุ่มแอปพลิเคชันของคุณทันที (จากที่คลิกขวาบนกลุ่มแอปพลิเคชันของคุณAdvanced Settings

ป้อนคำอธิบายรูปภาพที่นี่

และPreloadสำหรับเว็บไซต์ของคุณเอง (คลิกขวาที่เว็บไซต์จากManage Siteนั้นAdvanced Settings

ป้อนคำอธิบายรูปภาพที่นี่

2. ปิดการใช้งาน Idle Time-out

นอกจากนี้คุณสามารถปิดการใช้งาน idleTimeout (โดยค่าเริ่มต้น IIS จะปิดแอปหลังจากทำกิจกรรมเป็นเวลา 20 นาที) โดยเปลี่ยนเป็นของในIdle Time-outพูลโปรแกรมประยุกต์ของคุณเป็น 0 (ไม่มีที่สิ้นสุด)

ป้อนคำอธิบายรูปภาพที่นี่

3. ปิดการใช้งานการรีไซเคิลเป็นระยะ

ปิดใช้งานRegular Time Interval (minutes)โดยค่าเริ่มต้น IIS จะรีไซเคิลแอปของคุณทุก ๆ 29 ชั่วโมง

ป้อนคำอธิบายรูปภาพที่นี่

สำหรับ


3
ความคิดเห็นเกี่ยวกับข้อเสียของการตั้งค่าเหล่านี้จะได้รับการชื่นชม แน่นอนมีเหตุผลที่พวกเขาจะไม่เริ่มต้น
user42134

2
แน่นอนว่าการใช้หน่วยความจำสูงถ้าคุณเรียกใช้หลายไซต์บนกล่อง IIS เดียวกันเนื่องจากไซต์ทั้งหมดยังคงมีชีวิตอยู่ตลอดเวลาซึ่งนำไปสู่ความหนาแน่นของไซต์ที่ต่ำมาก ยังไม่มีการป้องกันการรั่วไหลของหน่วยความจำในแอปพลิเคชันของคุณ โปรดทราบว่า IIS อยู่ใกล้ก่อนที่ภาษาที่มีการจัดการจะได้รับความนิยมสำหรับเว็บและแอพจำนวนมากกำลังเรียกใช้ตัวจัดการดั้งเดิมที่เข้าสู่หน่วยความจำรั่ว & สถานะแปลก ๆ หากปล่อยให้ทำงานเป็นเวลานาน ทำเพื่อช่วยดูแลระบบที่ต้องตื่นกลางดึกเพื่อรีเซ็ตเซิร์ฟเวอร์เนื่องจากปัญหาแอป พวกเขายังคงเป็นค่าเริ่มต้นส่วนใหญ่ด้วยเหตุผลเชิงเปรียบเทียบย้อนกลับ
ahmelsayed

1
ทางเลือกในIIS 7.5 - Windows Server 2008 R2 ?
Kiquenet

2
คุณสามารถรับApplication Initialization Moduleสำหรับ IIS 7.5 สำหรับ # 1 ในการทำงาน # 2 และ # 3 มีผลบังคับใช้กับ IIS 7.5
ahmelsayed

1
FYI สำหรับผู้ที่ใช้สิ่งนี้: การapplicationInitializationเข้าสู่<configuration><system.webServer>
พอล

1

จากประสบการณ์ของฉันการเปิดใช้งาน AlwaysRunning และ Preload ไม่ได้เพิ่มความเร็วมากนัก เวลารอส่วนใหญ่เกิดขึ้นในการรวบรวมแบบไดนามิก (ซึ่งสามารถแก้ไขได้ด้วย aspx precompile) และการโหลดแอสเซมบลีในหน่วยความจำและแคช

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.