0Pricing
Scala for Backend Engineering & Functional Programming · บทเรียน

การวิเคราะห์ประสิทธิภาพแอปพลิเคชัน Scala

ใช้เครื่องมือวิเคราะห์ประสิทธิภาพเพื่อระบุคอขวดในโค้ด Scala และทำความเข้าใจลักษณะการทำงาน

การวิเคราะห์ประสิทธิภาพแอปพลิเคชัน Scala เป็นบทเรียน Scala for Backend Engineering & Functional Programming ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Scala for Backend Engineering & Functional Programming และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Scala for Backend Engineering & Functional Programming มีบทเรียนทั้งหมด 3 บทเรียน

เหตุใดจึงควรทำโปรไฟล์แอป Scala

เคยสงสัยไหมว่าเหตุใดแอปพลิเคชัน Scala ของคุณจึงทำงานช้าหรือใช้หน่วยความจำมากเกินไป การทำโปรไฟล์คือกุญแจสำคัญครับ

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

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

การทำโปรไฟล์ทำงานอย่างไร

โดยทั่วไปเครื่องมือทำโปรไฟล์จะทำงานด้วยวิธีการสุ่มตัวอย่างหรือการติดตั้งเครื่องมือวัด

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

เครื่องมือทำโปรไฟล์ JVM สมัยใหม่ส่วนใหญ่ผสานทั้งสองเทคนิคเพื่อให้ได้ผลลัพธ์ที่เหมาะสมที่สุด

เครื่องมือสำหรับทำโปรไฟล์ JVM

แอปพลิเคชัน Scala ทำงานบน Java Virtual Machine (JVM) ดังนั้นเราจึงใช้เครื่องมือทำโปรไฟล์ JVM

เครื่องมือเหล่านี้เชื่อมต่อกับกระบวนการ JVM ที่กำลังทำงานและรวบรวมข้อมูล ตัวเลือกยอดนิยมบางรายการมีดังนี้:

  • VisualVM: เครื่องมือภาพแบบครบวงจรที่ใช้งานได้ฟรี
  • JProfiler / YourKit: เครื่องมือทำโปรไฟล์เชิงพาณิชย์ที่มีความสามารถหลากหลาย
  • async-profiler: เครื่องมือทำโปรไฟล์ผ่านบรรทัดคำสั่งที่ทรงพลังและมีภาระเพิ่มต่ำ

เราจะเน้น VisualVM เนื่องจากเข้าถึงได้ง่ายและมีความสามารถครอบคลุม

การตั้งค่า VisualVM

VisualVM มักมาพร้อมกับ Java Development Kit (JDK)

หากต้องการเปิดใช้งาน เพียงพิมพ์ jvisualvm ในเทอร์มินัล เมื่อเปิดแล้ว คุณจะเห็นรายการกระบวนการ JVM ที่กำลังทำงานอยู่บนเครื่องของคุณ

คุณสามารถเชื่อมต่อกับแอปพลิเคชัน Scala ได้โดยเลือกกระบวนการของแอป สำหรับแอปพลิเคชันระยะไกล คุณอาจต้องกำหนดค่าการเชื่อมต่อ JMX

การระบุคอขวดของ CPU

การทำโปรไฟล์ CPU ช่วยให้คุณเข้าใจว่าเมธอดใดใช้เวลาประมวลผลมากที่สุด

ใน VisualVM คุณสามารถเริ่มเซสชันทำโปรไฟล์ CPU ได้ ระบบจะบันทึกการเรียกเมธอดและระยะเวลาของการเรียก โดยมักแสดงในรูปแบบ "แผนผังการเรียก" หรือ "จุดที่ใช้เวลามาก"

การใช้ CPU สูงมักบ่งชี้ถึงอัลกอริทึมที่ไม่มีประสิทธิภาพ การคำนวณที่มากเกินไป หรือการดำเนินงานที่บล็อกการทำงานและใช้รอบการประมวลผลอันมีค่า

จำลองการทำงานของ CPU

มาสร้างโปรแกรม Scala อย่างง่ายที่จำลองงานซึ่งใช้ CPU สูงกันครับ เรียกใช้โค้ดนี้ จากนั้นเชื่อมต่อ VisualVM เข้ากับกระบวนการของโปรแกรมและเริ่มทำโปรไฟล์ CPU

ให้มองหาเมธอด calculateHeavy ในผลลัพธ์การทำโปรไฟล์ เมธอดนี้ควรแสดงสัดส่วนเวลาการใช้ CPU ที่สูง ซึ่งบ่งบอกว่าตัวประมวลผลกำลังทำงานอยู่ที่จุดใด

object Main {
  def calculateHeavy(iterations: Int): Long = {
    var sum: Long = 0
    for (i <- 1 to iterations) {
      // Simulate complex calculation
      sum += i * 2 / (i + 1)
    }
    sum
  }

  def main(args: Array[String]): Unit = {
    println("Starting CPU-intensive task...")
    val result = calculateHeavy(100000000) // 100 million iterations
    println(s"Calculation finished. Result: $result")
    println("Press Enter to exit...")
    scala.io.StdIn.readLine() // Keep JVM alive for profiling
  }
}

ค้นหาหน่วยความจำรั่ว

การทำโปรไฟล์หน่วยความจำช่วยให้คุณวิเคราะห์การใช้ฮีป การจัดสรรออบเจ็กต์ และกิจกรรมการเก็บคืนหน่วยความจำ

