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.

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

5,146 views

Published on

負荷対策をしていての事例とJMeterでSocket.IOの負荷試験をする方法

Published in: Technology
  • Be the first to comment

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

  1. 1. 負荷対策しておもったことまとめ ~JMeterでSocket.IOもいけるでよ~   Ito Eichi
  2. 2. アジェンダ   負荷対策ってなに どんないいことがあるん? JMeterって?
 テストシナリオファイルって? わりと陥りやすい罠 やっとくと楽になるポイント 実施するまえに Socket.IOをJMeterで負荷試験してみる Node.jsで負荷かけるスクリプト書いてもいいけど… JMeter - WebSocket Sampler おもったこと 謝辞と参考文献
  3. 3. 負荷試験てなに?   早い話ユーザがアクセスしてきた体で、 アクセスを大量にさせてチューニングしていく作業です。 おもにJMeterというツールを使っています。 負荷かける 測定 めでたし2 チューニング 耐え られ る? Yes! No…
  4. 4. 負荷試験するとどんないいことがあるん?   •  リリース後に負荷でサーバが落ちづらくなる
 •  チューニングが運用後に比べて比較的やりやすい  リリース前にくらべて仕様変更もふくめ互換性が取れない変更もできる
  5. 5. JMeterって?  •  一言でいうとサーバに負荷をかけるツール
 •  複数のクライアントのリクエストをエミュレーション •  変数やループ、IFなどの細やかな制御ができる
  6. 6. テストシナリオファイルって?   •  JMeterがどんなリクエストを発生させるかを
 指定するファイル •  XMLで書かれている •  通常JMeterに読み込ませて編集、実行する •  日本語版JMeterだと「テスト計画」という呼び名
  7. 7. わりと陥りやすい負荷試験の罠 •  データ数は必要な目標DAU想定分以上いれる
 デバッグコマンドあると楽
 レコード数さえあればOKなばあいは、
 シナリオで使うデータ以外は自己結合でレコード水増し
 (例)実行するたびにレコードを倍にするSQL
 insert into `tbl` (col1,col2) select col1,col2 from `tbl`;
 • 外部のAPI使っている箇所は切ろうね
 課金とかフレンドとかGoogle Analyticsみたいな効果測定系
 あとリリース後の監視は手厚く
 …切らずにやると接続先が激おこ。
  8. 8. やっとくと楽になるポイント   • 「CSV Data Set Config」を使う
 ユーザIDみたいな可変項目をCSVに外だししておくと楽
 • HTTP プロキシサーバを使う
 リクエストを自動的に収集してシナリオにしてくれて楽
 簡単なシナリオならこれでほぼそのままつかえる
 • 実装しながらJMeterシナリオを作る
 簡易ユニットテスト的な使い方で動作チェックにも使えて楽
  9. 9. 社内や開発チームと 負荷試験の必要性や どこまで確認できればOKかを 認識合わせしましょう   実施するまえに
  10. 10. ところで…
  11. 11. Socket.IOの負荷試験したいなあ  最近わりと使われてる
  12. 12. よし負荷テストかける クライアントスクリプトも Node.jsで書くお! 
  13. 13. できた!   …けどね
  14. 14. …けどね   パフォーマンスでないってときに、 サーバとクライアントどっちに 原因があるかわからないとき 毎回切り分けしてるとつらいー 測定条件はまだしも、サーバの仕様がかわったり 別のAPIの測定するとき、 クライアントのスクリプト作り直さないと…orz
  15. 15. JMeterみたいにテストシナリオ 簡単に変更できないかなあ… 
  16. 16. あった! JMeter - WebSocket Sampler https://github.com/maciejzaleski/JMeter-WebSocketSampler
  17. 17. インストールとか  
  18. 18. JMeter準備 http://jmeter.apache.org からダウンロードして好きなところに解凍
  19. 19. WebSoketSampler入手   https://github.com/maciejzaleski/JMeter-WebSocketSampler/releases からダウンロード
  20. 20. Jettyもいれる(1)   WebSocketSamplerが依存しているので http://download.eclipse.org/jetty/ から最新のstableをDLして解凍
  21. 21. Jettyもいれる(2)   めんどくさいのでひとまずJetty丸ごと入れる 解凍してできたディレクトリの lib/jetty*.jar lib/websocket/*.jar をJmeterを解凍したディレクトリの /lib/ext にコピー
  22. 22. サンプラーの中に 「WebSocket Sampler」の 項目が追加されたー!  
  23. 23. Socket.IOの場合の テストシナリオの流れ Hand Shake 要求 tokenを発行 tokenをつけてWebSocket開始要求 Switching Protocols emit emit heart beat 要求 heart beat送信 disconnect JMeter サーバ
  24. 24. シナリオこんな感じになります
  25. 25. テストシナリオ実行中の動画
  26. 26. おもったこと (読み飛ばし可) •  JMeterを起動するときMac版はjmeter.shの設定の関係で
 プラグインがよみこまれなかった •  WebSocketのハートビートは自分でやらないと
 タイムアウトでしばらくすると接続きれちゃう •  一回ブラウザ上でsocket.io-clientをつかって実装して、
 Chromeとかのデバッグウィンドウ通信を眺めてみると感覚がつかみやすいかも •  それでも不明なところはsocket.io-clientの
 ソースを読んでみるのもアリ(ちょっとしんどかった) •  JMeterのクラスター構成でもうごいたー •  コマンドラインでもうごいたー •  ログの形式は独自なので今後コンバータか何かつくりたい つまり正直しんどかったお…
  27. 27. 謝辞と参考文献     nkns165さんのこちらのページを参考に させていただきました。   JMeterでWebSocketのパフォーマンステスト   http://qiita.com/nkns165/items/8cd82bf8b93826dfdca2  
  28. 28.     ご清聴ありがとうございました。

×