Ich habe daran gearbeitet, Code zu optimieren, die soziale Grafikdaten analysiert (mit viel Hilfe von https://blog.golang.org/profiling-go-programs) und ich habe erfolgreich viele überarbeitet langsamer Code.Wie zu optimieren golang Programm, das meiste Zeit in runtime.osyield und runtime.usleep
Alle Daten werden in den Speicher geladen von db erste und die Datenanalyse von dort erscheint CPU gebunden (max Speicherverbrauch < 10MB, CPU1 @ 100%)
Aber jetzt scheint die meiste Zeit meines Programms in zu sein runtime.osyield und runtime.usleep. Wie kann man das verhindern?
Ich habe GOMAXPROCS = 1 gesetzt und der Code spawnt keine goroutines (außer was die Golang-Bibliotheken anrufen).
Das ist mein top10 Ausgabe von pprof
(pprof) top10
62550ms of 72360ms total (86.44%)
Dropped 208 nodes (cum <= 361.80ms)
Showing top 10 nodes out of 77 (cum >= 1040ms)
flat flat% sum% cum cum%
20760ms 28.69% 28.69% 20850ms 28.81% runtime.osyield
14070ms 19.44% 48.13% 14080ms 19.46% runtime.usleep
11740ms 16.22% 64.36% 23100ms 31.92% _/C_/code/sc_proto/cloudgraph.(*Graph).LeafProb
6170ms 8.53% 72.89% 6170ms 8.53% runtime.memmove
4740ms 6.55% 79.44% 10660ms 14.73% runtime.typedslicecopy
2040ms 2.82% 82.26% 2040ms 2.82% _/C_/code/sc_proto.mAvg
890ms 1.23% 83.49% 1590ms 2.20% runtime.scanobject
770ms 1.06% 84.55% 1420ms 1.96% runtime.mallocgc
760ms 1.05% 85.60% 760ms 1.05% runtime.heapBitsForObject
610ms 0.84% 86.44% 1040ms 1.44% _/C_/code/sc_proto/cloudgraph.(*Node).DeepestChildren
(pprof)
Die _/C_/code/sc_proto/* Funktionen meinen Code sind.
(besser, SVG Version von Graph hier: https://goo.gl/Tyc6X4)
Ihre Grafiken sind nicht lesbar. Sie sagen uns nicht, was Ihr Programm macht. [So erstellen Sie ein minimales, vollständiges und überprüfbares Beispiel.] (Http://stackoverflow.com/help/mcve). – peterSO
Verwenden Sie cgo? – JimB
@ JimB nicht mit cgo; alles rein Go – Aaron