Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Go conference 2015_winter

6,718 views

Published on

eureka

Published in: Technology
  • Be the first to comment

Go conference 2015_winter

  1. 1. CONFIDENTIAL Copyright © 2009-2015 eureka, inc. All rights reserved. アラートはいつも突然に。 Go Conference 2015 Winter
  2. 2. CONFIDENTIAL Copyright © 2009-2015 eureka, inc. All rights reserved. • Kenji Matsuo (@_yokoninaritai) • eureka, Inc. • インフラチームのマネージャー兼、 情シス的な仕事してます。 • 猫好きです。 自己紹介
  3. 3. Facebookを利用した 恋愛・婚活マッチングサービス
  4. 4. iOSAndroid
  5. 5. CONFIDENTIAL Copyright © 2009-2015 eureka, inc. All rights reserved. 目次 • 突然アプリケーションが刺さる • databaseの接続が残り続ける • goルーチンが増え続ける
  6. 6. CONFIDENTIAL Copyright © 2009-2015 eureka, inc. All rights reserved. 突然アプリケーションが 刺さる。
  7. 7. CONFIDENTIAL Copyright © 2009-2015 eureka, inc. All rights reserved. Gatlingで負荷テスト中にしてたら、
  8. 8. CONFIDENTIAL Copyright © 2009-2015 eureka, inc. All rights reserved. 突然 504が大量発生!
  9. 9. CONFIDENTIAL Copyright © 2009-2015 eureka, inc. All rights reserved.
  10. 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. 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. 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; } 対策
  13. 13. CONFIDENTIAL Copyright © 2009-2015 eureka, inc. All rights reserved. databaseの接続が 残りつ続ける。
  14. 14. CONFIDENTIAL Copyright © 2009-2015 eureka, inc. All rights reserved. connection count 突然 too many connectionsが発生
  15. 15. CONFIDENTIAL Copyright © 2009-2015 eureka, inc. All rights reserved. 自前で実装したSQLのパッケージで、 コネクション をcloseしても、オブジェ クトにNULLを渡してもコネクション が残り続けた。 発生原因
  16. 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する設定 対策
  17. 17. CONFIDENTIAL Copyright © 2009-2015 eureka, inc. All rights reserved. goルーチンが増え続ける。
  18. 18. CONFIDENTIAL Copyright © 2009-2015 eureka, inc. All rights reserved.
  19. 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でメトリクスを取得
  20. 20. CONFIDENTIAL Copyright © 2009-2015 eureka, inc. All rights reserved. 発生原因 原因がわかってません。 情報があれば、教えてください。
  21. 21. CONFIDENTIAL Copyright © 2009-2015 eureka, inc. All rights reserved. とりあずした事 • blue-green モデルだったので、手動で定期的 にローリングアップデート。 • この運用はマジ無理 • というか休みの日とか辛い
  22. 22. CONFIDENTIAL Copyright © 2009-2015 eureka, inc. All rights reserved. とりあずした事 定期的にgraceful restartで解決?
  23. 23. CONFIDENTIAL Copyright © 2009-2015 eureka, inc. All rights reserved. まとめ • いまの所安定して運用できてます。 • gcまわりで問題でもおきてなさそう。 • 障害は突然やってくるのではメトリクスを必ず見ておく必要が ある。 • バージョンアップで解決しそうな問題もあるのでバージョンアッ プはやりたい。
  24. 24. CONFIDENTIAL Thank you :) Thank you :)

×