/ / Lập hồ sơ các chương trình Go với các gói Pprof và Trace

Lập hồ sơ các chương trình Go với các gói Pprof và Trace

Hồ sơ là một kỹ thuật thường được sử dụng trong chu trình phát triển phần mềm để phân tích hiệu suất của một chương trình, thường là để so sánh giữa các chương trình hoặc để xác định các nút thắt cổ chai và các lĩnh vực cần cải thiện cho một chương trình. Lập hồ sơ liên quan đến việc đo lường và phân tích các số liệu khác nhau như mức sử dụng bộ nhớ, mức sử dụng CPU, thời gian thực thi và các số liệu thống kê cấp hệ thống khác.


Lập hồ sơ nhằm mục đích xác định các phần của chương trình tiêu tốn nhiều tài nguyên nhất để có thể tối ưu hóa chương trình nhằm mang lại hiệu suất tốt hơn. Hồ sơ cũng có thể giúp gỡ lỗi, tối ưu hóa quản lý bộ nhớ và điều chỉnh đồng thời.


Lập hồ sơ trong Go

Có nhiều công cụ để lập hồ sơ trong Go. Một số công cụ phổ biến bao gồm công cụ lập hồ sơ pprof tích hợp sẵn của Go và các gói phổ biến của bên thứ ba như gói Go Tool Trace và Go-Torch.

Các pprof gói là một phần của thời gian chạy bưu kiện. Các pprof gói cung cấp chức năng ghi dữ liệu cấu hình thời gian chạy ở các định dạng mà pprof công cụ trực quan có thể giải thích.

Đây là cách bạn có thể nhập pprof gói vào các chương trình Go của bạn:

 import "pprof"

Go cung cấp một số lệnh và cờ để làm việc với mã nguồn. Chạy như sau dụng cụ lệnh để truy cập kết quả định hình ở các định dạng khác nhau.

 go tool pprof

Lệnh xuất chi tiết sử dụng về pprof yêu cầu.

hướng dẫn sử dụng cho công cụ `pprof`

Cấu hình CPU trong Go

Cấu hình CPU đo thời gian chương trình sử dụng trong khi thực hiện các chức năng. Cấu hình CPU rất hữu ích để xác định các phần mã tiêu tốn nhiều thời gian nhất của CPU.

Các pprof gói cung cấp các chức năng để thu thập cấu hình CPU, khởi động và dừng cấu hình CPU và chức năng ghi dữ liệu cấu hình vào tệp.

Dưới đây là cách bắt đầu và dừng cấu hình CPU và ghi dữ liệu vào tệp cấu hình:

 import (
    "os"
    "runtime/pprof"
)

func main() {
    f, err := os.Create("cpu_profile.prof")
    if err != nil {
        panic(err)
    }
    defer f.Close()

    err = pprof.StartCPUProfile(f)
    if err != nil {
        panic(err)
    }
    defer pprof.StopCPUProfile()

    
}

Các chủ yếu chức năng tạo một tệp và đóng luồng tệp bằng một hoãn lại tuyên bố và Đóng chức năng của thể hiện tập tin. Các Khởi độngCPUHồ sơ bắt đầu một cấu hình CPU và ghi dữ liệu vào tệp, và StopCPUHồ sơ đóng luồng hồ sơ bằng một hoãn lại tuyên bố. Sau khi khởi động và dừng cấu hình CPU, bạn có thể tiếp tục viết mã bạn muốn phân tích.

Đây là kết quả của việc chạy pprof lệnh với tệp hồ sơ từ chương trình:

kết quả từ việc chạy tệp hồ sơ CPU

Chạy pprof lệnh với một tệp bắt đầu trình bao tương tác cho phép bạn khám phá dữ liệu định hình. Bạn có thể sử dụng các lệnh như đứng đầudanh sách để xem các chức năng mất nhiều thời gian nhất để thực hiện.

Lập hồ sơ bộ nhớ trong Go

Cấu hình bộ nhớ là một kỹ thuật được sử dụng để xác định rò rỉ bộ nhớ và mức sử dụng bộ nhớ đắt tiền trong mã bằng cách đo mức sử dụng bộ nhớ của các chức năng trong mã.

Bạn có thể bắt đầu một hồ sơ bộ nhớ với ViếtĐốngHồ Sơ chức năng. Các ViếtĐốngHồ Sơ chức năng nhận phiên bản tệp và ghi dữ liệu hồ sơ vào tệp.

 import (
    "os"
    "runtime/pprof"
)

func main() {
    f, err := os.Create("mem_profile.prof")
    if err != nil {
        panic(err)
    }
    defer f.Close()

    err = pprof.WriteHeapProfile(f)
    if err != nil {
        panic(err)
    }

    
}

Các chủ yếu chức năng tạo một tệp hồ sơ và ViếtĐốngHồ Sơ hàm lấy thể hiện tệp làm đối số và trả về loại lỗi ghi sau khi ghi vào tệp. Bạn có thể tiếp tục xử lý lỗi theo yêu cầu của bạn.

Tạo hồ sơ khối với Go

Cấu hình khối đo thời gian chờ đợi của chương trình đối với các nguyên mẫu đồng bộ hóa, chẳng hạn như các bộ chuyển đổi và các kênh. Hồ sơ chặn rất hữu ích để xác định các phần của mã có thể gây ra chặn.

Các Tra cứu hàm trả về hồ sơ với tên của một chuỗi đã chỉ định và Viết thư cho chức năng của Tra cứu chức năng ghi ảnh chụp nhanh có định dạng pprof của hồ sơ vào tệp.

Đây là cách bạn có thể triển khai lập hồ sơ khối cho các chương trình Go của mình:

 import (
    "os"
    "runtime/pprof"
)

func main() {
    f, err := os.Create("block_profile.prof")
    if err != nil {
        panic(err)
    }
    defer f.Close()

    err = pprof.Lookup("block").WriteTo(f, 0)
    if err != nil {
        panic(err)
    }

    
}

Chương trình tạo một tệp để lưu trữ dữ liệu cấu hình khối, tìm kiếm các khối bằng Tra cứu và ghi dữ liệu cấu hình khối vào tệp.

Theo dõi hồ sơ với Go

Hồ sơ theo dõi là một kỹ thuật để đo lường việc thực thi chương trình, bao gồm lập lịch goroutine và các cuộc gọi hệ thống. Hồ sơ theo dõi rất hữu ích để xác định các tắc nghẽn hiệu suất và hiểu được sự tương tác giữa các phần chương trình khác nhau.

Các dấu vết gói cung cấp các chức năng cho hồ sơ theo dõi. Gói này cũng là một phần của thời gian chạy bưu kiện.

 import (
    "os"
    "runtime/trace"
)

func main() {
    f, err := os.Create("trace.out")
    if err != nil {
        panic(err)
    }
    defer f.Close()

    err = trace.Start(f)
    if err != nil {
        panic(err)
    }
    defer trace.Stop()

    
}

Chương trình tạo một tệp theo dõi để lưu trữ dữ liệu theo dõi, khởi động trình theo dõi với Bắt đầu chức năng nhận phiên bản tệp và trả về một loại lỗi, đồng thời trì hoãn trình theo dõi bằng Dừng lại chức năng.

Go cũng cung cấp các công cụ để định dạng mã nguồn. Bên cạnh các công cụ lập hồ sơ, bạn có thể sử dụng các công cụ định dạng để duy trì các tiêu chuẩn mã. Các gofmt tool là một công cụ định dạng tích hợp sẵn mà bạn có thể sử dụng để định dạng mã nguồn Go của mình dựa trên các quy tắc được chỉ định cho các gói của bạn.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *