คุณจะรู้ได้อย่างไรว่า w3wp.exe ทำอะไร (หรือวิธีวินิจฉัยปัญหาด้านประสิทธิภาพ)


42

ฉันมีปัญหาด้านประสิทธิภาพในไซต์ที่เราสร้างขึ้นและฉันไม่แน่ใจว่าจะเริ่มวินิจฉัยได้อย่างไร

คำอธิบายสั้น ๆ คือ: เรามีเว็บไซต์ขนาดเล็กมาก ( http://hearablog.com ) ที่มีปริมาณการใช้งานน้อยมากในเซิร์ฟเวอร์เฉพาะเส็งเคร็ง CPU มักจะสูงมากบางครั้งมันก็อยู่ที่ 100% นานหลายนาทีและ w3wp.exe ใช้เวลาส่วนใหญ่ไป สถานการณ์ทั่วไปคือ w3wp.exe ใช้เวลา 60% และ SQL Server ใช้เวลาประมาณ 30% ฐานข้อมูลของเราก็ค่อนข้างเล็กเช่นกัน

คำอธิบายยาวและรายละเอียดเพิ่มเติม:

  • ไซต์นี้โฮสต์ในเซิร์ฟเวอร์ที่เส็งเคร็งมากโดย Cari.Net จากจุดเริ่มต้นเรามีความรู้สึกว่าเซิร์ฟเวอร์ไม่ได้ทำงานอย่างถูกต้องเหมือนบางสิ่งอาจใช้เวลานานเกินไปดังนั้นนี่อาจเป็นปัญหาการกำหนดค่าตั้งแต่เริ่มต้น มันอาจจะยังเป็นไปได้ว่าเราจะได้รับเซิร์ฟเวอร์เสมือนในขณะที่เราควรจะมีเฉพาะหนึ่งแม้ว่าเราจะมีหลักฐานที่แสดงว่าต้องการบ่งชี้นี้ไม่มียกเว้นความจริงที่ว่าเซิร์ฟเวอร์มีแนวโน้มที่จะค่อนข้างช้า

  • เซิร์ฟเวอร์คือ Windows 2008 Standard 64 บิตพร้อม SQL 2008 Express

  • ฮาร์ดแวร์คือ Celeron 2.80 GHz, 1Gb RAM

  • เว็บไซต์ได้รับการพัฒนาใน ASP.Net MVC โดยใช้ Entity Framework สำหรับการเข้าถึงข้อมูล

  • ตอนนี้มันเป็นฮาร์ดแวร์เส็งเคร็ง แต่ฉันมีเซิร์ฟเวอร์อื่น ๆ ที่มีคนเหล่านี้ที่มี HW (หรือแย่กว่า) HW และประสิทธิภาพการทำงานดีกว่านี้มาก ที่กล่าวว่าเซิร์ฟเวอร์อื่น ๆ มี W2003 และ SQL2005 และฉันใช้ ASP.Net "WebForms" 2.0 ไม่มี MVC ไม่มี LINQ ไม่มี EF; ดังนั้นฉันไม่แน่ใจว่าจะไป 2008 / สิ่งอื่น ๆ หมายถึงการลงโทษประสิทธิภาพที่ยิ่งใหญ่คาดว่า

  • ฉันให้บริการไฟล์ MP3 (5-20 Mb) เป็นประจำซึ่งเป็นภาระที่ผิดปกติเล็กน้อยอาจเป็นสาเหตุของปัญหาบางอย่าง?
    นั่นจะทำให้ w3wp ใช้ CPU มากหรือไม่

  • การใช้งานดิสก์ดูเหมือนต่ำมาก หน่วยความจำมักจะอยู่ที่ประมาณ 90% แต่ดูเหมือนว่าการใช้ดิสก์จะบ่งบอกว่ามันไม่ได้เพจมากนัก

  • ฉันได้รับตันของ e-mail ทุกวันเกี่ยวกับการหมดเวลา SQL สำหรับคำสั่งการมานานกว่า 30 วินาทีแม้ว่าคำสั่งทั้งหมดของเรามีตรงไปตรงสวย (หรือควรจะเป็น แต่ EF อาจจะคาดคั้นมันขึ้นไป)

นี่คือการตรวจสอบทรัพยากรที่ดูเหมือนว่าในหนึ่งใน "sprints" ของ CPU 100% ในกรณีที่มีสิ่งใดที่มีประโยชน์

ข้อความแสดงแทน

และภาพรวมของเคาน์เตอร์วัดประสิทธิภาพ: ข้อความแสดงแทน

ตอนนี้สิ่งที่ทำให้ฉันสับสนมากคือการใช้งาน CPU ของ w3wp นั้นสูงมาก มันไม่ควรทำอะไรมาก ... ดังนั้นคำถามของฉันคือ ...

  • มีวิธีใดในการค้นหาว่า "กำลังทำอะไร" อยู่? บางทีอาจจะเป็นโปรไฟล์หรือไม่
  • เคาน์เตอร์การแสดงใด ๆ ที่ฉันควรจะดู
  • นี่เป็นสิ่งที่คาดหวังจากการกำหนดค่าฮาร์ดแวร์ / ซอฟต์แวร์นี้หรือไม่
  • นี่อาจเป็นสาเหตุของความล้มเหลวในการตั้งค่าบางอย่างคุณจะเริ่มมองหาที่ไหน?

ขอบคุณมาก.
Daniel Magliola

คำตอบ:


42

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

ลองพิจารณาใช้การติดตามคำขอที่ล้มเหลวเพื่อติดตามเวลาต่อคำขอเพื่อดูว่าพวกเขาใช้เวลานานแค่ไหน


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

1
คุณสามารถพิมพ์ 0 ในตัวกรองแล้วคลิกไปซึ่งจะตั้งค่าเป็น 0 วินาที นอกจากนี้คุณสามารถเรียกใช้จากพรอมต์คำสั่งยกระดับ "% windir% \ system32 \ inetsrv \ appcmd.exe คำขอรายการ"
Carlos Aguilar Mares

1
ขอบคุณมากคาร์ลอส! นี่คือสิ่งที่ฉันทำเพื่อค้นหาคำขอเดียว (เรามี cron) ที่ฆ่าเซิร์ฟเวอร์ของฉันทุก 5 นาที (ใช้เวลา 3.5 นาทีในการทำงานดังนั้นจึงเกือบตลอดเวลาที่ CPU 100%) ขอบคุณ !!!
Daniel Magliola

1
UI นี้บอกฉันว่ามีการเข้าถึง URL ใด น่าเสียดายที่โพสต์ไปยังเว็บเซิร์ฟเวอร์ asmx และไม่มีข้อมูลดังกล่าว (headbang)
Ross Presser

5

ตกลงเพื่อเริ่ม - เซิร์ฟเวอร์เป็นคนเส็งเคร็งจริงๆ แต่มันควรจะเพียงพอ

  • สำหรับการจำลองเสมือนให้ตรวจสอบไดรเวอร์ของคุณ ฉันรู้ว่าไม่มีแพลตฟอร์ม virutalization ที่ซ่อนซีพียู (และฉันคิดว่ามีคนใส่ไฮเปอร์ -v หรือ esx บน celeron) แต่ไดรเวอร์สำหรับดิสก์ ฯลฯ เป็นข้อบ่งชี้

  • CPU ไม่ควรสูงขนาดนั้น น่าเศร้าที่ RAM นี้คุณเป็นขนมปังมาก - ถ้าคุณเริ่มเพิ่ม profiler คุณจะทำให้หน่วยความจำที่คุณมีอยู่นั้นสวยมาก

ฉันจะ:

  • ตรวจสอบบันทึกการทำงานของสิ่งต่างๆในขณะนี้
  • อัปเกรดระบบปฏิบัติการเป็น 2008 R2 - มีข้อมูลเพิ่มเติมมากมายที่นั่น

สำหรับการทดสอบ:

  • ในสภาพแวดล้อมการพัฒนาของคุณให้ทำสำเนาของไซต์และทำการทดสอบประสิทธิภาพ
  • ทำโปรไฟล์ที่นั่น
  • ใช้การติดตามคำขอล้มเหลวเพื่อค้นหาคำขอที่ล้มเหลว

http://learn.iis.net/page.aspx/266/troubleshooting-failed-requests-using-tracing-in-iis-7/

มีบางอย่างเริ่มต้นที่นั่น สิ่งนี้อาจให้คำแนะนำแก่คุณในกรณีที่เกิดปัญหามากกว่า - hm - "categorizable"

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

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

โดยทั่วไปนี่ไม่ใช่เซิร์ฟเวอร์ที่ฉันชอบมีร่างกาย - มันเล็กมากมันไม่มีเหตุผลที่ IMHO จะมีเครื่องที่นั่น เสมือนจะดีกว่า;)


