ทำไมหลังจากรีสตาร์ทแต่ละครั้งไซต์. NET ภายในเครื่องของฉันต้องใช้เวลาโหลดเป็นครั้งแรก [ปิด]


27

ฉันกำลังพัฒนาเว็บไซต์โดยใช้แพลตฟอร์ม. NET ฉันมักจะปรับใช้เว็บไซต์เหล่านี้ใน IIS ท้องถิ่นของฉันเพื่อให้ฉันสามารถทดสอบพวกเขาและดูการทำงานของพวกเขาก่อนที่จะมีชีวิตอยู่ อย่างไรก็ตามทุกครั้งที่ฉันรีสตาร์ท windows ดูเหมือนว่าเว็บไซต์ใช้เวลานานในการรันครั้งแรก

ฉันรู้เกี่ยวกับ JIT และฉันก็ตระหนักถึงคำถามนี้แต่ก็ไม่ตอบคำถามของฉัน

JIT เกิดขึ้นทุกครั้งที่คุณรีสตาร์ท windows หรือไม่ มันเกี่ยวข้องกับการสร้างกระบวนการ w3wp.exe หรือไม่? ทำไมเว็บไซต์จึงช้าสำหรับคำขอแรกหลังจากรีสตาร์ทแต่ละครั้ง


3
สิ่งนี้เรียกว่า "การเริ่มเย็น" หรือบางสิ่งบางอย่าง ระบบมีการโหลด w3wp ลงในหน่วยความจำซึ่งยังมีความต้องการที่กำลังที่เกี่ยวข้องทั้งหมดอาจจะเป็นสิ่งที่ JIT ตารางขั้นตอนการนำเข้าอ่านข้อมูลจากดิสก์ในขณะที่มันไม่ได้อยู่ในแคช RAM, ฯลฯ
Coder

@Coder, +1 สำหรับความคิดเห็นของคุณ แต่คุณช่วยอธิบายเพิ่มเติมได้ในคำตอบเพื่อที่ฉันและผู้พัฒนารายอื่นจะได้รับประโยชน์ :)
Saeed Neamati

IIS ไม่ใช่ของฉันพิเศษดังนั้นฉันหวังว่าบางคนจะให้คำตอบที่ดีกว่า นี่คือหัวข้อที่คล้ายกันที่ฉันเริ่มต้นในขณะที่ผ่านมาstackoverflow.com/questions/3807791/cold-startup-optimizationบางทีมันอาจจะช่วยได้มากกว่านี้
Coder

4
คำถามนี้ดูเหมือนจะเป็นหัวข้อนอกเรื่องเนื่องจากเป็นเรื่องเกี่ยวกับปัญหาการใช้งานและไม่ใช่ปัญหาการเขียนโปรแกรมเชิงแนวคิด

คำตอบ:


32

ปัญหานี้คือการคอมไพล์ JIT พูลแอ็พพลิเคชันต้องการเวลาในการสร้างไลบรารีก่อนที่จะสามารถเริ่มการประมวลผลได้ สิ่งนี้สามารถเร่งได้โดยใช้สคริปต์ warmup แต่เป็นสิ่งที่ต้องเกิดขึ้น นอกจากนี้ยังขึ้นอยู่กับว่าคุณกำลังใช้เว็บไซต์หรือโครงการเว็บแอปพลิเคชัน เว็บไซต์คือ JIT สำหรับทุกหน้าดังนั้นการเข้าชมครั้งแรกช้าและการเข้าชมหน้าใหม่แต่ละครั้งก็มีเวลารวบรวมพิเศษเช่นกัน โปรเจ็กต์ของเว็บแอ็พพลิเคชันจะถูกคอมไพล์ล่วงหน้าดังนั้นจึงไม่ควรได้รับความนิยมอย่างมาก แต่ไลบรารียังคงต้องโหลดขึ้นมา ยิ่งคุณมีห้องสมุด / เครื่องมือมากเท่าไหร่ นี่คือลิงค์บางส่วนที่กล่าวถึงการวอร์มอัพ:

http://weblogs.asp.net/gunnarpeipman/archive/2010/01/22/iis-application-warm-up-module.aspx http://blogs.iis.net/steveschofield/archive/2009/05/30 /application-pool-warm-up.aspx /programming/2063461/iis-web-applications-warmup http://sharepoint.smayes.com/2011/06/application-pool-specific-warm อัพสคริปต์ /


6
ส่วนใหญ่จะถูกต้อง แต่มีความแตกต่างระหว่างการรวบรวมและการแยกที่ไม่ชัดเจนในคำตอบนี้ Jitting กำลังรวบรวม. NET bytecode ไปยังรหัสเครื่อง ASP.NET กำลังรวบรวมเว็บเพจเหล่านั้นจริง ๆแม้แต่ใน Web Application Project (ยกเว้นว่าคุณใช้ aspnet_compiler) เวลาในการคอมไพล์ / บิลด์รวมถึงเวลาในการโหลด jitting และไลบรารี่นั้นเป็นเพราะเหตุใดจึงช้า
Aaronaught

