SlideShare une entreprise Scribd logo
1  sur  28
Télécharger pour lire hors ligne
負荷対策しておもったことまとめ
~JMeterでSocket.IOもいけるでよ~
 
Ito Eichi
アジェンダ
 
負荷対策ってなに	
どんないいことがあるん?	
JMeterって?

テストシナリオファイルって?	
わりと陥りやすい罠	
やっとくと楽になるポイント	
実施するまえに	
	
Socket.IOをJMeterで負荷試験してみる	
Node.jsで負荷かけるスクリプト書いてもいいけど…	
JMeter - WebSocket Sampler	
	
おもったこと	
謝辞と参考文献
負荷試験てなに?
 
早い話ユーザがアクセスしてきた体で、	
アクセスを大量にさせてチューニングしていく作業です。
おもにJMeterというツールを使っています。
負荷かける	
 測定	
 めでたし2	
チューニング	
耐え
られ
る?	
Yes!	
No…
負荷試験するとどんないいことがあるん?
 
•  リリース後に負荷でサーバが落ちづらくなる

	
•  チューニングが運用後に比べて比較的やりやすい	
 リリース前にくらべて仕様変更もふくめ互換性が取れない変更もできる
JMeterって?
 •  一言でいうとサーバに負荷をかけるツール

	
•  複数のクライアントのリクエストをエミュレーション	
•  変数やループ、IFなどの細やかな制御ができる
テストシナリオファイルって?
 
•  JMeterがどんなリクエストを発生させるかを

指定するファイル	
•  XMLで書かれている	
•  通常JMeterに読み込ませて編集、実行する	
•  日本語版JMeterだと「テスト計画」という呼び名
わりと陥りやすい負荷試験の罠
•  データ数は必要な目標DAU想定分以上いれる

デバッグコマンドあると楽

レコード数さえあればOKなばあいは、

シナリオで使うデータ以外は自己結合でレコード水増し

(例)実行するたびにレコードを倍にするSQL

insert into `tbl` (col1,col2) select col1,col2 from `tbl`;

	
• 外部のAPI使っている箇所は切ろうね

課金とかフレンドとかGoogle Analyticsみたいな効果測定系

あとリリース後の監視は手厚く

…切らずにやると接続先が激おこ。
やっとくと楽になるポイント
 
• 「CSV Data Set Config」を使う

ユーザIDみたいな可変項目をCSVに外だししておくと楽

	
• HTTP プロキシサーバを使う

リクエストを自動的に収集してシナリオにしてくれて楽

簡単なシナリオならこれでほぼそのままつかえる

	
• 実装しながらJMeterシナリオを作る

簡易ユニットテスト的な使い方で動作チェックにも使えて楽
社内や開発チームと	
負荷試験の必要性や	
どこまで確認できればOKかを	
認識合わせしましょう	
 
実施するまえに
ところで…
Socket.IOの負荷試験したいなあ 
最近わりと使われてる
よし負荷テストかける
クライアントスクリプトも
Node.jsで書くお! 
できた!
 
…けどね
…けどね
 
パフォーマンスでないってときに、
サーバとクライアントどっちに
原因があるかわからないとき
毎回切り分けしてるとつらいー
測定条件はまだしも、サーバの仕様がかわったり
別のAPIの測定するとき、
クライアントのスクリプト作り直さないと…orz
JMeterみたいにテストシナリオ
簡単に変更できないかなあ… 
あった!
JMeter - WebSocket Sampler
https://github.com/maciejzaleski/JMeter-WebSocketSampler
インストールとか
 
JMeter準備
http://jmeter.apache.org
からダウンロードして好きなところに解凍
WebSoketSampler入手
 
https://github.com/maciejzaleski/JMeter-WebSocketSampler/releases
からダウンロード
Jettyもいれる(1)
 
WebSocketSamplerが依存しているので
http://download.eclipse.org/jetty/
から最新のstableをDLして解凍
Jettyもいれる(2)
 
