runtime آمار و گزارش رویدادهای داخلی را برای کاربران فراهم میکند تا بتوانند مشکلات کارایی و بهرهوری را در سطح runtime تشخیص دهند.
کاربران میتوانند این آمار را پایش (monitor) کنند تا درک بهتری از سلامت کلی و کارایی برنامههای Go داشته باشند. برخی از آمارها و وضعیتهایی که مرتب پایش میشوند:
-
runtime.ReadMemStatsمعیارهای مربوط به heap allocation و garbage collection را گزارش میدهد. آمار حافظه برای پایش اینکه یک process چه مقدار از منابع حافظه را مصرف میکند، آیا process میتواند از حافظه بهخوبی استفاده کند، و برای تشخیص memory leakها مفید است. -
debug.ReadGCStatsآمار مربوط به garbage collection را میخواند. این تابع برای دیدن اینکه چه مقدار از منابع صرف GC pauseها میشود مفید است. همچنین یک timeline از pauseهای garbage collector و percentileهای زمان pause را گزارش میدهد. -
debug.Stackstack trace فعلی را برمیگرداند. Stack trace برای دیدن اینکه هماکنون چند goroutine در حال اجرا هستند، چه کاری انجام میدهند، و آیا blocked هستند یا نه مفید است. -
debug.WriteHeapDumpاجرای همه goroutineها را متوقف میکند و به شما اجازه میدهد heap را در یک فایل dump کنید. یک heap dump یک snapshot از حافظه یک process Go در یک لحظه مشخص است. این فایل شامل تمام objectهای تخصیصیافته و همچنین goroutineها، finalizerها و موارد دیگر است. -
runtime.NumGoroutineتعداد goroutineهای فعلی را برمیگرداند. این مقدار را میتوان پایش کرد تا ببینید آیا goroutineهای کافی استفاده میشوند یا برای تشخیص goroutine leakها.
Execution tracer¶
زبان Go همراه با یک runtime execution tracer عرضه میشود که طیف گستردهای از رویدادهای runtime را ثبت میکند. Scheduling، syscall، garbage collection، اندازه heap و رویدادهای دیگر توسط runtime جمعآوری میشوند و برای مصورسازی توسط go tool trace در دسترس هستند. Execution tracer ابزاری برای تشخیص مشکلات latency و بهرهوری است. میتوانید بررسی کنید که CPU چقدر خوب استفاده میشود و چه زمانی networking یا syscallها باعث preemption برای goroutineها میشوند.
Tracer برای موارد زیر مفید است:
-
درک اینکه goroutineهای شما چگونه اجرا میشوند.
-
درک برخی از رویدادهای اصلی runtime مانند اجرای GC.
-
شناسایی اجرای ضعیف parallelizeشده.
با این حال، برای شناسایی hot spotها مانند تحلیل دلیل مصرف بیشازحد حافظه یا CPU عالی نیست. ابتدا از ابزارهای profiling برای رسیدگی به آنها استفاده کنید.
در تصویر بالا، مصورسازی go tool trace نشان میدهد که اجرا در ابتدا خوب شروع شده و سپس serialized شده است. این موضوع نشان میدهد که ممکن است lock contention برای یک منبع اشتراکی وجود داشته باشد که یک bottleneck ایجاد میکند.
برای جمعآوری و تحلیل runtime traceها به go tool trace مراجعه کنید.
GODEBUG
Runtime همچنین در صورتی که متغیر محیطی GODEBUG بهطور مناسب تنظیم شود، رویدادها و اطلاعاتی منتشر میکند.
-
GODEBUG=gctrace=1رویدادهای garbage collector را در هر collection چاپ میکند و مقدار حافظه جمعآوریشده و طول pause را خلاصه میکند. -
GODEBUG=inittrace=1خلاصهای از زمان اجرا و اطلاعات تخصیص حافظه را برای کارهای package initialization تکمیلشده چاپ میکند. -
GODEBUG=schedtrace=Xرویدادهای scheduling را هر X میلیثانیه چاپ میکند.
متغیر محیطی GODEBUG میتواند برای غیرفعال کردن استفاده از instruction set extensionها در standard library و runtime استفاده شود.
-
GODEBUG=cpu.all=offاستفاده از تمام instruction set extensionهای اختیاری را غیرفعال میکند. -
GODEBUG=cpu.extension=offاستفاده از instructionهای مربوط به instruction set extension مشخصشده را غیرفعال میکند.
💡 در اینجا extension نام lowercase برای instruction set extension است؛ مانند sse41 یا avx.
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: منبع مستندات