Submit Search
Upload
5xx解消への道のり
•
Download as PPTX, PDF
•
0 likes
•
316 views
Yuto Suzuki
Follow
APIの5xxを解消するための仕組み
Read less
Read more
Report
Share
Report
Share
1 of 19
Download now
Recommended
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
Jun-ichi Sakamoto
Community Open Day 2012 北海道会場 セッション2
MySQLのインデックス入門
MySQLのインデックス入門
Yuto Suzuki
MySQLのIndexに関しての社内LTのスライド
Ad vol.2
Ad vol.2
Yuto Suzuki
社内でやった広告勉強会第2回目です
広告勉強会
広告勉強会
Yuto Suzuki
社内で行った広告勉強会の資料です
Mastering Bitcoin ~network~
Mastering Bitcoin ~network~
Yuto Suzuki
社内輪読会の資料 Mastering Bitcoinのネットワークの章の後半部分のスライド ・SPVノード ・BloomFilter ・トランザクションプール
Aerospike基本のき
Aerospike基本のき
Yuto Suzuki
社内LTしたときの資料。 AeroSpikeの基本的なことをまとめてました
いまさらAkkaStream
いまさらAkkaStream
Yuto Suzuki
Akka Streamに関して、いまさら発表しました。
Introduction of View Through Tracking
Introduction of View Through Tracking
Yuto Suzuki
About View Through Tracking
Recommended
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
Jun-ichi Sakamoto
Community Open Day 2012 北海道会場 セッション2
MySQLのインデックス入門
MySQLのインデックス入門
Yuto Suzuki
MySQLのIndexに関しての社内LTのスライド
Ad vol.2
Ad vol.2
Yuto Suzuki
社内でやった広告勉強会第2回目です
広告勉強会
広告勉強会
Yuto Suzuki
社内で行った広告勉強会の資料です
Mastering Bitcoin ~network~
Mastering Bitcoin ~network~
Yuto Suzuki
社内輪読会の資料 Mastering Bitcoinのネットワークの章の後半部分のスライド ・SPVノード ・BloomFilter ・トランザクションプール
Aerospike基本のき
Aerospike基本のき
Yuto Suzuki
社内LTしたときの資料。 AeroSpikeの基本的なことをまとめてました
いまさらAkkaStream
いまさらAkkaStream
Yuto Suzuki
Akka Streamに関して、いまさら発表しました。
Introduction of View Through Tracking
Introduction of View Through Tracking
Yuto Suzuki
About View Through Tracking
エンジニアのためのマーケティング
エンジニアのためのマーケティング
Yuto Suzuki
marketing for engineers
How to Build a Team
How to Build a Team
Yuto Suzuki
チームについて考えてみた。
プロダクトにおけるScala
プロダクトにおけるScala
Yuto Suzuki
Scalaとsansyoの話
Do you like scala
Do you like scala
Yuto Suzuki
Scalaを毛嫌いする人に対して歩み寄るためのお話
Re invent
Re invent
Yuto Suzuki
reinventの雑な発表。
Slackから始めるChatOps
Slackから始めるChatOps
Yuto Suzuki
Slackから始めるChatOps
大学の時の研究の話
大学の時の研究の話
Yuto Suzuki
カタカナ動詞の意味を取得する話
F.O.Xを支える技術
F.O.Xを支える技術
Yuto Suzuki
Scala, F.O.X
Scala戦士を増やせ
Scala戦士を増やせ
Yuto Suzuki
scalaを社内で広めるためには?
Recommend scala
Recommend scala
Yuto Suzuki
scala
スクラムに学ぶ開発の回し方
スクラムに学ぶ開発の回し方
Yuto Suzuki
スクラムで開発する上で、重要なことをまとめました。
Breezeで始めるデータ分析
Breezeで始めるデータ分析
Yuto Suzuki
scala,breeze
進撃のSbt
進撃のSbt
Yuto Suzuki
sbt pluginの作り方をLTで紹介しました
【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js
Yuto Suzuki
scala.jsを試してみました。
Deeplearningとは?
Deeplearningとは?
Yuto Suzuki
ニューラルネットワークから畳み込みネットまで数式をほぼ使わずに解説してみました。中途半端な感じでわかりづらくなってしまいました。。
Scalaで行うマイグレーション ~Flyway~
Scalaで行うマイグレーション ~Flyway~
Yuto Suzuki
社内勉強会のflywayの紹介を行いました。
Git LFSを触ってみた
Git LFSを触ってみた
Yuto Suzuki
最近でたGitLFSを触ってみたので、共有
実戦Scala
実戦Scala
Yuto Suzuki
Scala導入した話 「実戦での Scala 〜 6つの事例から知る Scala の勘所〜」でのLTです。
Api設計
Api設計
Yuto Suzuki
オライリーのWebAPIを参考にAPIの設計に関するスライドを作りました。
Emacs
Emacs
Yuto Suzuki
プレゼンテーションワークショップで作ったemacsのキーバインドについての話です。 Vimmerの人ごめんなさい。
More Related Content
More from Yuto Suzuki
エンジニアのためのマーケティング
エンジニアのためのマーケティング
Yuto Suzuki
marketing for engineers
How to Build a Team
How to Build a Team
Yuto Suzuki
チームについて考えてみた。
プロダクトにおけるScala
プロダクトにおけるScala
Yuto Suzuki
Scalaとsansyoの話
Do you like scala
Do you like scala
Yuto Suzuki
Scalaを毛嫌いする人に対して歩み寄るためのお話
Re invent
Re invent
Yuto Suzuki
reinventの雑な発表。
Slackから始めるChatOps
Slackから始めるChatOps
Yuto Suzuki
Slackから始めるChatOps
大学の時の研究の話
大学の時の研究の話
Yuto Suzuki
カタカナ動詞の意味を取得する話
F.O.Xを支える技術
F.O.Xを支える技術
Yuto Suzuki
Scala, F.O.X
Scala戦士を増やせ
Scala戦士を増やせ
Yuto Suzuki
scalaを社内で広めるためには?
Recommend scala
Recommend scala
Yuto Suzuki
scala
スクラムに学ぶ開発の回し方
スクラムに学ぶ開発の回し方
Yuto Suzuki
スクラムで開発する上で、重要なことをまとめました。
Breezeで始めるデータ分析
Breezeで始めるデータ分析
Yuto Suzuki
scala,breeze
進撃のSbt
進撃のSbt
Yuto Suzuki
sbt pluginの作り方をLTで紹介しました
【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js
Yuto Suzuki
scala.jsを試してみました。
Deeplearningとは?
Deeplearningとは?
Yuto Suzuki
ニューラルネットワークから畳み込みネットまで数式をほぼ使わずに解説してみました。中途半端な感じでわかりづらくなってしまいました。。
Scalaで行うマイグレーション ~Flyway~
Scalaで行うマイグレーション ~Flyway~
Yuto Suzuki
社内勉強会のflywayの紹介を行いました。
Git LFSを触ってみた
Git LFSを触ってみた
Yuto Suzuki
最近でたGitLFSを触ってみたので、共有
実戦Scala
実戦Scala
Yuto Suzuki
Scala導入した話 「実戦での Scala 〜 6つの事例から知る Scala の勘所〜」でのLTです。
Api設計
Api設計
Yuto Suzuki
オライリーのWebAPIを参考にAPIの設計に関するスライドを作りました。
Emacs
Emacs
Yuto Suzuki
プレゼンテーションワークショップで作ったemacsのキーバインドについての話です。 Vimmerの人ごめんなさい。
More from Yuto Suzuki
(20)
エンジニアのためのマーケティング
エンジニアのためのマーケティング
How to Build a Team
How to Build a Team
プロダクトにおけるScala
プロダクトにおけるScala
Do you like scala
Do you like scala
Re invent
Re invent
Slackから始めるChatOps
Slackから始めるChatOps
大学の時の研究の話
大学の時の研究の話
F.O.Xを支える技術
F.O.Xを支える技術
Scala戦士を増やせ
Scala戦士を増やせ
Recommend scala
Recommend scala
スクラムに学ぶ開発の回し方
スクラムに学ぶ開発の回し方
Breezeで始めるデータ分析
Breezeで始めるデータ分析
進撃のSbt
進撃のSbt
【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js
Deeplearningとは?
Deeplearningとは?
Scalaで行うマイグレーション ~Flyway~
Scalaで行うマイグレーション ~Flyway~
Git LFSを触ってみた
Git LFSを触ってみた
実戦Scala
実戦Scala
Api設計
Api設計
Emacs
Emacs
5xx解消への道のり
1.
5xx解消への道のり 2021/08/25
2.
5xxとは ● 5xxとは ○ HTTP
Statusの500 ~ 599のレスポンス ○ 4xxなどはクライアント側のエラーに対して、5xxはサーバ側のエラー ○ エラーなので利用者は正常なレスポンスを受け取れない ● 例えば ○ 500: Internal Server Error ○ 501: Not Implemented ○ 502: Bad Gateway ○ 503: Service Unavailable ○ 504: Gateway Timeout
3.
何の5xxが発生しているか見極める ● CloudWatchから ○ Target_5xx ○
ELB_5xx ● HTTP StatusCodeから ○ 500 ○ 503 ○ 504
4.
何の5xxが発生しているか見極める Target_5xx ELB_5xx この順番で対応していくのがおすすめ
5.
Target_5xxへの対応 1. 500エラー a. 最初に調べるエラー b.
アプリケーションのコード上のエラー c. panicのエラー d. エラーログなどを吐いて原因を検出しやすくする 2. 503エラー a. APIサーバが過負荷になっていると発生しがち b. だいたいCPUバウンドなので、スケールアウト、スケールアップさせる
6.
ELB_5xxへの対応 ELB_5xxの対応はやっかい ● 503 ○ Service
Unavailable ○ 昔は暖気申請をする必要があった ○ 基本的には504が大量に発生した結果なりやすい ● 504 ○ Gateway Timeout ○ とにかくAPIのレスポンスを早くするしかない ● 502 ○ Bad Gateway ○ ALBのtimeoutが短いパターン(default 60sなので管理画面とかでなければあまりない) ○ API側のエラー(Target_5xx)が大量に発生した結果のパターン
7.
レスポンスタイムを早くする ● CPUが使えているか? ● CPUが使えていない場合、ほぼI/O
Waitが原因
8.
I/O Waitとは ● 物理的なIn,Outで待ちが発生すること ○
HTTPリクエストのレスポンス待ち ○ RedisやDynamoDBなどのレスポンス待ち ○ ファイルの読み書き ● とにかくネットワークのIOがめちゃくちゃ遅い 1. メインメモリアクセス 2. ローカルファイルアクセス 3. ネットワーク越しアクセス
9.
I/Oの遅い部分の特定 推測するな計測せよ 関係ないところを改修するほど無駄なことはなし ● お手軽APM ○ とにかく全部計測 ○
リアルタイムじゃないとサンプリングされちゃう ● 基本のロギング ○ 初心に戻ってログデバッグ!
10.
I/Oの遅い部分を早くする I/Oのtimeoutを設定する ● Goの場合 ○ コネクション作成時のconfig ○
contextによるtimeout cancel
11.
TimeOutの設定 Redisの場合 ● ReadTimeout: クエリコマンドのtimeout ●
PoolTimeout: コネクションプールからコネクションを確保するまで ● DialTimeout: コネクション確立まで Ring Pool Redis redis.GET
12.
TimeOutの設定 Redisの場合 ● ReadTimeout: クエリコマンドのtimeout ●
PoolTimeout: コネクションプールからコネクションを確保するまで ● DialTimeout: コネクション確立まで Ring Pool Redis redis.GET
13.
TimeOutの設定 Redisの場合 ● ReadTimeout: クエリコマンドのtimeout ●
PoolTimeout: コネクションプールからコネクションを確保するまで ● DialTimeout: コネクション確立まで Ring Pool Redis redis.GET
14.
Context Cancel GoではContextでcancelの仕組みを実現できる timeoutすると、channelに通知してくれる
15.
go-redis v8 GoのRedisクライアント デフォルトでctxの引数が必須に
16.
aws-dax-go AWSのDynamoDB AccelalatorのクライアントSDK ● timeoutをちゃんとしてくれない問題が! ○
context timeoutしても時間通りcancelしてくれない ○ もちろんconfigでtimeoutも設定済み gunosy/keeper作りました
17.
gunosy/keeper やってることはすごい薄いです 引数の関数fを非同期実行して、 - context timeoutしたら
return (nil, ctx.Err) - timeoutしなければ return (obj{}, nil)
18.
CPUを使い切る - Target_5xxを解消 - CPUを使い切れるようにチューニング 4月
8月
19.
まとめ - 5xxを解消するためにまず分解 - 推測ではなく計測 もし5xx解消における相談などあればぜひ
Download now