This document summarizes a microservices meetup hosted by @mosa_siru. Key points include:
1. @mosa_siru is an engineer at DeNA and CTO of Gunosy.
2. The meetup covered Gunosy's architecture with over 45 GitHub repositories, 30 stacks, 10 Go APIs, and 10 Python batch processes using AWS services like Kinesis, Lambda, SQS and API Gateway.
3. Challenges discussed were managing 30 microservices, ensuring API latency below 50ms across availability zones, and handling 10 requests per second with nginx load balancing across 20 servers.
This document summarizes a microservices meetup hosted by @mosa_siru. Key points include:
1. @mosa_siru is an engineer at DeNA and CTO of Gunosy.
2. The meetup covered Gunosy's architecture with over 45 GitHub repositories, 30 stacks, 10 Go APIs, and 10 Python batch processes using AWS services like Kinesis, Lambda, SQS and API Gateway.
3. Challenges discussed were managing 30 microservices, ensuring API latency below 50ms across availability zones, and handling 10 requests per second with nginx load balancing across 20 servers.
14. Go tool pprof
(pprof) web
? svg形式で吐き出されたプロファイルをwebブラウザで表?
? function名の指定で絞り込み
? graphvizのインストールが必要
$ go tool pprof mpeg-probe sample.prof/cpu.pprof
Entering interactive mode (type "help" for commands)
(pprof) web main
15. Go tool pprof
(pprof) top
? 取得したプロファイルの上位N件の表?
? `-FIELD` 指定によりソート
(pprof) top 5 -flat
100.14s of 112.28s total (89.19%)
Dropped 148 nodes (cum <= 0.56s)
Showing top 5 nodes out of 92 (cum >= 3.02s)
flat flat% sum% cum cum%
78.03s 69.50% 69.50% 78.18s 69.63% syscall.Syscall
8.47s 7.54% 77.04% 8.47s 7.54% runtime.mach_semaphore_wait
7.19s 6.40% 83.44% 7.19s 6.40% runtime.mach_semaphore_signal
3.43s 3.05% 86.50% 3.43s 3.05% runtime.mach_semaphore_timedwait
3.02s 2.69% 89.19% 3.02s 2.69% runtime.memclrNoHeapPointers
flat : 関数の使?した値
flat% : flat値の全体の占める割合
sum% : 現在のソート順でのflat値の累計値
cum : 関数の他の関数の呼び出しも含めた値
cum% : cum値の全体に占める割合
16. Go tool pprof
(pprof) list
? go tool実?時にバイナリファイルの指定が必要
? ソースコード上でのflat,cum値を表?
(pprof) list io.Copy
Total: 1.87mins
ROUTINE ======================== io.Copy in /usr/local/Cellar/go/1.8.1/libexec/src/io/io.go
0 1.09mins (flat, cum) 58.15% of Total
. . 355:// If src implements the WriterTo interface,
. . 356:// the copy is implemented by calling src.WriteTo(dst).
. . 357:// Otherwise, if dst implements the ReaderFrom interface,
. . 358:// the copy is implemented by calling dst.ReadFrom(src).
. . 359:func Copy(dst Writer, src Reader) (written int64, err error) {
. 1.09mins 360: return copyBuffer(dst, src, nil)
. . 361:}
. . 362:
. . 363:// CopyBuffer is identical to Copy except that it stages through the
. . 364:// provided buffer (if one is required) rather than allocating a