More Related Content
Similar to Go conference 2015_winter
Similar to Go conference 2015_winter (7)
Go conference 2015_winter
- 2. CONFIDENTIAL Copyright © 2009-2015 eureka, inc. All rights reserved.
• Kenji Matsuo (@_yokoninaritai)
• eureka, Inc.
• インフラチームのマネージャー兼、
情シス的な仕事してます。
• 猫好きです。
自己紹介
- 5. CONFIDENTIAL Copyright © 2009-2015 eureka, inc. All rights reserved.
目次
• 突然アプリケーションが刺さる
• databaseの接続が残り続ける
• goルーチンが増え続ける
- 10. CONFIDENTIAL Copyright © 2009-2015 eureka, inc. All rights reserved.
TCP localhost:9000->localhost:26732 (CLOSE-WAIT)
TCP localhost:9000->localhost:27743 (CLOSE-WAIT)
TCP localhost:9000->localhost:27172 (CLOSE-WAIT)
TCP localhost:9000->localhost:26834 (CLOSE-WAIT)
TCP localhost:9000->localhost:27014 (CLOSE-WAIT)
TCP localhost:9000->localhost:27745 (CLOSE-WAIT)
TCP localhost:9000->localhost:27747 (CLOSE-WAIT)
TCP localhost:9000->localhost:27749 (CLOSE-WAIT)
TCP localhost:9000->localhost:27752 (CLOSE-WAIT)
TCP localhost:9000->localhost:27756 (CLOSE-WAIT)
TCP localhost:9000->localhost:27758 (CLOSE-WAIT)
発生原因
- 11. CONFIDENTIAL Copyright © 2009-2015 eureka, inc. All rights reserved.
TCP localhost:9000->localhost:26732 (CLOSE-WAIT)
TCP localhost:9000->localhost:27743 (CLOSE-WAIT)
TCP localhost:9000->localhost:27172 (CLOSE-WAIT)
TCP localhost:9000->localhost:26834 (CLOSE-WAIT)
TCP localhost:9000->localhost:27014 (CLOSE-WAIT)
TCP localhost:9000->localhost:27745 (CLOSE-WAIT)
TCP localhost:9000->localhost:27747 (CLOSE-WAIT)
TCP localhost:9000->localhost:27749 (CLOSE-WAIT)
TCP localhost:9000->localhost:27752 (CLOSE-WAIT)
TCP localhost:9000->localhost:27756 (CLOSE-WAIT)
TCP localhost:9000->localhost:27758 (CLOSE-WAIT)
増え続けるCLOSE_WAIT
• 大量のリクエストによってCLOSE_WAITが発生する事で、TCP
リソースが枯渇する。
• CPUリソース等は余っていても、TCPのmissing packetを待っ
ている間、TCPリソースが離せなくなるので、実質リソース不
足になってしまう。
• TCPリソースが枯渇すると resource unavailableが発生する
ので、それがstraceに出ていた。
- 12. CONFIDENTIAL Copyright © 2009-2015 eureka, inc. All rights reserved.
• sysctl で tcp まわりの設定変更
• nginx で upstream の keepalive 設定
tcp_keepalive_time
tcp_keepalive_intvl
tcp_keepalive_probes
tcp_tw_reuse
upstream backend {
server 127.0.0.1:9000;
keepalive 16;
}
location / {
proxy_http_version 1.1;
proxy_set_header Connection ";
proxy_pass http://backend;
}
対策
- 15. CONFIDENTIAL Copyright © 2009-2015 eureka, inc. All rights reserved.
自前で実装したSQLのパッケージで、
コネクション をcloseしても、オブジェ
クトにNULLを渡してもコネクション
が残り続けた。
発生原因
- 16. CONFIDENTIAL Copyright © 2009-2015 eureka, inc. All rights reserved.
•pt-killを導入
•go-sql-driver/mysqlに戻した。
# /usr/bin/pt-kill --interval 1 --run-time 1 --match-user read_only --match-command
Sleep --idle-time 300 --print --rds --victims all --kill
sleep のみ 300 秒以上かかったクエリをkillする設定
対策
- 19. CONFIDENTIAL Copyright © 2009-2015 eureka, inc. All rights reserved.
gostats.cpu_num.gomaxprocs 4 1449332314
gostats.goroutine_num.goroutine_num 2537 1449332314
gostats.cgo_call_num.cgo_call_num 8133023 1449332314
gostats.memory.memory_alloc 55116600 1449332314
gostats.memory.memory_total_alloc668213200288 1449332314
gostats.memory.memory_sys 244588504 1449332314
gostats.memory.memory_lookups 7882769 1449332314
gostats.memory.memory_mallocs 12301923213 1449332314
gostats.memory.memory_frees 12301325814 1449332314
gostats.memory.memory_stack 6619136 1449332314
gostats.heap.heap_alloc 55116600 1449332314
gostats.heap.heap_sys 174587904 1449332314
gostats.heap.heap_idle 93872128 1449332314
gostats.heap.heap_inuse 80715776 1449332314
gostats.heap.heap_released 43384832 1449332314
gostats.heap.heap_objects 597399 1449332314
gostats.gc.gc_next 80257488 1449332314
gostats.gc.gc_last 1449332313639172936 1449332314
gostats.gc.gc_num 24906 1449332314
gostats.gc.gc_per_second 0.000000 1449332314
gostats.gc.gc_pause_per_second 0.000000 1449332314
mackerel-plugin-gostatsを作成
golang-stats-api-handlerでメトリクスを取得
- 21. CONFIDENTIAL Copyright © 2009-2015 eureka, inc. All rights reserved.
とりあずした事
• blue-green モデルだったので、手動で定期的
にローリングアップデート。
• この運用はマジ無理
• というか休みの日とか辛い
- 23. CONFIDENTIAL Copyright © 2009-2015 eureka, inc. All rights reserved.
まとめ
• いまの所安定して運用できてます。
• gcまわりで問題でもおきてなさそう。
• 障害は突然やってくるのではメトリクスを必ず見ておく必要が
ある。
• バージョンアップで解決しそうな問題もあるのでバージョンアッ
プはやりたい。