ขอบคุณมากสำหรับคำตอบของคุณ. คำถามบางอย่าง: บันทึกใดที่คุณจะตรวจสอบสิ่งที่กำลังดำเนินการในขณะนี้? (ขออภัยถ้านี่เป็นคำถามสำหรับมือใหม่) - อัปเกรดระบบปฏิบัติการ: เราอาจลองทำเช่นนั้น แต่ฉันเกรงว่ามันอาจทำสิ่งต่าง ๆ ได้บางทีอาจจะปลอดภัยกว่านี้ไหม - สภาพแวดล้อม Dev: ปัญหาคือว่าในสภาพแวดล้อม dev ของฉันมันทำงานได้ดี CPU นั้นเล็กน้อย, คำขอไม่ได้ล้มเหลว, ฯลฯ
Daniel Magliola

สำหรับบันทึก I / O: ฉันเพิ่งเพิ่มเคาน์เตอร์ที่คุณพูดถึงและพวกเขาทั้งหมดที่ 0 ในขณะที่ CPU สูง ฉันเพิ่งเพิ่มสกรีนช็อตของเคาน์เตอร์วัดประสิทธิภาพบางตัวที่ฉันดู ฉันรู้ว่าสแน็ปช็อตไม่ได้บอกเรื่องราวทั้งหมด แต่ค่าเหล่านั้นมีแนวโน้มที่จะค่อนข้างเสถียร คุณคิดว่าจำนวนการเชื่อมต่อปัจจุบัน (ซึ่งฉันไม่มีคำอธิบาย) อาจเป็นปัญหาหรือไม่? มีความคิดเห็นเกี่ยวกับวิธีการคิดออกว่าการเชื่อมต่อเหล่านั้นกำลังร้องขอ / กำลังทำอะไรอยู่? เคาน์เตอร์อื่น ๆ ที่คุณคิดว่าอาจมีประโยชน์สำหรับการวินิจฉัยสิ่งนี้
Daniel Magliola

