จะระบุสาเหตุของการใช้ CPU 100% ใน Azure App Service ได้อย่างไร


12

ฉันมีห้าแอพในแผนบริการแอป Azure สำเนาต่าง ๆ ทั้งหมดของแอพเดียวกันสำหรับลูกค้าที่แตกต่างกัน มันเป็นแอพ ASP.NET MVC ที่มีฐานข้อมูล SQL

เช้านี้ฉันตื่นขึ้นมาเพื่อเว็บไซต์ช้าและไม่ตอบสนองบางครั้งทำให้เกิดข้อผิดพลาด 503 เมื่อตรวจสอบตัวชี้วัด CPU / หน่วยความจำสำหรับแผนบริการ App ฉันค้นพบ CPU ที่ตรึงที่ 100%:

CPU ที่ 100%

และกราฟของเวลา CPU ของแต่ละไซต์แสดงให้เห็นว่าพวกเขาทั้งหมดกำลังออกไปพร้อมกัน

การใช้งาน CPU ของแต่ละไซต์

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

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

ฉันพบปัญหาที่คล้ายกันสองสามสัปดาห์ที่ผ่านมาและคิดว่าฉันเติบโตใหญ่เกินไปสำหรับ App Plan ของฉันดังนั้นอัปเกรดจาก S1 เป็น S2 และมันก็ใช้ได้ดีจนถึงทุกวันนี้

ฉันสูญเสียโดยรวมเป็นวิธีการหาสาเหตุของพฤติกรรมหิว CPU นี้ ใครสามารถชี้ให้ฉันในทิศทางที่ถูกต้องว่าฉันจะเริ่มวินิจฉัยสิ่งนี้ได้อย่างไร


ดูเหมือนว่าสิ่งนี้จะเกิดขึ้นกับ Azure app service plan คุณติดต่อกับ MS มาบ้างไหม? - หากคุณไม่ทำการเปลี่ยนแปลงใด ๆ ฉันจะแจ้งให้พวกเขาทราบว่ามีปัญหากับแพลตฟอร์ม
Sum1sAdmin

ฉันไม่มีแผนสนับสนุนกับพวกเขาดังนั้นอย่าคิดว่าจะมีวิธีใดให้พวกเขารู้ นั่นเป็นความกังวลเล็กน้อยหากฉันเพิ่งจะได้สัมผัสกับปัญหา CPU 100% - อาจต้องหาซัพพลายเออร์รายอื่น คุณมีสองกรณีที่จะช่วยคุณคิดว่า?
littlecharva

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

คำตอบ:


6

เรามีปัญหานี้สองสามครั้งและทุกครั้งที่มีการเรียกใช้ GC (ชุดเก็บรวบรวมขยะ) มันยากที่จะพิสูจน์และวินิจฉัย แต่สิ่งที่ฉันทำคือใช้เว็บไซต์ kudo (scm) คลิก tools => support (ซึ่งจะพาคุณไปยังไซต์สนับสนุนสำหรับแอป

จากที่นี่คุณเลือกไดเรกทอรีของคุณ (ในกรณีที่คุณมีหลาย ๆ ) และไซต์ให้คลิกที่วิเคราะห์ => ตัวชี้วัดจากนั้นปุ่มวินิจฉัย ( หมายเหตุสิ่งนี้ได้เปลี่ยนแปลงไปแล้วดังนั้นขั้นตอนเหล่านี้สามารถเปลี่ยนแปลงได้ตลอดเวลา) จากนั้นกลับมาวิเคราะห์ => ในที่สุดจะได้รับรายงานการถ่ายโอนข้อมูลหน่วยความจำ => "สถานะการวิเคราะห์" นี่ควรเป็นไฟล์ mht (ซึ่งคุณสามารถเปิดในเบราว์เซอร์ IE หรือ Edge ที่น่ารังเกียจ) จากนั้นค้นหาคีย์ "gc"

คุณจะพบเฟรมสแต็คการโทรที่น่าสนใจที่มีการอ้างอิงถึงสิ่งต่าง ๆ เช่น "GCFrame" หรือเรียกอีกอย่างว่า "System.Threading.WaitHandle.WaitMultiple" ที่น่าสนใจหากคุณได้รับสิ่งเหล่านี้มากเกินไประบบของคุณอาจมีปัญหากับการรวบรวมขยะ .

วิธีแก้ปัญหา ... นั่นเป็นหัวข้อที่กล่าวถึงในหลาย ๆ หัวข้อเพราะมันเหมือนกับถามว่า "ฉันจะใช้ชีวิตในโลกที่มี IE 6 ยังใช้งานอยู่ได้อย่างไร" ...


1
สิ่งนี้ได้ย้าย ตอนนี้อยู่ในบริการแอพ (ไม่ใช่ไซต์ scm, ไซต์ Azure ปกติ) ที่ "วินิจฉัยและแก้ปัญหา -> เครื่องมือวินิจฉัย -> รวบรวมการถ่ายโอนข้อมูลหน่วยความจำ"
Josh Noe

3

ทางออกที่ดีที่สุดของคุณคือการติดตั้ง New Relic หรือ Application Insights สำหรับแอพนี้ สามารถติดตั้งได้อย่างง่ายดายผ่าน App Service -> เครื่องมือ -> การตรวจสอบประสิทธิภาพ สิ่งนี้จะให้มุมมองโดยละเอียดเกี่ยวกับสิ่งที่เกิดขึ้นในเซิร์ฟเวอร์และฝั่งไคลเอ็นต์

การตรวจสอบแอปพลิเคชัน

บทความ: ตรวจสอบประสิทธิภาพเว็บแอป Azure

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