นักฆ่า OOM บนแพลตฟอร์มมือถือโดย Kwai
中文版本请参看这里
KOOM สร้างโซลูชันการตรวจสอบหน่วยความจำออนไลน์ประสิทธิภาพสูงบนมือถือ ซึ่งให้รายงานโดยละเอียดเมื่อตรวจพบปัญหาที่เกี่ยวข้องกับ OOM และได้แก้ไขปัญหา OOM จำนวนมากในแอปพลิเคชัน Kwai ขณะนี้มีให้บริการบน Android
ด้วยความซับซ้อนที่เพิ่มขึ้นของตรรกะทางธุรกิจเทอร์มินัลมือถือ และความนิยมที่ค่อยเป็นค่อยไปของสถานการณ์ที่มีความต้องการหน่วยความจำสูง เช่น ตัวแปลงสัญญาณ 4K และนาฬิกาวิเศษ AR ปัญหา OOM ได้กลายเป็นปัญหาอันดับหนึ่งในการจัดการความเสถียรของไคลเอ็นต์ Kuaishou ในขั้นตอนการวนซ้ำเวอร์ชันรายวัน OOM กระชากเกิดขึ้นเป็นครั้งคราว และสภาพแวดล้อมออนไลน์มีความซับซ้อนมาก มีการทดลอง AB นับพันครั้ง ไม่สามารถป้องกันก่อนและหลังฟื้นตัวได้ ดังนั้นจึงจำเป็นต้องมีโซลูชันการตรวจสอบหน่วยความจำออนไลน์ประสิทธิภาพสูงอย่างเร่งด่วน
แล้วการกำกับดูแล OOM ควรสร้างขึ้นอย่างไร? ปัจจุบัน KOOM มีความสามารถในการตรวจสอบการรั่วไหลของ Java Heap/Native Heap/Thread และจะสร้างการตรวจสอบสถานการณ์หลายมิติและหลายธุรกิจในอนาคต
koom-java-leak
ใช้สำหรับการตรวจสอบการรั่วไหลของ Java Heap: ใช้กลไก Copy-on-write เพื่อแยกดัมพ์กระบวนการลูก Java Heap ซึ่งช่วยแก้ปัญหาได้ แอปค้างเป็นเวลานานระหว่างการถ่ายโอนข้อมูล สำหรับรายละเอียด โปรดดูที่นี่koom-native-leak
เป็นโซลูชันการตรวจสอบการรั่วไหลของ Native Heap: ใช้กลไกการรวบรวมขยะการติดตามเพื่อวิเคราะห์ Native Heap ทั้งหมด และส่งออกข้อมูลหน่วยความจำที่รั่วไหลโดยตรง เช่น: ขนาด/สแต็กการจัดสรร/ฯลฯ; ลดต้นทุนในการวิเคราะห์และแก้ไขหน่วยความจำรั่วสำหรับนักศึกษาธุรกิจได้อย่างมาก สำหรับรายละเอียด โปรดดูที่นี่koom-thread-leak
ใช้สำหรับการตรวจสอบการรั่วไหลของเธรด โดยจะเชื่อมโยงฟังก์ชันวงจรชีวิตของเธรด และรายงานข้อมูลเธรดที่รั่วไหลเป็นระยะๆ สำหรับรายละเอียด โปรดดูที่นี่ โมดูลเนทีฟทั้งหมดรองรับโหมดการเข้าถึงสองโหมด ได้แก่ c++_shared และ c++_static สำหรับรายละเอียด โปรดดูที่ cpp-support
dependencies {
// In shared mode, multiple modules share the same libc++_shared.so (STL), and the package
// size is small, but when multiple modules depend on different STL versions, the final
// compilation will conflict. For example, you might get "dlopen failed: cannot locate symbol
// "__emutls_get_address" referenced by" errors.
implementation " com.kuaishou.koom:koom-java-leak: ${ latest_version } "
// Or in static mode, each module has its own STL, the package size is large, and there are no
// compilation and runtime problems.
implementation " com.kuaishou.koom:koom-java-leak-static: ${ latest_version } "
// If you depend on multiple modules, the shared and static modes cannot be mixed.
// The following way is wrong, remember!
implementation " com.kuaishou.koom:koom-java-leak-static: ${ latest_version } "
implementation " com.kuaishou.koom:koom-monitor-base: ${ latest_version } "
}
pickFirst
ในไดเร็กทอรีรากของโปรเจ็กต์ build.gradle: packagingOptions {
// Select the first libc++_shared.so when packaging apk, it may encounter unpredictable bugs
// at runtime, use it with caution!
pickFirst ' lib/*/libc++_shared.so '
}
< uses-sdk tools : overrideLibrary = " com.kwai.koom.fastdump, com.kwai.android.base, com.kwai.koom.base " />
KOOM อยู่ภายใต้ลิขสิทธิ์ Apache 2.0 สำหรับรายละเอียดตรวจสอบใบอนุญาต
ตรวจสอบ CHANGELOG.md เพื่อดูรายละเอียดประวัติการเปลี่ยนแปลง
หากคุณสนใจที่จะมีส่วนร่วม โปรดดูที่ CONTRIBUTING.md
ยินดีต้อนรับรายงานปัญหาหรือติดต่อเราในกลุ่ม WeChat