การสอนการแก้ปัญหาการแก้ไขปัญหา CPU เซิร์ฟเวอร์ Alibaba Cloud เต็มรูปแบบ

เมฆ 2026-06-02 阅读 13
1

สำหรับการดำเนินการและการบำรุงรักษาและการพัฒนาข้อความเตือนที่น่าตกใจที่สุดในตอนกลางดึกคือ "อัตราการใช้งาน CPU ของระบบอินสแตนซ์ ECS เซิร์ฟเวอร์คลาวด์ของคุณสูงถึง100%"

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

บทช่วยสอนในวันนี้จะพาคุณไปพบกับทหารผ่านศึกที่มีประสบการณ์อย่างใจเย็นและเป็นมาตรฐานในการตรวจสอบและแก้ปัญหา CPU เต็มของเซิร์ฟเวอร์ Alibaba Cloud

ขั้นตอนแรก: การตรวจสอบความเข้าใจผิดและการเตรียมการก่อน "พบแพทย์"

ก่อนพิมพ์คำสั่งให้ไปก่อน

คอนโซล Alibaba Cloud

ดูตลาดการตรวจสอบและยืนยันตัวบ่งชี้ที่สำคัญ:

ประเภทพื้นฐาน (T series) รวม CPU

หากคุณซื้อ "อินสแตนซ์ประสิทธิภาพต่อเนื่อง" ของ Alibaba Cloud (เช่น t5, t6) เซิร์ฟเวอร์ประเภทนี้มักจะจำกัดพลังการประมวลผลของ CPU พื้นฐาน (เช่นเพียง20%) เมื่อธุรกิจของคุณเกินมาตรฐานจะใช้ "คะแนน CPU" เพื่อให้ได้พลังการประมวลผลเต็มรูปแบบเมื่อคะแนนหมดเซิร์ฟเวอร์จะถูกบังคับให้ "จำกัดความเร็ว" ซึ่งแสดงให้เห็นว่าซีพียูถูกล็อคที่ตำแหน่งที่ต่ำและระบบจะไม่สามารถเคลื่อนที่ได้

วิธีแก้ไข: หากอินสแตนซ์ประสิทธิภาพต่อเนื่องหมดให้เปิด "โหมดไม่มีข้อจำกัดด้านประสิทธิภาพ" ในคอนโซลหรืออัปเกรดเป็นอินสแตนซ์ "สากล" หรือ "คอมพิวเตอร์" โดยตรง

หากไม่รวมข้อจำกัดของรุ่นฮาร์ดแวร์หมายความว่ามีกระบวนการภายในเซิร์ฟเวอร์ที่บ้าคลั่งและเราต้องเข้าสู่ระบบและเริ่ม "จับขโมย"

ขั้นตอนที่สอง: ซีพียูเซิร์ฟเวอร์ Linux เต็มขั้นตอนการตรวจสอบ

เซิร์ฟเวอร์ Linux เป็นพื้นที่ที่มีอุบัติการณ์ของการระเบิดของ CPU สูงซึ่งส่วนใหญ่เกิดจากรหัสที่ไม่ดีการทำงานพร้อมกันสูงหรือโทรจันในการขุด

ขั้นตอนที่1: ค้นหาผู้ร้ายของพลังการคำนวณ "การกิน" (

ด้านบน

คำสั่ง)

ใช้ SSH เพื่อเชื่อมต่อกับเซิร์ฟเวอร์และป้อนคำสั่งทั่วไปของจักรวาลโดยตรงในเทอร์มินัล:

แบช

ด้านบน

หลังจากเข้าสู่อินเทอร์เฟซแบบโต้ตอบแล้วให้กดตัวพิมพ์ใหญ่บนแป้นพิมพ์

พี

(Shift P) เพื่อให้กระบวนการเรียงลำดับจากสูงไปต่ำตามการใช้งาน CPU

จับตาดูสองสามบรรทัดแรกและสังเกตฟิลด์หลักสามช่องต่อไปนี้:

PID: หมายเลขประจำตัวของกระบวนการฆ่ากระบวนการในภายหลังขึ้นอยู่กับมัน

USER: ผู้ใช้รายใดเริ่มกระบวนการนี้ถ้าเป็น www หรือ nginx น่าจะเป็นปัญหารหัสถ้าเป็นรูทและชื่อแปลกระวังโทรจัน

