MaxWorkerThreads กับกระบวนการของผู้ปฏิบัติงานพูลแอป: อะไรคือความแตกต่าง

เท่าที่ฉันรู้เราสามารถปรับปรุงประสิทธิภาพของแอปพลิเคชัน ASP.NET ที่เผยแพร่บน IIS ได้ด้วยวิธีต่างๆ:

  1. Web Garden: ใช้กระบวนการของผู้ปฏิบัติงานมากกว่า 1 กระบวนการสำหรับ App Pool
  2. เว็บฟาร์ม: การมีเครื่องมากกว่าหนึ่งเครื่องที่ให้บริการอินสแตนซ์ของแอปพลิเคชันเดียวกัน
  3. ปรับแต่งไฟล์ ASP.NET web.config

... และบางทีอาจมีคนอื่นที่ฉันไม่รู้ ...

ตัวเลือกที่ 1 และ 2 จำเป็นต้องมีโครงสร้างข้อมูลที่ซับซ้อนเพื่อทำให้เป็นอนุกรม และโหมดสถานะเซสชันเพื่อตั้งค่าเป็นเซิร์ฟเวอร์สถานะหรือเซิร์ฟเวอร์ SQL (โหมด InProc เข้ากันไม่ได้และใช้งานไม่ได้)

ฉันต้องการมุ่งเน้นไปที่ตัวเลือกที่ 1 และ 3:

เกี่ยวกับสวนเว็บ (ตัวเลือกที่ 1) เราตั้งค่ากระบวนการของผู้ปฏิบัติงานมากกว่า 1 กระบวนการสำหรับพูลแอปพลิเคชัน และเราต้องตั้งค่าเซิร์ฟเวอร์สถานะหรือเซิร์ฟเวอร์ sql เป็นโหมดสถานะเซสชัน

ในตัวเลือกที่ 3 เราปรับแต่งไฟล์ web.config ตามที่อธิบายไว้ ที่นี่ โดยการตั้งค่าพารามิเตอร์ เช่น maxWorkerThreads

ตอนนี้เกิดคำถามมากมายในใจ....

ฉันไม่สามารถแยกแยะความแตกต่างระหว่างการตั้งค่ากระบวนการของผู้ปฏิบัติงานมากกว่า 1 กระบวนการสำหรับ App Pool ในตัวเลือก 1 และการตั้งค่า maxWorkerThreads > 1 ในตัวเลือก 3

  1. ในตัวเลือก 1 คุณมี กระบวนการของผู้ปฏิบัติงาน มากกว่า 1 รายการสำหรับการเข้าร่วมคำขอที่เข้ามา และในตัวเลือก 3 คุณมี หลายเธรด สำหรับการเข้าร่วมคำขอที่เข้ามาแทน ดังนั้นอะไรคือความแตกต่าง
  2. กระบวนการของผู้ปฏิบัติงาน = เธรด?
  3. กระบวนการของผู้ปฏิบัติงานสำหรับพูลแอปพลิเคชัน (ตัวเลือก 1 กระบวนการ case #worker > 1) ทำงานและทำงานในลักษณะเดียวกับที่เรามีหลายเธรด (ตัวเลือก 3 case #maxWorkerThreads > 1) หรือไม่
  4. กระบวนการในตัวเลือก 1 เหมือนกับเธรดในตัวเลือก 3 หรือไม่
  5. นอกจากนี้ในตัวเลือกที่ 3 มันทำงานอย่างไรเมื่อคุณมี 1 กระบวนการของผู้ปฏิบัติงานสำหรับกลุ่มแอปพลิเคชัน แต่คุณตั้งค่า maxWorkerThreads > 1 ในไฟล์ web.config ไม่ใช่สถานการณ์เดียวกับในตัวเลือกที่ 1 ใช่หรือไม่
  6. นอกจากนี้ ฉันสามารถใช้โหมดสถานะเซสชัน InProc กับตัวเลือก 3 ได้หรือไม่

person Ralph    schedule 04.06.2019    source แหล่งที่มา


คำตอบ (1)


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

เท่าที่ฉันรู้ กระบวนการของผู้ปฏิบัติงานคือจำนวนสูงสุดของกระบวนการ w3wp.exe ซึ่ง IIS สามารถเริ่มทำงานได้

จำนวน maxWorkerThread คือจำนวนเธรดที่กระบวนการของผู้ปฏิบัติงาน w3wp.exe สามารถใช้ได้

หากคุณตั้งค่าใน machine.config และมีค่า 20 สำหรับ .Net หมายความว่าแต่ละกระบวนการ w3wp สามารถเริ่มต้นเธรดผู้ปฏิบัติงานได้สูงสุด 20 เธรด

กระบวนการของผู้ปฏิบัติงาน = เธรด?

ไม่ กระบวนการของผู้ปฏิบัติงานหมายถึงโวลุ่ม w3wp.exe

กระบวนการของผู้ปฏิบัติงานสำหรับพูลแอปพลิเคชัน (ตัวเลือก 1 กระบวนการ case #worker > 1) ทำงานและทำงานในลักษณะเดียวกับที่เรามีหลายเธรด (ตัวเลือก 3 case #maxWorkerThreads > 1) หรือไม่

No

กระบวนการในตัวเลือก 1 เหมือนกับเธรดในตัวเลือก 3 หรือไม่

ไม่ มีสิ่งที่แตกต่างออกไป

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

ประการแรก ควรตั้งค่า maxWorkerThreads ใน machine.config เราไม่สามารถตั้งค่าผ่าน web.cofnig ได้

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

นอกจากนี้ ฉันสามารถใช้โหมดสถานะเซสชัน InProc กับตัวเลือก 3 ได้หรือไม่

แน่นอนคุณสามารถใช้มันได้

person Brando Zhang    schedule 07.06.2019
comment
เท่าที่ฉันตอนนี้ การตั้งค่า maxWorkerThreads ใน web.config เป็นไปได้หากคุณเปลี่ยน AllowDefinition=MachineOnly เป็น AllowDefinition=MachineToApplication สำหรับ processmodel ภายใน machine.config การตั้งค่าในไฟล์ machine.config จะถูกแทนที่โดยการตั้งค่าในไฟล์ web.config - person Ralph; 08.06.2019
comment
ใช่ แต่การตั้งค่านี้ไม่สามารถแทนที่โดยค่าเริ่มต้นได้ - person Brando Zhang; 10.06.2019