خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

پروفایل کردن برنامه های Go با بسته های Pprof و Trace

با استفاده از تکنیک پروفایل، عملکرد برنامه های Go خود را بهبود بخشید.

نمایه سازی تکنیکی است که معمولاً در چرخه توسعه نرم افزار برای تجزیه و تحلیل عملکرد یک برنامه استفاده می شود، معمولاً برای مقایسه بین برنامه ها یا شناسایی تنگناها و زمینه های بهبود برنامه. نمایه سازی شامل اندازه گیری و تجزیه و تحلیل معیارهای مختلف مانند استفاده از حافظه، استفاده از CPU، زمان اجرا و سایر آمارهای سطح سیستم است.

هدف پروفایل شناسایی بخش هایی از برنامه است که بیشترین منابع را مصرف می کند تا بتوان آن را برای عملکرد بهتر بهینه کرد. نمایه سازی همچنین می تواند به اشکال زدایی، بهینه سازی مدیریت حافظه و تنظیم همزمان کمک کند.

پروفایل در Go

ابزارهای زیادی برای پروفایل در Go وجود دارد. برخی از ابزارهای محبوب عبارتند از ابزار داخلی پروفایل pprof Go و بسته های شخص ثالث محبوب مانند بسته های Go Tool Trace و Go-Torch.

بسته pprof بخشی از بسته اجراست. بسته pprof عملکردی را برای نوشتن داده های پروفایل زمان اجرا در قالب هایی که ابزار تجسم pprof می تواند تفسیر کند، فراهم می کند.

در اینجا نحوه وارد کردن بسته pprof به برنامه های Go آمده است:

import "pprof"

Go چندین دستور و پرچم برای کار با کد منبع ارائه می دهد. دستور ابزار زیر را برای دسترسی به نتایج پروفایل در فرمت های مختلف اجرا کنید.

go tool pprof

این دستور جزئیات استفاده از دستور pprof را خروجی می دهد.

دستورالعمل‌های استفاده از ابزار «pprof».

پروفایل CPU در Go

پروفایل CPU زمانی را که یک برنامه در حین اجرای توابع صرف می کند اندازه گیری می کند. پروفایل CPU برای شناسایی بخش هایی از کد که بیشترین زمان CPU را مصرف می کنند مفید است.

مطلب مرتبط:   چگونه کاتلین را بدون تجربه کدنویسی یاد بگیریم

بسته pprof توابعی را برای جمع‌آوری پروفایل‌های CPU، شروع و توقف پروفایل CPU، و عملکردی برای نوشتن داده‌های پروفایل روی فایل‌ها ارائه می‌کند.

در اینجا نحوه شروع و توقف نمایه CPU و نوشتن داده ها در یک فایل پروفایل آمده است:

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()

    // code to be profiled
}

تابع main یک فایل ایجاد می کند و جریان فایل را با دستور defer و تابع Close نمونه فایل می بندد. تابع StartCPUProfile یک نمایه CPU را راه اندازی می کند و داده ها را در فایل می نویسد و StopCPUProfile جریان پروفایل را با یک دستور defer می بندد. پس از شروع و توقف نمایه CPU، می توانید به نوشتن کدی که می خواهید آنالیز کنید، ادامه دهید.

در اینجا نتیجه اجرای دستور pprof با فایل پروفایل از برنامه است:

نتیجه اجرای فایل پروفایل CPU

اجرای دستور pprof با یک فایل یک پوسته تعاملی را شروع می کند که به شما امکان می دهد داده های پروفایل را کاوش کنید. شما می توانید از دستوراتی مانند top و list برای مشاهده عملکردهایی که بیشترین زمان را برای اجرا صرف می کنند استفاده کنید.

پروفایل حافظه در Go

پروفایل حافظه تکنیکی است که برای شناسایی نشت حافظه و استفاده پرهزینه از حافظه در کد با اندازه گیری میزان استفاده از حافظه توابع در کد استفاده می شود.

می توانید یک نمایه حافظه را با تابع WriteHeapProfile شروع کنید. تابع WriteHeapProfile نمونه فایل را می گیرد و داده های پروفایل را در فایل می نویسد.

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)
    }

    // code to be profiled
}

تابع اصلی یک فایل پروفایل ایجاد می کند و تابع WriteHeapProfile نمونه فایل را به عنوان آرگومان می گیرد و پس از نوشتن در فایل، نوع خطای نوشتن را برمی گرداند. شما می توانید با توجه به نیاز خود، خطا را بیشتر مدیریت کنید.

مطلب مرتبط:   نحوه ایجاد انیمیشن در Pygame

مسدود کردن پروفایل با Go

نمایه‌سازی بلوک، زمان انتظار یک برنامه برای همگام‌سازی اولیه، مانند mutexes و کانال‌ها را اندازه‌گیری می‌کند. پروفایل بلاک برای شناسایی قسمت هایی از کد که ممکن است باعث مسدود شدن شود مفید است.

تابع Lookup نمایه را با نام یک رشته مشخص برمی گرداند و تابع WriteTo تابع Lookup یک عکس فوری با فرمت pprof از نمایه در فایل می نویسد.

در اینجا نحوه پیاده سازی نمایه بلوک برای برنامه های Go آمده است:

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)
    }

    // code to be profiled
}

این برنامه یک فایل برای ذخیره داده های پروفایل بلوک ایجاد می کند، با تابع Lookup به دنبال بلوک می گردد و داده های نمایه بلوک را در فایل می نویسد.

ردیابی پروفایل با رفتن

ردیابی پروفایل تکنیکی برای اندازه‌گیری اجرای یک برنامه، از جمله زمان‌بندی و فراخوانی سیستم است. پروفایل ردیابی برای شناسایی تنگناهای عملکرد و درک تعاملات بین بخش های مختلف برنامه مفید است.

بسته ردیابی توابعی را برای پروفایل ردیابی فراهم می کند. این بسته نیز بخشی از بسته اجرا می باشد.

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()

    // code to be profiled
}

برنامه یک فایل ردیابی برای ذخیره داده های ردیابی ایجاد می کند، ردیاب را با تابع Start شروع می کند که نمونه فایل را می گیرد و یک نوع خطا را برمی گرداند، و ردیاب را با تابع Stop به تعویق می اندازد.

مطلب مرتبط:   درک مدیریت دولتی در برنامه های کاربردی Svelte

Go ابزارهایی برای قالب بندی کد منبع ارائه می دهد

Go همچنین ابزارهایی برای قالب بندی کد منبع ارائه می دهد. در کنار ابزارهای پروفایل، می توانید از ابزارهای قالب بندی برای حفظ استانداردهای کد استفاده کنید. ابزار gofmt یک ابزار قالب‌بندی داخلی است که می‌توانید از آن برای قالب‌بندی کد منبع Go خود بر اساس قوانین مشخص شده برای بسته‌های خود استفاده کنید.