J'ai un serveur d'application Web écrite en utilisant Go (httprouter/gokil), quand je le tester à l'aide siege -b -t10s -c255
, il montre quelque chose comme ça (meilleur score):Comment établir le profil golang Web App serveur
POST API (read only query to database, cache query result to RAM)
Transaction rate: 4251.38 trans/sec (local without proxy)
Transaction rate: 2082.11 trans/sec (local with proxy)
Transaction rate: 1806.63 trans/sec (test server)
GET Realistic (static file request, multiple URL)
Transaction rate: 4417.75 trans/sec (local without proxy)
Transaction rate: 1419.58 trans/sec (local with proxy)
Transaction rate: 234.73 trans/sec (test server)
Transaction Rate: 40.50 trans/sec (other external site that use gokil)
GET One static file (getting /js/jquery.js)
Transaction rate: 4166.83 trans/sec (local without proxy)
Transaction rate: 2531.79 trans/sec (local with proxy)
Transaction rate: 31.39 trans/sec (test server)
Transaction rate: 20.95 trans/sec (other external site that use gokil)
For comparison, hello world
Transaction rate: 13838.83 trans/sec (plain Go https://play.golang.org/p/y8rJ4ZkclD)
Transaction rate: 5420.79 trans/sec (local without proxy https://gitlab.com/kokizzu/gokil/tree/master/_example)
Transaction rate: 2701.12 trans/sec (local with proxy)
Le les spécifications pour local
est i7-4772HQ, Samsung 850 SSD. Le proxy que j'utilise est caddy. La base de données que j'utilise est PostgreSQL et Redis pour stocker des sessions. test server
est sur le même réseau avec la connectivité gigabit. La question est, comment mesurer le calendrier de chaque demande: quelle fonction/ligne de code qui provoque le goulot d'étranglement? Parce que je regarde d'autres benchmark Go peut atteindre 70k
à 171k
RPS.
J'ai essayé ce blog, mais il montre:
$ cd $GOPATH/src/gitlab.com/kokizzu/gokil/_example
$ go build
$ go tool pprof —text ./test
parsing profile: unrecognized profile format