COMMAND: ชื่อของกระบวนการ

การวิเคราะห์ผู้ต้องสงสัย COMMAND ทั่วไป:

Php-fpm, java, node, python: รหัสธุรกิจกำลังทำงานและวนซ้ำหรือฐานข้อมูลที่มีความพร้อมกันสูงไม่ได้รับการจัดทำดัชนีซึ่งทำให้ยากต่อการพกพา

Mysql: ฐานข้อมูลกำลังดำเนินการค้นหาที่เกี่ยวข้องที่ซับซ้อนและการสแกนแบบเต็มตาราง

Kswapd0: ระบบมีหน่วยความจำไม่เพียงพอและกำลังย้ายข้อมูลหน่วยความจำไปยังพาร์ติชัน Swap ของฮาร์ดดิสก์อย่างเมามันทำให้ CPU ทะยานขึ้น

Kinsing, sysrv, สตริงอักขระที่อ่านไม่ออก: ยินดีด้วยเซิร์ฟเวอร์ถูกแฮ็กนี่คือโทรจันการขุดแบบคลาสสิก

ขั้นตอนที่2: การลอกลึกดูว่ากำลังทำอะไรอยู่ในกระบวนการ

หากคุณพบว่าโค้ดของคุณเอง (เช่นกระบวนการ Java หรือ PHP) เต็มไปด้วย CPU การรู้ PID นั้นไม่เพียงพอคุณต้องรู้ว่าโค้ดบรรทัดใดเป็นปีศาจ

สถานการณ์ A: กระบวนการ Java เต็มไปด้วยการสอบสวน (การสัมภาษณ์แบบคลาสสิกและคำถามเชิงปฏิบัติ)

สมมติว่า PID กระบวนการ Java ที่โหลดเต็มคือ

1234

ค้นหาหมายเลขเธรด (TID) ที่ใช้ CPU มากที่สุดในกระบวนการนี้: Bashtop -Hp 1234สมมติว่าเธรด1256คิดเป็น90% ของ CPU

แปลงเธรดนี้เป็นเลขฐานสิบหก (เนื่องจากใช้เลขฐานสิบหกในสแต็ก Java):Bashprintf "% x \ n" 1256 # ผลลัพธ์เอาต์พุตถือว่าเป็น: 4e8

ใช้เครื่องมือ jstack เพื่อพิมพ์เธรดสแต็กของ Java และใช้ grep เพื่อจับหมายเลขเธรดเลขฐานสิบหก: Bashjstack 1234 | grep -A 20 "4e8" หน้าจอจะแสดงโดยตรงว่าคลาสใดและบรรทัดใดของโค้ด (เช่น com.xx. service. impl. OrderServiceImpl. lambda $0(OrderServiceImpl. java:88)) กำลังทำงานลูปที่ไม่มีที่สิ้นสุดชัดเจนในพริบตา

ฉาก B:MySQL ทำให้ CPU เต็ม

ถ้าเป็นเช่นนั้น

Mysql

กระบวนการเป็นอันดับหนึ่งลงชื่อเข้าใช้ฐานข้อมูลทันทีเพื่อดำเนินการ:

เอสคิวแอล

แสดงรายการกระบวนการทั้งหมด;

ดูคำสั่ง SQL ที่กำลังดำเนินการอยู่เน้นดู

เวลา

(เวลาดำเนินการ) ประโยคที่ยาวที่สุดหากคุณเห็นจำนวนมาก

Selecting

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

ขั้นตอนที่3: กำจัดอย่างเด็ดขาด (วิธีจบอย่างสง่างาม)

สถานการณ์ที่1: การวนซ้ำของรหัสปกติ

หากมีผลต่อการอยู่รอดคุณสามารถใช้ PID เพื่อฆ่ากระบวนการเพื่อแลกกับเวลาหายใจ:

แบช

Kill-9กระบวนการ PID

จากนั้นรีบเปลี่ยนข้อผิดพลาดของรหัส

สถานการณ์ที่2: ม้าโทรจันขุด

แฮกเกอร์มักจะทำงานตามกำหนดเวลาคุณเป็นเพียง

Kill-9

มันไม่สามารถฆ่าได้และจะฟื้นคืนชีพในไม่กี่วินาที

