ปีสองปีที่ผ่านมา Golang ฮิตมากสำหรับ Programmer ทั่วโลก เป็นที่ถกเถียงกันตลอดทุกๆครั้งที่มีโพสขึ้นใน Hacker News บางคนก็ชอบ บางคนก็ไม่ชอบ แต่ข้อดีของ Go นั้นมีมากมายจริงๆ มันช่างเหมาะกับงานบางอย่าง อะไรที่ต้องการความเร็ว ต้องการ Binary ต้องการ Portability ผมว่า Golang นี่เหมาะสุดๆ   โดยเฉพาะ tools บน Linux  ใครที่ชินกับภาษา c อยู่แล้ว สามารถเขียน Golang ได้สบายๆ

การทำ performance Troubleshooting  บน Go นั้น คงไม่ได้ทำกันบ่อยนัก เนื่องจากมันค่อนข้างเร็ว แต่เราอยากเล่น เลยลองดูครับ

การทำ debugging / troubleshooting ใน golang นั้น สามารถทำได้ง่ายๆด้วย pprof ซึ่ง เราต้อง include เข้าไปในโปรแกรมของเรา โดยมันจะทำการรัน web server ขึ้นมา แล้วเราค่อยต่อเข้า  web server นี้ไป debug นั่นเอง

มาต่อกันที่ flame graph นอกจากการทำ Stack trace/ thread dump แล้ว การทำ flame graph จะให้ข้อมูลได้ดีในอีกมิตินึง นั่นก็คือระยะเวลาที่ code ทำงาน เทียบกับเวลาทั้งหมดที่เราทำการวัด โดยจะดูได้จากแกน x ยิ่ง x ยาว ก็ยิ่งใช้เวลานานกว่าเพื่อน Flame Graph นี่สามารถสร้างได้จากหลายๆ source ไม่ว่าจะเป็น Perf (linux)Dtrace(Solaris/BSD) หรือ JVM เองก็มี option

การทำ Flame graph ด้วย pprof นั้นต้องอาศัย go-torch โดยเราสามารถกำหนด ระยะเวลาในการ sampling ได้

go-torch -u http://localhost:6060/ --seconds 10

หลังจากนั้นจะได้ ก็ได้ไฟล์ svg มาแบบนี้

torch.svg

โดยโปรแกรมที่ทดลอง คือโปรแกรมที่ไป GET website มานั่นเอง จะเห็นว่าเวลาที่ใช้ในการ initiate https นั่นนานเสียกว่า เวลาที่ใช้อ่านข้อมูลมาเสียอีก (ขนาดตวามยาวของ flame ยาวมาก)