שפר את הביצועים של תוכניות ה-Go שלך באמצעות טכניקת הפרופיל.
פרופיל הוא טכניקה הנפוצה בשימוש במחזור פיתוח התוכנה לניתוח הביצועים של א תוכנית, בדרך כלל להשוואה בין תוכניות או כדי לזהות צווארי בקבוק ואזורי שיפור עבור א תכנית. פרופיל כרוך במדידה וניתוח של מדדים שונים כגון שימוש בזיכרון, ניצול מעבד, זמן ביצוע וסטטיסטיקות אחרות ברמת המערכת.
מטרת הפרופיל היא לזהות חלקים בתוכנית שצורכים את מירב המשאבים, כך שניתן יהיה לייעל אותה לביצועים טובים יותר. יצירת פרופילים יכולה גם לסייע באיתור באגים, אופטימיזציה של ניהול הזיכרון וכוונון במקביל.
יצירת פרופיל ב-Go
ישנם כלים רבים ליצירת פרופיל ב-Go. כמה מהכלים הפופולריים כוללים את כלי הפרופיל המובנה של Go וחבילות צד שלישי פופולריות כמו חבילות Go Tool Trace ו-Go-Torch.
ה pprof החבילה היא חלק מה זמן ריצה חֲבִילָה. ה pprof החבילה מספקת פונקציונליות לכתיבת נתוני פרופיל בזמן ריצה בפורמטים ש- pprof כלי הדמיה יכול לפרש.
כך תוכל לייבא את pprof חבילה לתוך תוכניות ה-Go שלך:
יְבוּא"pprof"
Go מספק מספר פקודות ודגלים לעבוד עם קוד המקור. הפעל את הפעולות הבאות כְּלִי פקודה כדי לגשת לתוצאות פרופיל בפורמטים שונים.
ללכת כלי pprof
הפקודה מפלטת את פרטי השימוש על pprof פקודה.
פרופיל מעבד ב-Go
פרופיל CPU מודד את הזמן שתוכנית מבלה בזמן ביצוע פונקציות. פרופיל מעבד שימושי לזיהוי חלקי קוד שצורכים את זמן המעבד הרב ביותר.
ה pprof החבילה מספקת פונקציות לאיסוף פרופילי CPU, הפעלה ועצירה של פרופיל CPU ופונקציה לכתיבת נתוני פרופיל לקבצים.
הנה איך להתחיל ולעצור פרופיל CPU ולכתוב את הנתונים לקובץ פרופיל:
יְבוּא (
"os"
"זמן ריצה/pprof"
)funcרָאשִׁי() {
f, err := os. לִיצוֹר("cpu_profile.prof")
אם טעות != אֶפֶס {
בהלה(לִטְעוֹת)
}
לִדחוֹת ו. סגור()טעות = pprof. StartCPUProfile (ו)
אם טעות != אֶפֶס {
בהלה(לִטְעוֹת)
}
לִדחוֹת pprof. StopCPUProfile()
// קוד לפרופיל
}
ה רָאשִׁי הפונקציה יוצרת קובץ וסוגרת את זרם הקבצים באמצעות a לִדחוֹת הצהרה ואת סגור הפונקציה של מופע הקובץ. ה StartCPUProfile הפונקציה מתחילה פרופיל CPU וכותבת את הנתונים לקובץ, ואת StopCPUProfile סוגר את זרם הפרופיל עם א לִדחוֹת הַצהָרָה. לאחר הפעלה ועצירה של פרופיל המעבד, תוכל להמשיך לכתוב את הקוד שברצונך לנתח.
הנה התוצאה של הפעלת ה pprof פקודה עם קובץ הפרופיל מהתוכנית:
מפעיל את pprof פקודה עם קובץ מתחילה מעטפת אינטראקטיבית המאפשרת לך לחקור את נתוני הפרופיל. אתה יכול להשתמש בפקודות כמו חלק עליון ו רשימה כדי להציג את הפונקציות שלוקח הכי הרבה זמן לביצוע.
פרופיל זיכרון ב-Go
פרופיל זיכרון הוא טכניקה המשמשת לזיהוי דליפות זיכרון ושימוש יקר בזיכרון בקוד על ידי מדידת השימוש בזיכרון של פונקציות בקוד.
אתה יכול להתחיל פרופיל זיכרון עם WriteHeapProfile פוּנקצִיָה. ה WriteHeapProfile הפונקציה לוקחת מופע של קובץ וכותבת את נתוני הפרופיל לקובץ.
יְבוּא (
"os"
"זמן ריצה/pprof"
)funcרָאשִׁי() {
f, err := os. לִיצוֹר("mem_profile.prof")
אם טעות != אֶפֶס {
בהלה(לִטְעוֹת)
}
לִדחוֹת ו. סגור()טעות = pprof. WriteHeapProfile (ו)
אם טעות != אֶפֶס {
בהלה(לִטְעוֹת)
}
// קוד לפרופיל
}
ה רָאשִׁי הפונקציה יוצרת קובץ פרופיל, וה- WriteHeapProfile הפונקציה לוקחת את מופע הקובץ כארגומנט ומחזירה סוג שגיאת כתיבה לאחר כתיבה לקובץ. אתה יכול להמשיך לטפל בשגיאה על פי הדרישה שלך.
חסום פרופיל באמצעות Go
פרופיל בלוק מודד את זמן ההמתנה של תוכנית לפרימיטיבים של סנכרון, כגון מוטקסים וערוצים. פרופיל חסימה שימושי לזיהוי חלקים בקוד שעלולים לגרום לחסימה.
ה הבט מעלה הפונקציה מחזירה את הפרופיל עם השם של מחרוזת שצוינה, וה- לכתוב ל פונקציה של הבט מעלה function כותבת תמונת מצב בפורמט pprof של הפרופיל לקובץ.
כך תוכל ליישם פרופיל חסימה עבור תוכניות ה-Go שלך:
יְבוּא (
"os"
"זמן ריצה/pprof"
)funcרָאשִׁי() {
f, err := os. לִיצוֹר("block_profile.prof")
אם טעות != אֶפֶס {
בהלה(לִטְעוֹת)
}
לִדחוֹת ו. סגור()טעות = pprof. הבט מעלה("לַחסוֹם").כתוב אל (ו, 0)
אם טעות != אֶפֶס {
בהלה(לִטְעוֹת)
}
// קוד לפרופיל
}
התוכנית יוצרת קובץ לאחסון נתוני פרופיל הבלוק, מחפשת בלוקים עם הבט מעלה פונקציה, וכותבת את נתוני פרופיל החסימה לקובץ.
עקוב אחר פרופיל באמצעות Go
פרופיל עקבות הוא טכניקה למדידת ביצוע של תוכנית, כולל תזמון גורוטינים ושיחות מערכת. פרופיל מעקב שימושי לזיהוי צווארי בקבוק בביצועים והבנת האינטראקציות בין חלקי תוכנית שונים.
ה זֵכֶר החבילה מספקת פונקציות ליצירת פרופיל עקבות. חבילה זו היא גם חלק מה- זמן ריצה חֲבִילָה.
יְבוּא (
"os"
"זמן ריצה/מעקב"
)funcרָאשִׁי() {
f, err := os. לִיצוֹר("לאתר")
אם טעות != אֶפֶס {
בהלה(לִטְעוֹת)
}
לִדחוֹת ו. סגור()טעות = עקבות. התחל (ו)
אם טעות != אֶפֶס {
בהלה(לִטְעוֹת)
}
לִדחוֹת זֵכֶר. תפסיק()
// קוד לפרופיל
}
התוכנית יוצרת קובץ מעקב לאחסון נתוני המעקב, מתחילה את המעקב עם ה- הַתחָלָה פונקציה שלוקחת את מופע הקובץ ומחזירה סוג שגיאה, ודוחה את המעקב עם ה- תפסיק פוּנקצִיָה.
Go מספקת גם כלים לעיצוב קוד מקור. לצד כלי הפרופיל, אתה יכול להשתמש בכלי העיצוב כדי לשמור על תקני קוד. ה גופמט tool הוא כלי עיצוב מובנה שבו אתה יכול להשתמש כדי לעצב את קוד המקור של Go בהתבסס על כללים שצוינו עבור החבילות שלך.