コンテンツにスキップ

ex7 — hey と HTTP サーバの負荷テスト

小テスト

小テストは 4 講時の講義パートのあとに行います。問題は前回の aiJudge 課題の内容に沿っています。受験できるのは 1-608 の教室だけで、オンラインでは受験できません。

16:30〜16:45 の 15 分間で、aiJudge の次の課題に取り組んでください。

  • runThread.py

まとめの小テストについて

最終回(11/13)の 4 講時(15:30〜16:30)に、1-608 の実習室 PC で「まとめの小テスト」を行います。実施方法は ex8 で確認してください。

演習課題

ex7 は「まとめの小テスト」のリハーサルです — 1-608 の実習室 PC の Web エディタからしか提出できません

ex7 の 2 つの課題は、次回(11/13)のまとめの小テストと同じ設定にしてあります。当日の手順を、ここで一度試しておいてください。

  • 提出できるのは 1-608 の実習室 PC からだけです。自分のノート PC や、自宅など学外からは提出できません(まとめの小テストも同じです)
  • 提出は aiJudge の Web エディタからだけです。実習室 PC のブラウザで aiJudge を開き、コースの画面で ex7 の見出しの下にある「エディタで解く」を押してください。課題の画面のファイル欄からは提出できません
  • エディタを開くと「画面全体を共有して始める」が表示されます。小テストと同じく「画面全体」を共有してください。画面の共有を止めると提出できません
  • hey のスクリーンショット(画像)は、実習室 PC に移してから提出します。 自分の PC で撮った画像を、OneDrive などのクラウドストレージや USB メモリで実習室 PC にコピーし、エディタの画面にある hey の課題のタブで選んで提出してください
  • 提出の締切は 11/13(金)0:00 です。それまでの間なら、1-608 の実習室 PC から何度でも提出できます

まとめの小テストの準備をしておきましょう

まとめの小テストでは、自分のプログラムのコードを参照できます。ただし、使えるのは実習室 PC だけです。この機会に、これまでに書いたプログラム(ex3〜ex7 の .py ファイルなど)を実習室 PC にコピーし、まとめの小テストでも開けるようにしておくとよいでしょう。

演習課題 1. hey で負荷テストを行う

hey をインストールし、次に示す「測ってよい相手」のどれか 1 つに対して Web サーバの負荷テストを行ってください。3 つすべてを測る必要はありません。迷ったら 1 の自分の PC で測ってください。

負荷テストの宛先は限定されています

この科目で負荷テストを行ってよい相手は、次の 3 つだけです。これ以外のサーバには負荷テストを行わないでください。

  1. 自分の PC で動かしている httpServer.py — http://127.0.0.1:50080/server.html
  2. 自分が管理しているサーバ — 自分で借りた VPS、自分の Raspberry Pi、同じ LAN 内の自分の PC など
  3. この科目で許可された学内サーバ — https://www.math.ryukoku.ac.jp/ と https://whale2.math.ryukoku.ac.jp/ の 2 つのみ

大学の公開サイト(www.ryukoku.ac.jp など)、企業・公共機関・他人のサイト、学内の他の実習室や研究室のマシンはすべて対象外です。

過度な負荷テストは行わないでください

負荷テストと DoS 攻撃では、実行するコマンドに違いはありません。両者の違いは、相手の許可があるかどうかだけです。 許可された相手に対しても、-n 100 程度から始めてください。-n 1000 は一度くらいなら許容範囲ですが、-n 10000 は避けてください。 また、-c の既定値は 50 なので、必ず -c を明示してください。

過去には、許可のないサーバに大量のリクエストを送り、大学から指導を受けた例があります。DoS 攻撃とみなされると、発信者個人だけでなく組織全体(たとえば龍谷大学全体)からのアクセスが拒否されることもあります。

hey のインストール

  1. GitHub の hey リポジトリ の README の Installation にある Windows (amd64) のリンクから、実行ファイルをダウンロードします
  2. ダウンロードしたファイル(hey_windows_amd64)の名前を hey.exe に変更し、作業用のフォルダに置きます
  3. PowerShell でそのフォルダに移動し、.\hey.exe -h で使い方が表示されることを確かめます。以降のコマンドの hey は .\hey.exe に読み替えてください

Homebrew を使っている場合は、brew install hey でインストールできます(以降は hey で実行できます)。

Homebrew を使っていない場合は、README の macOS (amd64) のリンクからダウンロードし、ターミナルで次のようにします。

$ mv ~/Downloads/hey_darwin_amd64 ./hey      # 名前を hey に変える
$ chmod +x hey                               # 実行できるようにする
$ xattr -d com.apple.quarantine hey          # 「開発元を検証できません」と止められないようにする
$ ./hey -h                                   # 以降のコマンドの hey は ./hey に読み替える

Apple Silicon(M1 以降)の Mac では、初回に Rosetta 2 のインストールを求められることがあります。

Ubuntu などでは sudo apt install hey でインストールできます。

hey を実行する

  1. 上記の「測ってよい相手」のどれか 1 つに対して、hey で負荷テストを行ってください。自分の PC で httpServer.py を起動し、次のように測るのがもっとも確実です。

    $ hey -n 100 -c 1 http://127.0.0.1:50080/server.html
    
    • localhost ではなく 127.0.0.1 と書いてください。PC によっては localhost が IPv6 の宛先(::1)になり、IPv4 で待ち受けている httpServer.py に接続できません(connection refused のエラーになります)
    • 学内サーバは https:// で指定してください。http:// だと、https:// への転送(リダイレクト)の分だけリクエストが余計に送られます
    • httpServer.py は一度に 1 つの接続しか処理しないので、-c を大きくすると Error distribution にエラーが表示されることがあります。それも測定の結果なので、そのまま提出してかまいません
  2. 負荷テストを行ったターミナル画面のスクリーンショットを、次の aiJudge の課題に提出してください(画像を 1-608 の実習室 PC に移してから、Web エディタの hey のタブで)。スクリーンショットには、実行したコマンドと出力結果(Summary から Status code distribution まで)をすべて含めてください。

    実行画面は、たとえば次のようになります。これは見本です。この画像をそのまま提出すると 0 点になります。

    hey の実行画面の見本(見本・提出不可)

  • hey による負荷テストのスクリーンショット

演習課題 2. スレッドをリストにためるプログラム

aiJudge の次の課題に取り組んでください。

  • threadList.py

レポート課題(任意提出課題)

任意提出のレポート課題は、レポート課題のページを見てください(第 8 回の終了後から 11/27 まで提出できます)。