IIS: Idle Timeout เทียบกับ Recycle


101

ใน IIS มีสองพื้นที่ (ดีมากกว่าสอง) ที่สามารถรีไซเคิลได้:

  1. ภายใต้ส่วน "Process Model" → "Idle Timeout" (ค่าเริ่มต้น 20 นาที)

และ

  1. ในส่วน "รีไซเคิล" → "ช่วงเวลาปกติ" (ค่าเริ่มต้น 1740 นาที)

คำถามของฉันคือ:

  1. อะไรคือความแตกต่างระหว่างสองวิธี?
  2. ผลกระทบเชิงลบของการตั้งค่าให้เป็น 0 คืออะไร?

คำตอบ:


103

Idle Timeout คือถ้าไม่มีการขอให้ดำเนินการใด ๆ จากเว็บแอปของคุณกระบวนการจะหยุดและปล่อยทุกอย่างออกจากหน่วยความจำ

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

ผลกระทบเชิงลบของทั้งสองโดยปกติคือการใช้ Session และสถานะ Application ของคุณจะหายไปหากคุณยุ่งกับ Recycle ให้เร็วขึ้น (ผู้ใช้ที่ลงชื่อเข้าใช้ ฯลฯ จะถูกออกจากระบบหากพวกเขากำลังจะ "เช็คเอาต์" ทั้งหมดจะได้รับ หายไป "นั่นคือสาเหตุที่การรีไซเคิลมีมูลค่าการหมดเวลามากการหมดเวลาว่างก็ไม่สำคัญเพราะไม่มีใครเข้าสู่ระบบอยู่แล้วและคิดว่า 20 นาทีที่ไม่มีการดำเนินการใด ๆ

ผลบวกจะช่วยกำจัดการหมดเวลาที่ไม่ได้ใช้งานเนื่องจากเว็บไซต์ของคุณจะตอบสนองได้เร็วขึ้นในการตอบสนอง "ครั้งแรก" หากไม่ใช่ไซต์ที่มีการใช้งานสูงซึ่งผู้ใช้จะต้องรอให้โหลดหากคุณมีผู้ใช้ 1 คนทุกๆ 20 นาที พูด. ดังนั้นเว็บไซต์ที่ได้รับน้อยกว่า 1 ครั้งใน 20 นาทีจริงๆแล้วคุณต้องการเพิ่มมูลค่านี้เนื่องจากเว็บไซต์ต้องโหลดขึ้นมาใหม่ตั้งแต่ต้นสำหรับผู้ใช้แต่ละคน แต่ถ้าคุณตั้งค่านี้เป็น 0 เป็นเวลานานหน่วยความจำใด ๆ ที่รั่วไหลในโค้ดอาจเข้าครอบงำเซิร์ฟเวอร์ได้ในช่วงเวลาหนึ่ง


ขอบคุณ! ที่สมเหตุสมผล ปัญหาหลักของฉันคือ "การโหลดครั้งแรก" ใช้เวลานานมาก ฉันคิดว่าถ้าฉันตั้งค่าทั้งสองนี้เป็น 0 ฉันจะสามารถหลีกเลี่ยงสิ่งนั้นได้ อย่างไรก็ตามปัญหาของหน่วยความจำรั่วเป็นปัญหา มีวิธี "รีไซเคิล" แต่แล้ว "บังคับ" คำขอเพื่อให้ "การเข้าถึงครั้งแรก" สิ้นสุดลงและดำเนินการทันทีหลังจากการรีไซเคิลหรือไม่ หรืออาจกำหนดเวลาการรีไซเคิลในเวลาตีสองจากนั้นกำหนดเวลา "เข้าถึงครั้งแรก" ในเวลา 02:30 น.? IIS มีวิธีทำเช่นนั้นหรือไม่?
Ricky

@ Ricky ฉันได้รับปัญหาครั้งแรกที่ต้องใช้เวลานานเกินไป คุณต้องตั้งค่า startMode ของพูลแอปพลิเคชันของคุณให้เป็น AlwaysRunning: msdn.microsoft.com/en-us/library/ee677285%28v=azure.10%29.aspx
Steve Hibbert

สิ่งนี้ก็มีประโยชน์กับฉันเช่นกัน: simple-talk.com/blogs/2013/03/05/…
Steve Hibbert

3
@Silvermind - หากเซสชันถูกเก็บไว้ในกระบวนการจะไม่ถูกคัดลอกเมื่อรีไซเคิล ดูที่นี่ .
BornToCode

31

จากที่นี่ :

วิธีหนึ่งในการประหยัดทรัพยากรระบบคือกำหนดค่าการตั้งค่าการหมดเวลาที่ไม่ได้ใช้งานสำหรับกระบวนการของผู้ปฏิบัติงานในกลุ่มแอปพลิเคชัน เมื่อกำหนดค่าการตั้งค่าเหล่านี้กระบวนการของผู้ปฏิบัติงานจะปิดลงหลังจากไม่มีการใช้งานในช่วงเวลาที่กำหนด ค่าเริ่มต้นสำหรับการหมดเวลาว่างคือ 20 นาที

ตรวจสอบด้วยเหตุใดพูลแอปเริ่มต้นของ IIS จึงตั้งค่าเป็น 1740 นาที

หากคุณมีไซต์เพียงไม่กี่ไซต์บนเซิร์ฟเวอร์ของคุณและคุณต้องการให้ไซต์เหล่านั้นโหลดเร็วเสมอให้ตั้งค่านี้เป็นศูนย์ มิฉะนั้นเมื่อคุณมีเวลา 20 นาทีโดยไม่มีการเข้าชมใด ๆ กลุ่มแอปจะหยุดทำงานเพื่อให้สามารถเริ่มต้นได้อีกครั้งในการเยี่ยมชมครั้งต่อไป ปัญหาคือการเยี่ยมชมพูลแอปครั้งแรกจำเป็นต้องสร้างกระบวนการผู้ปฏิบัติงาน w3wp.exe ใหม่ซึ่งช้าเนื่องจากต้องสร้างพูลแอป ASP.NET หรือเฟรมเวิร์กอื่นต้องโหลดจากนั้นแอปพลิเคชันของคุณจำเป็นต้องโหลด จะโหลด ซึ่งอาจใช้เวลาไม่กี่วินาที ดังนั้นฉันจึงตั้งค่านั้นเป็น 0 ทุกโอกาสที่ฉันมีเว้นแต่จะเป็นสำหรับเซิร์ฟเวอร์ที่โฮสต์ไซต์จำนวนมากที่ไม่จำเป็นต้องทำงานเสมอไป


6

ตอนนี้ IIS มีไฟล์

Idle Time-out Action : Suspend การตั้งค่า

การระงับเป็นเพียงการหยุดกระบวนการและมีประสิทธิภาพมากกว่าการทำลายกระบวนการ


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

0

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

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