ตรวจสอบงานที่กำหนดเวลา: crontab -l พบสคริปต์ดาวน์โหลดแปลกๆทันทีด้วย cron

ลบ tab -e

ตรวจสอบกระบวนการที่เหลือและฆ่า

อาวุธที่ดีที่สุด: หากม้าโทรจันติดเชื้อในพื้นที่ขนาดใหญ่วิธีแก้ปัญหาที่เร็วและสะอาดที่สุดคือ "ใช้สแนปชอตเพื่อกู้คืนระบบ" หรือติดตั้งระบบใหม่โดยตรงโดยอ้างอิงบทความก่อนหน้านี้

ขั้นตอนที่สาม: ขั้นตอนเต็มรูปแบบของการตรวจสอบ CPU เซิร์ฟเวอร์ Windows

เซิร์ฟเวอร์ Windows ค่อนข้างใช้งานง่ายและแก้ไขได้โดยตรงผ่านอินเทอร์เฟซแบบกราฟิก

ขั้นตอนที่1: เปิดตัวจัดการงาน

เดสก์ท็อประยะไกลเชื่อมต่อกับเซิร์ฟเวอร์

คลิกขวาที่แถบงานที่ด้านล่างแล้วเลือกตัวจัดการงาน

คลิกที่ส่วนหัวของคอลัมน์ CPU เพื่อจัดเรียงตามการใช้งานจากสูงไปต่ำ

ขั้นตอนที่2: การตรวจสอบทรัพยากรในเชิงลึก

บางครั้งตัวจัดการงานสามารถมองเห็นได้เท่านั้น

W3wp.exe

(กระบวนการ IIS) หรือ

Sqlservr.exe

สูงมากมองไม่เห็นรายละเอียด

ที่ด้านล่างของตัวจัดการงานให้คลิกเพื่อเปิดการตรวจสอบทรัพยากร

สลับไปที่แท็บ CPU 。

ที่นี่คุณสามารถดูบริการเฉพาะของแต่ละกระบวนการหากเป็น w3wp.exe ที่สูงขึ้นแสดงว่ามีปัญหากับรหัสเว็บไซต์บน IIS คุณสามารถใช้ "กระบวนการทำงาน" ของ IIS เพื่อดูว่าเว็บไซต์ใดและ URL ใดใช้ทรัพยากรอย่างบ้าคลั่ง

ขั้นตอนที่สี่: การป้องกันดีกว่าการรักษา-จะป้องกันไม่ให้ CPU เต็มอีกครั้งได้อย่างไร?

หลังจากไฟดับแล้วคุณต้องตั้งแนวป้องกันสามแนวเพื่อไม่ให้ตื่นขึ้นมากลางดึก:

กำหนดค่า "กฎการแจ้งเตือน CPU" ในคอนโซล Alibaba Cloud: เข้าสู่การตรวจสอบระบบคลาวด์-> การจัดกลุ่มแอปพลิเคชันหรือการตรวจสอบโฮสต์เพิ่มสัญญาณเตือนไปยังเซิร์ฟเวอร์: เมื่ออัตราการใช้งาน CPU> = 85% เป็นเวลา5นาทีให้ส่งข้อความ/Dingding ไปยังโทรศัพท์ทันทีแทรกแซงก่อนถึง100%

เพิ่ม "บันทึกการสืบค้นช้า" ในฐานข้อมูล: เปิด slow_query_log ของ MySQL และบันทึก SQL ทั้งหมดที่มีเวลาดำเนินการมากกว่า1วินาทีแจกจ่ายให้กับการพัฒนาและการเพิ่มประสิทธิภาพทุกวันเพื่อกำจัดอันตรายที่ซ่อนอยู่ในตา

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

สรุป

การตรวจสอบ CPU เต็มรูปแบบเช่นการจับขโมย:

ขั้นแรกให้ใช้ตัวจัดการด้านบน/งานเพื่อล็อคผู้ต้องสงสัย (PID) จากนั้นใช้ jstack / PROCESSLIST เพื่อรับหลักฐานทางอาญา (บรรทัดใดของรหัส/SQL ใด) และสุดท้ายจัดการอย่างเด็ดขาดและติดตั้งสัญญาณเตือนการตรวจสอบ

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

cloud
← 返回新闻中心