Máy ảo Java (JVM) tạo ra 3 tạo tác quan trọng hữu ích để tối ưu hóa hiệu suất và khắc phục sự cố sản xuất. Những hiện vật đó là:

  1. Nhật ký thu gom rác (GC)
  2. Thread Dump
  3. Heap Dump

1. Nhật ký thu gom rác

a) Nhật ký GC là gì?

GC Log chứa thông tin liên quan đến các sự kiện thu gom rác. Nó sẽ cho biết có bao nhiêu sự kiện GC đã chạy, loại lệnh này lệnh này trong số các sự kiện GC của chúng (tức là Young GC hoặc Full GC), mỗi sự kiện GC tạm dừng ứng dụng trong bao lâu, mỗi sự kiện GC đã lấy lại bao nhiêu đối tượng.

b) Nhật ký GC trông như thế nào?

Tệp nhật ký thu gom rác mẫu có thể được tìm thấy tại đây.

c) Nhật ký GC được sử dụng ở đâu?

Nhật ký thu gom rác được sử dụng để nghiên cứu GC và hiệu suất bộ nhớ của ứng dụng. Nó được sử dụng để tối ưu hóa thời gian tạm dừng GC, nó được sử dụng để xác định kích thước bộ nhớ tối ưu cho ứng dụng của bạn, nó cũng được sử dụng để khắc phục sự cố liên quan đến bộ nhớ.

d) Cách tạo nhật ký GC?

Bạn có thể tạo nhật ký thu gom rác bằng cách chuyển các đối số JVM sau:

Trên các phiên bản Java cho đến 8:

Trên phiên bản Java bắt đầu từ 9:

file-path: là vị trí sẽ ghi tệp nhật ký Garbage Collection.

e) Làm thế nào để hiểu Nhật ký GC?

Định dạng nhật ký thu gom rác khác nhau tùy thuộc vào nhà cung cấp JVM của bạn (Oracle, HP, IBM, Azul, ..), phiên bản Java (1.5, 5, 6, 7, 8, 9, 10, 11, 12,…), rác thuật toán thu thập (Serial, Parallel, CMS, G1, Shenandoah, Z GC) và các đối số JVM mà bạn truyền vào. Vì vậy, không có một định dạng tiêu chuẩn nào có sẵn. Tuy nhiên, đây là một video hướng dẫn cố gắng giúp bạn hiểu định dạng tệp nhật ký GC.

f) Công cụ nào được sử dụng để phân tích nhật ký GC?

Có nhiều công cụ phân tích nhật ký thu gom rác. Một số cái phổ biến được đưa ra ở đây: GCeasy, IBM GC & Memory visualizer, HP JMeter, Google Garbage Cat

2. Thread Dump

a) Thread Dump là gì?

Kết xuất luồng là một ảnh chụp nhanh của tất cả các luồng đang chạy trong ứng dụng tại một thời điểm. Nó chứa tất cả thông tin về mỗi luồng trong ứng dụng như trạng thái luồng, Id luồng, Id gốc, tên luồng, dấu vết ngăn xếp và mức độ ưu tiên.

b) Thread Dump trông như thế nào?

Một kết xuất chủ đề mẫu có thể được tìm thấy ở đây.

c) Nơi chứa Thread Dump được sử dụng?

Luồng luồng chủ yếu được sử dụng để khắc phục sự cố sản xuất như CPU ​​tăng đột biến, ứng dụng không phản hồi, thời gian phản hồi kém, luồng bị treo, tiêu tốn nhiều bộ nhớ.

d) Làm thế nào để tạo ra một kết xuất chủ đề?

Các kết xuất chủ đề có thể được ghi lại từ ứng dụng đang chạy bằng 8 tùy chọn khác nhau. Tùy chọn phổ biến nhất để thực hiện kết xuất luồng là sử dụng công cụ ‘jstack’. công cụ jstack được chuyển trong thư mục JDK_HOMEbin. Đây là lệnh mà bạn cần đưa ra để nắm bắt kết xuất chuỗi:

pid: là Process Id của ứng dụng, có kết xuất luồng sẽ được ghi lại

file-path: là đường dẫn tệp nơi kết xuất luồng sẽ được ghi vào.

e) Làm thế nào để hiểu một kết xuất chủ đề?

Dưới đây là một cuộc trò chuyện video cung cấp một cái nhìn tổng quan chi tiết tốt về cách hiểu bãi chứa chủ đề.

f) Những công cụ nào được sử dụng để phân tích một kết xuất chủ đề?

Dưới đây là các công cụ phân tích kết xuất luồng được sử dụng rộng rãi nhất: fastThread, Samurai, IBM Thread & Monitor analyzer, Visual VM

3. Heap Dump

a) Heap Dump là gì?

Kết xuất đống là ảnh chụp nhanh bộ nhớ ứng dụng của bạn tại một thời điểm. Nó chứa các thông tin như các đối tượng trong bộ nhớ là gì, chúng mang những giá trị gì, kích thước của chúng là bao nhiêu, chúng tham chiếu đến những đối tượng nào khác.

b) Một đống đổ đống trông như thế nào?

Bạn có thể tìm thấy một kết xuất đống mẫu tại đây. (Lưu ý: Nó sẽ ở định dạng nhị phân. Vì vậy, bạn thực sự không thể đọc nó).

c) Một Heap Dump được sử dụng ở đâu?

Kết xuất Heap chủ yếu được sử dụng để khắc phục sự cố liên quan đến bộ nhớ, OutOfMemoryError.

d) Cách tạo Heap Dump?

Kết xuất đống có thể được lấy từ ứng dụng đang chạy bằng cách sử dụng 7 tùy chọn khác nhau. Tùy chọn phổ biến nhất để thực hiện kết xuất đống là sử dụng công cụ ‘jmap’. công cụ jmap được chuyển trong thư mục JDK_HOMEbin. Đây là lệnh mà bạn cần đưa ra để nắm bắt:

pid: là Id quy trình Java, có kết xuất heap sẽ được ghi lại

file-path: là đường dẫn tệp nơi kết xuất đống sẽ được ghi vào.

e) Làm thế nào để hiểu về một Heap Dump?

Các tệp kết xuất đống có định dạng nhị phân và có xu hướng có kích thước lớn. Bên cạnh đó, định dạng của họ rất thiếu tài liệu. Vì vậy, bạn phải sử dụng các công cụ phân tích kết xuất đống (được đưa ra trong câu hỏi tiếp theo) để phân tích và hiểu chúng.

f) Những công cụ nào được sử dụng để phân tích một đống đống?

Dưới đây là các công cụ phân tích kết xuất đống được sử dụng rộng rãi nhất: Eclipse MAT, HeapHero, JVisualVM.
Chúng tôi hy vọng rằng bài viết này bao gồm tất cả các phương pháp về Cách phân tích nhật ký thu gom rác, kết xuất luồng và kết xuất đống. Nếu bạn thấy bài viết này thực sự hữu ích với bạn, hãy chia sẻ thông tin này đến bạn bè, người thân, gia đình và những người khác của bạn. Hẹn gặp lại các bạn trong những bài viết tiếp theo với signalfix.net!