IIS 7.x แนวปฏิบัติที่ดีที่สุดของ Application Pool


24

เรากำลังจะปรับใช้ไซต์จำนวนมากกับเซิร์ฟเวอร์ใหม่บางแห่ง ฉันมีคำถามต่อไปนี้เกี่ยวกับกลุ่มแอปพลิเคชัน:

  1. ดูเหมือนว่าควรมีแอพพลิเคชั่นหนึ่งพูลต่อเว็บไซต์ มีคำเตือนใด ๆ สำหรับแนวทางนี้หรือไม่? แอพพลิเคชั่นหนึ่งตัวจะทำให้ซีพียู, หน่วยความจำ, อื่น ๆ ทั้งหมดหรือไม่

  2. เมื่อใดที่คุณควรอนุญาตให้กระบวนการของผู้ปฏิบัติงานหลายอย่างในกลุ่มแอปพลิเคชัน คุณไม่ควรเมื่อไหร่?

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

  4. ความแตกต่างระหว่างข้อ จำกัด ส่วนตัวและหน่วยความจำเสมือนคืออะไร?

  5. มีเหตุผลที่น่าสนใจไหมที่จะไม่เรียกใช้หนึ่งแอพพลิเคชั่นต่อเว็บไซต์?


คำถามแรกกลับมาหาคุณ: เว็บไซต์เหล่านี้ (เช่น:. htm / .js) หรือเว็บแอปพลิเคชัน (เช่น. aspx / .php) หรือไม่
เข้ารหัส Gorilla

แอปพลิเคชั่น. Net 3.5 เป็นส่วนใหญ่ หนึ่งคือแอปพลิเคชัน PHP ของบุคคลที่สาม
Eric Burcham

1
นี่เป็นหัวข้อที่หลากหลาย - หัวข้อ (และคำตอบ @ CodingGorilla) น่าสนใจ แต่อาจไม่เหมาะกับสไตล์ Q-and-A ของ SF
voretaq7

คำตอบ:


20

1) แนะนำให้มีแอพพลิเคชั่นต่อเว็บไซต์ มีคำเตือนใด ๆ สำหรับแนวทางนี้หรือไม่? ตัวอย่างหนึ่งแอพพลิเคชั่นสามารถยกตัวอย่างเช่นซีพียู, หน่วยความจำ, อื่น ๆ ...

นี่เป็นวิธีการที่ดีทีเดียว ไม่มีเหตุผลที่ดีที่ฉันคิดว่ามี "ไซต์" (แอปพลิเคชัน) ที่แตกต่างกันใช้แหล่งข้อมูลเดียวกัน นอกเสียจากว่าพวกเขาต้องการแบ่งปันทรัพยากรเพียงบางประเภท แอปพลิเคชั่นหนึ่งอาจมี CPU หรือหน่วยความจำจำนวนมากในทางทฤษฎี แต่การเปลี่ยนแปลงวิธีที่แอพพลิเคชั่นจะไม่ส่งผลกระทบต่อสิ่งนี้มากนัก

2) เมื่อใดที่คุณควรอนุญาตให้มีกระบวนการผู้ปฏิบัติงานหลายกระบวนการในกลุ่มแอปพลิเคชัน คุณไม่ควรเมื่อไหร่?

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

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

a) ในทางทฤษฎี

b) ใช่การตั้งค่าให้ต่ำกว่าอาจมีผลเสีย อีกครั้งเว้นแต่คุณจะมีความต้องการเฉพาะและรู้ว่าคุณกำลังทำอะไรอยู่

4) อะไรคือข้อแตกต่างระหว่างข้อ จำกัด ส่วนตัวและหน่วยความจำเสมือน?

มันซับซ้อนมากนี่เป็นโพสต์ด่วนที่ฉันพบว่าอาจช่วยได้: http://cybernetnews.com/cybernotes-windows-memory-usage-explained/

5) มีเหตุผลที่น่าสนใจไหมที่จะไม่เรียกใช้หนึ่งแอพพลิเคชั่นต่อเว็บไซต์?

อีกเหตุผลเดียวที่ฉันคิดได้ก็คือถ้ามี "ทรัพยากรที่ใช้ร่วมกัน" หลายประเภทที่แอพพลิเคชั่นต้องการแล้วคุณต้องการเรียกใช้ในกระบวนการเดียวกัน

สำหรับแอปพลิเคชั่นและเว็บไซต์ทั่วไป IIS มีการตั้งค่าค่อนข้างดีโดยมีค่าเริ่มต้น

**** UPDATE ****

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

เมื่อคุณเริ่มพูดถึงหลาย ๆ กระบวนการคุณอาจพบเจอกับสิ่งต่าง ๆ เช่น: สูญเสียสถานะเซสชันเนื่องจากเซสชันยังมีชีวิตอยู่ในกระบวนการ 1 แต่กระบวนการกำลังดำเนินการตามคำขอ 2 หรือแย่กว่านั้นคือคุณต้องรู้วิธี ทำการสื่อสารระหว่างกระบวนการบางอย่างซึ่งเป็นความเจ็บปวดที่แท้จริง

ไม่ว่าคุณจะมาด้วยเหตุผลเกี่ยวกับกระบวนการหลายอย่างฉันก็ยินดีที่จะเดิมพันว่ามีวิธีที่ดีกว่าในการจัดการกับมัน (แทนที่จะเริ่มกระบวนการอื่น)


