Go Binary'de Debugging Sembollerini Kaldırma: Boyut vs Hata Ayıklama
Go ile derlediğin bir uygulamayı sunucuya yükledikten sonra dosya boyutu seni şaşırtabilir. Bir basit web sunucusu kolaylıkla 15-20 megabayt olabilir. Bunun sebebi, Go derleyicisinin varsayılan olarak debugging sembollerini (symbol table) binary'ye dahil etmesidir. Bu semboller, hata ayıklayıcının fonksiyon adlarını, değişken konumlarını ve kaynak kod satır numaralarını bulmasını sağlar. Fakat üretim ortamında çoğu zaman bu bilgiye ihtiyacın olmaz.
Boyut Farkı Ne Kadar?
Debugging sembollerini kaldırmak binary boyutunu 40-60 oranında küçültebilir. Örneğin 20 megabaytlık bir binary, 8-10 megabaytta inebilir. Ağ bant genişliği sınırlı ortamlarda (Docker imaj indirme, edge cihazlar) bu fark önemli hale gelir.
Sembol Kaldırma Yöntemi
Go'da bunu iki yolla yapabilirsin. Birinci yol, derleme sırasında flag kullanmak:
1go build -ldflags="-s -w" -o myapp main.goBurada -s sembol tablosunu, -w DWARF debug bilgisini kaldırır. İkinci yol, derledikten sonra strip komutunu kullanmak:
1go build -o myapp main.go2strip myappPratik Karşılaştırma
Bu örneği dene. Basit bir Go programı yaz:
1package main2import "fmt"3func main() {4fmt.Println("Merhaba")5}Önce normal derle:
1go build -o app1 main.go2ls -lh app1Çıktı: -rw-r--r-- 1 user user 1.8M app1
Şimdi sembolsiz derle:
1go build -ldflags="-s -w" -o app2 main.go2ls -lh app2Çıktı: -rw-r--r-- 1 user user 380K app2
Boyut yaklaşık 80 oranında düştü.
Hata Ayıklama Kaybı
Debugging sembollerini kaldırdıktan sonra dlv (Go debugger) veya gdb ile adım adım hata ayıklama yapamassın. Panic stack trace'leri de daha az bilgi içerir; fonksiyon adları yerine adresleri görsün. Üretim ortamında crash dump'ları analiz etmen zorlaşır.
Hangi Durumda Kaldırmalısın?
Eğer uygulama kararlı ve testing'i bitirdiyse, semboleri kaldırmak güvenli. Fakat geliştirme ve staging ortamlarında semboleri tutmak akıllıca. Çoğu ekip, üretim binary'sinde sembol kaldırır ama ayrı bir sembol dosyası (debug info) saklayarak, gerektiğinde crash'i analiz edebilir.
bknz: Go'da Regex Performansı: Compile Caching ile Hızını 10x Artırma
0 yorum