2015-07-14 23 views
5

Bir projede gocraft/web kullanıyorum ve bazı yüksek bellek kullanımını ayıklamaya çalışıyorum. gocraft/web, çağrı işleyicileri için yansıma kullanır. Çok iyi çalışan net/http/pprof profiler kurulumunu yaptım, ancak en büyük bellek bloğu ve içerisine yerleştirilmiş olanı yalnızca işlev olarak reflect.Value.call gösterir. Bu çok yararlı değil.GoLang - Yansıtılan kodun kullanımını bellekte kullanmanın bir yolu var mı?

gocraft/web'un yansıma kullanıp bellek profiline daha ayrıntılı bir şekilde girdiği gerçeğini nasıl anlayabilirim?

İşte görüyorum profil çıkışının bir örnek:

Example Profile

+0

Bunu go1.5 ile profillemeyi deneyebilir misiniz? Yeni çalışma zamanının bir yan etkisi, profiler için daha fazla dahili ortaya çıkarmasıdır. – JimB

+0

@JimB, eğer işe yaradıysa harika olurdu ama ne yazık ki değil. – cellofellow

cevap

3

Bu konuda http://golang.org/issue/11786 dosyalama için @ thwd teşekkürler. Bu, pprof’daki bir görüntü sorunudur. Tüm veriler var, sadece gizleniyor. İhtiyaç duyduğunuz verileri -runtime bayrağıyla pprof çağırarak alabilirsiniz. İhtiyacınız olmayan verileri de gösterir, ancak Go 1,6 çıkana kadar iyi bir çözüm olarak hizmet etmelidir.

0

Kısa cevap olduğunu doğrudan sevemeyeceğimizdir. reflect.Value.call, çalışma zamanında uygulanan bir montaj yordamı olan runtime.reflectcall'a yönlendiren reflect.call numaralarını çağırır; örneğin, amd64, here. Bu, profiler'ın görebileceği şeyleri siler.

Yapacağınız en iyi şey, işleyicilerinizi yansıma olmadan çağırmak ve bunları tek tek test etmektir. Aynı zamanda, profilleyicinin yansıtıcı çağrıları takip etmesini sağlamak, bir sonraki Go iterasyon için teklifte kabul edilebilir bir değişiklik olabilir. Bunun için change proposal process'u izlemelisiniz.

Düzenleme: issue oluşturuldu.

+0

@cellofellow: Değişikliği önermeyi düşünmüyorsanız lütfen bunu yapabilmem için söyleyin. – thwd

+0

devam edin ve teklifi yapın :) – cellofellow

İlgili konular