ดี R2 ค่อนข้างปลอดภัย ฉันอัพเกรดทุกอย่างและไม่เคยมีปัญหา อย่างไรก็ตาม .... นี่เป็นปัญหาของซีพียูและการใช้งานได้ดีมากเพราะคุณไม่ได้ติดตั้งแรมเพียงพอสำหรับติดตั้ง profiler ฉันจะลองติดตั้งใหม่ทั้งหมด ใช่แย่แล้ว แต่หมายความว่าคุณสามารถติดตั้ง R2 ใหม่และดูว่าปัญหายังคงมีอยู่หรือไม่ สิ่งที่ไม่ดีคือคุณไม่ได้สำรองระบบดังนั้นคุณจึงไม่สามารถระบุได้ว่าปัญหาคือ "ท้องถิ่น" หรือมากกว่าทั่วไป อีกทางเลือกหนึ่ง: หยุด IIS ล้างโฟลเดอร์ temp ทั้งหมดที่ใช้งานด้วย
TomTom

สำหรับการรวบรวมและดูว่าเกิดอะไรขึ้นเมื่อคุณรีสตาร์ท ด้วย R2 คุณสามารถดูได้ว่า IIS เปิดไฟล์อะไร / เป็นแอปพลิเคชั่นเว็บเดียวในท้องที่หรือไม่และยังมีหากเว็บไซต์ทั้งหมดหยุดทำงานหรือไม่ สิ่งต่อไปที่ต้องลอง - ปิดไซต์ทั้งหมดและดูว่ามีสิ่งใดที่ทำลายได้บ้าง
TomTom

ในที่สุดปัญหาเกี่ยวกับเซิร์ฟเวอร์เสมือนก็คือเท่าที่ฉันได้พบเราก็จ่ายเงินมากขึ้นหรือเท่ากันสำหรับฮาร์ดแวร์เดียวกันรวมถึงค่าใช้จ่ายแบนด์วิดธ์เป็นนักฆ่า (โปรดทราบว่าเราให้บริการไฟล์เสียง) เราจะย้ายเข้าสู่เซิร์ฟเวอร์ที่ใหญ่กว่าถ้าเราต้องทำ แต่ด้วยความซื่อสัตย์กับปริมาณการใช้งานของเราจะต้องมีปัญหาบางอย่างเราไม่ควรใช้ CPU 100% เลยทีเดียว
Daniel Magliola