めんどくさいのでひとまずJetty丸ごと入れる
解凍してできたディレクトリの
lib/jetty*.jar
lib/websocket/*.jar
をJmeterを解凍したディレクトリの
/lib/ext
にコピー
サンプラーの中に
「WebSocket Sampler」の
項目が追加されたー!
 
Socket.IOの場合の	
テストシナリオの流れ
Hand Shake 要求	
tokenを発行	
tokenをつけてWebSocket開始要求	
Switching Protocols	
emit	
emit	
	
heart beat 要求	
heart beat送信	
disconnect	
	
JMeter	
 サーバ
シナリオこんな感じになります
テストシナリオ実行中の動画
おもったこと
(読み飛ばし可)
•  JMeterを起動するときMac版はjmeter.shの設定の関係で

プラグインがよみこまれなかった	
•  WebSocketのハートビートは自分でやらないと

タイムアウトでしばらくすると接続きれちゃう	
•  一回ブラウザ上でsocket.io-clientをつかって実装して、

Chromeとかのデバッグウィンドウ通信を眺めてみると感覚がつかみやすいかも	
•  それでも不明なところはsocket.io-clientの

ソースを読んでみるのもアリ(ちょっとしんどかった)	
•  JMeterのクラスター構成でもうごいたー	
•  コマンドラインでもうごいたー	
•  ログの形式は独自なので今後コンバータか何かつくりたい	
	
つまり正直しんどかったお…
謝辞と参考文献	
 	
  
nkns165さんのこちらのページを参考に
させていただきました。	
  
JMeterでWebSocketのパフォーマンステスト	
  
http://qiita.com/nkns165/items/8cd82bf8b93826dfdca2	
  
 	
  
ご清聴ありがとうございました。

Contenu connexe

Tendances

Tendances (20)

Mavenの真実とウソ
Mavenの真実とウソMavenの真実とウソ
Mavenの真実とウソ
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはがんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
 
入門!Jenkins
入門!Jenkins入門!Jenkins
入門!Jenkins
 
Hyper-V ネットワークの基本
Hyper-V ネットワークの基本Hyper-V ネットワークの基本
Hyper-V ネットワークの基本
 
比較サイトの検索改善(SPA から SSR に変換)
比較サイトの検索改善(SPA から SSR に変換)比較サイトの検索改善(SPA から SSR に変換)
比較サイトの検索改善(SPA から SSR に変換)
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
 
5分でわかるWebRTCの仕組み - html5minutes vol.01
5分でわかるWebRTCの仕組み - html5minutes vol.015分でわかるWebRTCの仕組み - html5minutes vol.01
5分でわかるWebRTCの仕組み - html5minutes vol.01
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
 
これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~
これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~
これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~
 
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things
 
GitLab から GitLab に移行したときの思い出
GitLab から GitLab に移行したときの思い出GitLab から GitLab に移行したときの思い出
GitLab から GitLab に移行したときの思い出
 
Burp Suite 2.0触ってみた
Burp Suite 2.0触ってみたBurp Suite 2.0触ってみた
Burp Suite 2.0触ってみた
 

En vedette

ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方
Daisaku Mochizuki
 

En vedette (15)

Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃんRetrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
 
Imprementation of realtime_networkgame
Imprementation of realtime_networkgameImprementation of realtime_networkgame
Imprementation of realtime_networkgame
 
負荷がたかいいんだから~♪(仮)
負荷がたかいいんだから~♪(仮)負荷がたかいいんだから~♪(仮)
負荷がたかいいんだから~♪(仮)
 
MMOのサーバについて 剣と魔法のログレス ~いにしえの女神~ での実装例
MMOのサーバについて 剣と魔法のログレス ~いにしえの女神~ での実装例MMOのサーバについて 剣と魔法のログレス ~いにしえの女神~ での実装例
MMOのサーバについて 剣と魔法のログレス ~いにしえの女神~ での実装例
 
サーバーのおしごと
サーバーのおしごとサーバーのおしごと
サーバーのおしごと
 
分割と整合性と戦う
分割と整合性と戦う分割と整合性と戦う
分割と整合性と戦う
 
Fluentd and Embulk Game Server 4
Fluentd and Embulk Game Server 4Fluentd and Embulk Game Server 4
Fluentd and Embulk Game Server 4
 
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜 リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
 
Halo2 におけるHFSM(階層型有限状態マシン) 【ビヘイビアツリー解説】
Halo2 におけるHFSM(階層型有限状態マシン)  【ビヘイビアツリー解説】Halo2 におけるHFSM(階層型有限状態マシン)  【ビヘイビアツリー解説】
Halo2 におけるHFSM(階層型有限状態マシン) 【ビヘイビアツリー解説】
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 
自宅で出来る!ゲームサーバの作り方
自宅で出来る!ゲームサーバの作り方自宅で出来る!ゲームサーバの作り方
自宅で出来る!ゲームサーバの作り方
 
ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方
 
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
 
Webアプリケーション負荷試験実践入門
Webアプリケーション負荷試験実践入門Webアプリケーション負荷試験実践入門
Webアプリケーション負荷試験実践入門
 
ミリシタを支える GAE/Go
ミリシタを支える GAE/Goミリシタを支える GAE/Go
ミリシタを支える GAE/Go
 

Dernier

Dernier (11)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 

負荷対策しておもったことまとめ~JMeterでSocket.IOもいけるでよ~

Notes de l'éditeur

  1. 濱田さんからご紹介に預かりました Cygamesで負荷対策をしている伊藤です。
  2. 負荷対策の基本的なところから 最近ちょっとおもしろいJmeterのつかいかた Socket.IOがなんとかって書いてあるところですね こちらのお話を致したいと思います。 よろしくおねがいします。
  3. リリース前に本番に想定されるアクセス数に応じた リクエスト(負荷)をかけて、 そのゲームサーバがアクセスに耐えられるかどうか確かめ、 チューニングしていく作業。 早い話ユーザがアクセスしてきた体で、 アクセスを大量にさせて調子をみるというかんじ。
  4. おもにデータ投入と外部のAPIを使ってる箇所やっちゃいやすいですね。
  5. 他にもいろいろあるんですが、すぐできそうなところだと CSV Data Set Configと HTTPプロキシサーバっていうのはJmeterのきのうですね
  6. とまあいろいろ一筋縄でいかないことがあるかとはおもいますので、 実施する前にゴールを認識合わせしておくとスムーズです。 あと、慣れてくるとちょっと楽しくなってきます。
  7. ところで…最近負荷対策をしてて面白いとおもったことを紹介したいです。
  8. けどね…
  9. 本当はgithubの
  10. hand shake 通常のHTTPリクエストで connectとそのレスポンスからtoken取得 コネクションを維持する際、Connection idにも注意 tokenをつけてemit tokenをつけてheartbeat disconnect
  11. いろいろこまかいところあるんですがながいので… 正直しんどかったっす でもいろいろSocket.IOの理解が深まって勉強になりました。