ฉันซาบซึ้งคำตอบที่รอบคอบและยอมรับมัน หากคุณมีข้อมูลเฉพาะเพิ่มเติมเกี่ยวกับอันดับ 2 ฉันขอขอบคุณ "ซ้ายที่ดีที่สุดเพียงอย่างเดียว" เป็นคำแนะนำของนักปราชญ์ แต่เมื่อใช้กระบวนการของคนงานหลายคนจะต้องรู้เช่นกัน ฉันคิดว่าสิ่งนี้มีความเกี่ยวข้องมากขึ้นเมื่อคุณมีการกระทำของเซิร์ฟเวอร์บางอย่างที่ใช้เวลานานในการส่งคืนการตอบกลับเช่นรายงานขนาดใหญ่บริการเว็บที่ยอมรับการโพสต์ขนาดใหญ่และอื่น ๆ ฉันยังถือว่าทุกสิ่งที่เกิดขึ้นพร้อมกันด้ายปกติใช้?
Eric Burcham

เพียงเพิ่ม: หากคุณคาดหวังว่าแอพของคุณจะเล่นกันได้ไม่ดีกล่องโต้ตอบการติดตั้งสำหรับ IIS จะบันทึกว่า Windows System Resource Manager สามารถติดตั้งและใช้เพื่อ จำกัด การใช้งาน CPU และหน่วยความจำโดยแอพพูล
TristanK

@TristanK ขอบคุณสำหรับเคล็ดลับ นั่นเป็นประโยชน์อย่างมาก
Eric Burcham

@ Code Gorilla - ขอบคุณอีกครั้งสำหรับข้อมูลเชิงลึก ฉันตัดสินใจที่จะขุดอย่างจริงจังใน "ทำไมต้องใช้เว็บการ์เด้น" และได้คำตอบมากมาย คำเตือนทั้งหมดที่คุณกล่าวถึงนำไปใช้โดยเฉพาะอย่างยิ่งการจัดการกับการเข้าถึงแบบอะซิงโครนัสกับทรัพยากรที่ใช้ร่วมกันเช่นแคชต่าง ๆ และเซสชันผู้ใช้ คุณสมบัติเว็บการ์เด้นช่วยให้คุณโหลดคำขอยอดคงเหลือในเซิร์ฟเวอร์เดียวที่มีมากกว่าบนแกน ดังนั้นคุณต้องจัดการกับ caveats ทั้งหมดที่คุณปกติจัดการในสถานการณ์โหลดสมดุลยกเว้นการกำหนดเส้นทางการร้องขอ
Eric Burcham

@ การเข้ารหัสกอริลลา - ต่อ ... "เหตุผล" ที่ดีที่สุดที่ฉันพบว่าใช้คุณสมบัติกระบวนการทำงานหลายอย่างคือการเพิ่มประสิทธิภาพ ตรวจสอบที่ลิงค์นี้: iis-aid.com/articles/performance_testing/... แน่นอนคุณควรรู้ว่าคุณกำลังทำอะไรกับการเขียนโปรแกรมแบบอะซิงโครนัสที่เรามักจะละเลยที่จะคำนึงถึงเว็บไซต์เนื่องจากส่วนใหญ่ (อย่างน้อยเริ่มต้น) เรียกใช้เธรดคนงานเดียว ดังนั้นคำตอบสั้น ๆ สำหรับคำถามของฉันคือ: ลองทำถ้าคุณมีปัญหาเรื่องประสิทธิภาพ
Eric Burcham

4

ฉันกำหนดค่าแอพพลิเคชั่นพูลเฉพาะสำหรับเว็บไซต์เสมอ สถานการณ์การโฮสต์เว็บไซต์ที่มีต้นทุนต่ำนั้นเป็นที่ที่มีเว็บไซต์จำนวนมากต่อแอพพลิเคชั่นพูล

ขีด จำกัด หน่วยความจำเป็นเพียงเกณฑ์ความปลอดภัยดั้งเดิมเท่านั้นเพื่อป้องกันไซต์จากการใช้ทรัพยากรระบบทั้งหมด โปรดทราบว่านี่เป็นปัญหาที่เป็นไปได้มากกว่าใน Windows 2008 R2 x64 มากกว่าใน IIS 6.0 x86 เนื่องจากแอปพลิเคชัน x86 มีหน่วยความจำที่เป็นมาตรฐาน 2 GB IIS 7.5 ง่ายกว่าสำหรับแอปพลิเคชันที่มีหน่วยความจำรั่วเพื่อใช้หน่วยความจำจำนวนมาก

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


ขอขอบคุณที่ชี้หน่วยความจำ 32 บิต ฉันไม่รู้ว่าฉันลืมสิ่งเหล่านี้อย่างไร ฉันคิดว่าวิธีการที่ถูกต้องหากคุณมีแอปพลิเคชันบกพร่องพอที่จะทำให้แอพพูลเกิดข้อผิดพลาดคือแก้ไขได้โดยสมมติว่าคุณสามารถเข้าถึงรหัสได้ ฉันขอขอบคุณคำแนะนำ!
Eric Burcham

เราทำการทดสอบของเราเอง การเรียกใช้แอพพลิเคชั่นพูลดูเหมือนว่าจะมีค่าใช้จ่ายประมาณ 64K ต่อแอพพลิเคชั่นด้านบนที่รันแอพพลิเคชั่นทั้งหมดในแอพพลิเคชั่นเดียวกัน นั่นคือช่วงเวลาตัวอย่าง 12 ชั่วโมงโดยใช้การตรวจสอบประสิทธิภาพในการตรวจสอบการใช้หน่วยความจำ นี่เป็นเซิร์ฟเวอร์ 64 บิต ฉันคิดว่าถ้าการทดสอบอย่างง่าย ๆ นั้นถูกต้องค่าใช้จ่ายทรัพยากรของแอพพลิเคชั่นหนึ่งรายการต่อแอปพลิเคชันนั้นไม่มีความสำคัญกับฮาร์ดแวร์ที่ทันสมัย
Eric Burcham
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.