4

คุณสามารถลองใช้โปรแกรมที่ชื่อว่าProcess Explorerเพื่อตรวจสอบแต่ละเธรดที่ทำงานภายใต้กระบวนการ w3wp ควรอนุญาตให้คุณดูว่าเธรดใดก่อให้เกิดความเสียหายทั้งหมด


3

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

http://www.microsoft.com/en-us/download/details.aspx?id=26798


1

ฉันเห็นด้วยกับ TomTom โดยเฉพาะอย่างยิ่งการได้รับไมล์สะสมที่ดีขึ้นจาก Virtual ณ จุดนี้ การดีบัก / ทำโปรไฟล์ภายในเครื่องเพื่อ จำกัด ปัญหาเป็นสิ่งที่ควรทำ

ฉันจะสวมหมวกและเสื้อคลุมอันงดงามของ Karnak และขอซองแรก กบฏราม สิ่งใดที่คุณจะได้รับเมื่อใส่ OS, ASP.NET และโลภ SQL Server Express เป็น 1GB

ฉันเชื่อว่าปัญหาของคุณคือ SQL Server Express กำลังดึง RAM ที่มีอยู่ทั้งหมดสำหรับบัฟเฟอร์พูลและปล่อยช้า ดูhttp://support.microsoft.com/kb/321363สำหรับข้อมูลเพิ่มเติม นอกจากนี้ IIS ยังมีแคชเริ่มต้น 256MB ซึ่งคุณอาจต้องปรับแต่ง ( https://stackoverflow.com/questions/2853135/controlling-asp-net-output-cache-memory-usage ) Debug Diagnosticsเป็นเครื่องมือที่ยอดเยี่ยมสำหรับการแก้ไขปัญหานี้ (โอเคอาจเป็นค้อนขนาดใหญ่)

http://technet.microsoft.com/en-us/library/bb742546.aspxเป็นบทความที่น่าอ่าน http://social.technet.microsoft.com/forums/en-US/sharepointadmin/thread/706c653a-16b0-4696-85ee-9ae3552a582eคะแนนในแอปการรีไซเคิลแอพกลายเป็นเรื่องที่เป็นไปไม่ได้อีกแล้ว


1

ใช้ตัวนับ "กระบวนการ" ของ Perfmon เพื่อดูคุณสมบัติแต่ละอย่างของกระบวนการ w3wp.exe เวลา CPU สำหรับกระบวนการของผู้ปฏิบัติงานเป็นเวลาเคอร์เนลเท่าใด เวลาเคอร์เนลสูงอาจบ่งบอกถึงเพจจิ้ง แต่คุณบอกว่าคุณไม่มั่นใจ ความเป็นไปได้อื่น ๆ ก็คือไดรเวอร์ดัฟฟ์ กระบวนการของผู้ปฏิบัติงานมี 23 เธรดที่ใช้งานอยู่ซึ่งดี แต่พวกเขากำลังทำอะไร ลอง SysInternals 'ProcessExplorer เพื่อขุดหาอีกเล็กน้อย คุณยังสามารถดูการเชื่อมต่อ TCP / IP ที่กำลังเล่นอยู่ ฉันไม่ได้ใช้ SQL Express แต่มีพารามิเตอร์ปรับแต่งหน่วยความจำเหมือนพี่ใหญ่ SQL นั้นกำลังหิวโหย IIS ของหน่วยความจำหรือไม่


มาดูกันว่าฉันทำถูกไหม ... ฉันเพิ่มเวลาตัวประมวลผล% และ% ตัวจับเวลาเวลาผู้ใช้ทั้งสองสำหรับกระบวนการ w3wp และพวกเขาทั้งคู่ตรงกันกันอย่างสมบูรณ์ตลอดเวลา นั่นหมายความว่าไม่มีเวลาเคอร์เนลหรือฉันกำลังดูวิธีนี้ผิดหรือเปล่า? (ขออภัยฉันเป็นมือใหม่ในเรื่องนี้)
Daniel Magliola

0

อาจไม่เกี่ยวข้องกันโดยสิ้นเชิง แต่ให้ยืนยันว่าคุณใช้ NOLOCK ในการสืบค้นของคุณหรือไม่ มันอาจช่วยในกรณีของการหมดเวลาของ SQL

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