เครื่องมืออย่าง VisualVM จะแสดงข้อมูลต่อไปนี้:

  • ภาพถ่ายฮีป: ภาพสถานะของออบเจ็กต์ทั้งหมดในหน่วยความจำ มีประโยชน์สำหรับค้นหาออบเจ็กต์ขนาดใหญ่หรือหน่วยความจำรั่ว
  • ออบเจ็กต์ที่ยังทำงานอยู่: ติดตามออบเจ็กต์ที่ถูกสร้างและเก็บคืนตามเวลา
  • กิจกรรม GC: การเก็บคืนหน่วยความจำทำงานบ่อยเพียงใดและใช้เวลานานเท่าใด

การใช้หน่วยความจำมากเกินไปอาจทำให้เกิด OutOfMemoryErrors หรือทำให้ประสิทธิภาพลดลงเนื่องจากมีการเก็บคืนหน่วยความจำบ่อยครั้ง

จำลองการทำงานของหน่วยความจำ

โค้ด Scala นี้สร้างออบเจ็กต์จำนวนมากเพื่อจำลองการใช้หน่วยความจำสูง ให้เรียกใช้โค้ด จากนั้นใช้ VisualVM เพื่อสร้างดัมป์ฮีปหรือตรวจสอบออบเจ็กต์ที่มีอยู่ในหน่วยความจำ

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

object Main {
  case class MyData(id: Int, name: String, values: List[Double])

  def createLotsOfData(count: Int): List[MyData] = {
    (1 to count).map { i =>
      MyData(i, s"Item$i", List.fill(100)(math.random())) // List of 100 doubles
    }.toList
  }

  def main(args: Array[String]): Unit = {
    println("Starting memory-intensive task...")
    val data = createLotsOfData(100000) // Create 100,000 MyData objects
    println(s"Created ${data.size} data objects.")
    println("Press Enter to exit...")
    scala.io.StdIn.readLine() // Keep JVM alive for profiling
  }
}

ทำความเข้าใจกับข้อมูล

เมื่อมีข้อมูลการวิเคราะห์ประสิทธิภาพแล้ว งานจริงจึงเริ่มต้นขึ้น นั่นคือการตีความข้อมูล

ให้มองหาสิ่งต่อไปนี้:

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

ข้อมูลนี้ช่วยชี้จุดที่ควรปรับปรุง และเป็นแนวทางในการเพิ่มประสิทธิภาพของคุณ

เคล็ดลับการวิเคราะห์ประสิทธิภาพ

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

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

การวิเคราะห์ประสิทธิภาพเป็นกระบวนการแบบทำซ้ำ ซึ่งช่วยปรับปรุงประสิทธิภาพของแอปพลิเคชันให้ดียิ่งขึ้น

โจทย์ท้าทายการวิเคราะห์ประสิทธิภาพ

คุณได้วิเคราะห์ประสิทธิภาพของแอปพลิเคชัน Scala และพบว่าเมธอด processLargeList อยู่ในอันดับต้น ๆ ของจุดที่ใช้ CPU มากที่สุดอย่างสม่ำเสมอ โดยใช้เวลา CPU รวมถึง 70% ข้อสรุปใดมีความเป็นไปได้มากที่สุด

ทบทวนเส้นทางการวิเคราะห์ประสิทธิภาพ

ในบทเรียนนี้ คุณได้เรียนรู้บทบาทสำคัญของการวิเคราะห์ประสิทธิภาพในการพัฒนาแอปพลิเคชัน Scala

  • เราได้สำรวจประเภทต่าง ๆ ของการวิเคราะห์ประสิทธิภาพและเครื่องมือยอดนิยม เช่น VisualVM
  • คุณได้เห็นวิธีระบุคอขวดของ CPU และหน่วยความจำผ่านตัวอย่างที่ใช้ได้จริง
  • เราได้พูดถึงวิธีตีความข้อมูลการวิเคราะห์ประสิทธิภาพและนำแนวทางปฏิบัติที่ดีมาใช้เพื่อการปรับปรุงประสิทธิภาพอย่างมีประสิทธิผล

การวิเคราะห์ประสิทธิภาพช่วยให้คุณเขียนโค้ด Scala ที่ทำงานได้เร็วและมีประสิทธิภาพยิ่งขึ้น

คำถามที่พบบ่อย

บทเรียน “การวิเคราะห์ประสิทธิภาพแอปพลิเคชัน Scala” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การวิเคราะห์ประสิทธิภาพแอปพลิเคชัน Scala” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Scala for Backend Engineering & Functional Programming ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Scala for Backend Engineering & Functional Programming มีบทเรียนทั้งหมด 3 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การวิเคราะห์ประสิทธิภาพแอปพลิเคชัน Scala”

ใช้เครื่องมือวิเคราะห์ประสิทธิภาพเพื่อระบุคอขวดในโค้ด Scala และทำความเข้าใจลักษณะการทำงาน คุณปฏิบัติ Scala for Backend Engineering & Functional Programming ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Scala for Backend Engineering & Functional Programming หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Scala for Backend Engineering & Functional Programming บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 3 บทเรียน

บทเรียน “การวิเคราะห์ประสิทธิภาพแอปพลิเคชัน Scala” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Scala for Backend Engineering & Functional Programming นี้ได้ไหม

ได้ บทเรียน Scala for Backend Engineering & Functional Programming ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การวิเคราะห์ประสิทธิภาพแอปพลิเคชัน Scala
  2. การจัดการหน่วยความจำและการปรับแต่ง GC
  3. การเพิ่มประสิทธิภาพโค้ดพร้อมกัน
← กลับไปที่ Scala for Backend Engineering & Functional Programming