JIT หมายถึงเพียงแค่ในเวลา ไม่มีความแตกต่างระหว่าง "jitting" และ "รวบรวม" เกินเวลาและจำนวนรหัสที่รวบรวม นอกจากนี้การรวบรวม JIT จะเกิดขึ้นเฉพาะกับรหัสที่ไม่ได้เข้าชมแต่ละรหัสเท่านั้นไม่จำเป็นสำหรับแต่ละหน้า หากพวกเขาใช้แม่แบบเดียวกันเช่นการรวบรวมไม่จำเป็น ข้อสังเกตว่ายิ่งมีห้องสมุดมากขึ้นจะนำไปสู่เวลาในการรวบรวมมากขึ้นแน่นอนว่าเป็นเรื่องจริง
คอร์นีเลียส

9

ปฏิกิริยาช้าในคำขอแรกของคุณคือเนื่องจาก IIS เริ่ม / โหลดไซต์หรือกลุ่มแอปพลิเคชันเท่านั้นเนื่องจากเป็นคำขอแรกที่เข้ามา และหลังจากระยะเวลาที่แน่นอนไม่มีคำขอเข้ามาใหม่ที่เซิร์ฟเวอร์ IIS หยุดเว็บไซต์อีกครั้ง (การรีไซเคิลกลุ่มแอพ)

ASP.NET 4.0 มีฟีเจอร์ใหม่ที่เรียกว่า auto-start ด้วยคุณสมบัตินี้คุณสามารถตั้งค่ากลุ่มแอพพลิเคชั่นหรือเว็บไซต์แต่ละแห่งเพื่อเริ่มต้นตัวเองก่อนที่จะร้องขอใด ๆ สิ่งนี้จะถูกเรียกใช้ในเวลาบูต (เมื่อ IIS เริ่มต้น) หรือเมื่อคุณอัปเดตไซต์ ASP.NET (ซึ่งจะหยุดไซต์)

<applicationPools>
    <add name="MyAppPool" managedRuntimeVersion="v4.0" startMode="AlwaysRunning" />
</applicationPools>

<sites>
    <site name="MySite" id="1">
        <application path="/" serviceAutoStartEnabled="true" />
    </site>
</sites>

คุณต้องการ IIS 7.5 เพื่อใช้สิ่งนี้

นอกจากนี้ยังมีตัวเลือกในการทำงานพิเศษบางอย่างเมื่อการเริ่มอัตโนมัติเริ่มขึ้น เพื่อโหลดข้อมูลลงในแคชล่วงหน้า


โดยปกติคุณจะรวบรวมเว็บไซต์ทั้งหมดของคุณก่อนที่จะนำไปไว้บนเว็บเซิร์ฟเวอร์ดังนั้นโค้ดไม่จำเป็นต้องรวบรวมอีกต่อไปในคำขอแรก JIT ใช้สำหรับไซต์ที่ใช้โฟลเดอร์ App_code ซึ่งคุณเผยแพร่ซอร์สโค้ดของคุณกับเว็บไซต์
Stief

2

ส่วนหนึ่งของปัญหาคือ GAC ไลบรารีจะต้องมีการตรวจสอบความปลอดภัยทุกครั้งที่มีการโหลด - นั่นหมายถึงการทำงานของการเข้ารหัสทั้งหมดที่ดำเนินการอยู่ซึ่งจะทำให้สิ่งต่าง ๆ ช้าลงมาก มีการพูดคุยเกี่ยวกับประสิทธิภาพ WPF ในขณะที่กลับมาจาก MS ที่อธิบายถึงปัญหานี้ - คำตอบของพวกเขาคือ "อย่าใส่ข้อมูลลงใน GAC หากคุณไม่สามารถช่วยได้"


1
ที่ควรจะเป็น "สามารถช่วยได้" เพื่อหลีกเลี่ยงการลบสองครั้ง
Richard Szalay

1

IIS มีคุณสมบัติที่น่ารำคาญ (บางครั้ง) สำหรับเว็บไซต์ที่มีปริมาณการใช้งานต่ำ มันรีไซเคิลกระบวนการของผู้ปฏิบัติงานที่ไม่ได้ใช้ซึ่งทำให้ผู้ใช้รายแรกไปยังไซต์ บางครั้งล่าช้านานมาก (30+ วินาที) http://dotnettimes.wordpress.com/2014/03/24/fixing-slow-initial-load-for-iis-web-site/

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