web server

2,791 views

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,791
On SlideShare
0
From Embeds
0
Number of Embeds
526
Actions
Shares
0
Downloads
5
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

web server

  1. 1. Web サーバ勉強会 #2 @soestudio
  2. 2. 自己紹介 <ul><li>Twitter @soestudio </li></ul><ul><li>広告系の Web 制作会社でインフラエンジニアみたいなことをやってます。 </li></ul>
  3. 3. mod_pagespeed を試してみました @soestudio
  4. 4. mod_pagespeed とは <ul><li>CodeZine より </li></ul><ul><li>http://codezine.jp/article/detail/5561 </li></ul><ul><li> 「 mod_pagespeed 」は、あらゆる要素を分析し、自動的に Web ページの表示スピードを上げてくれる Apache のモジュール。これまで、 Firefox のアドオンとして公開されていた「 Page speed 」は Web ページの改善点を提案するものだったが、今回 Apache モジュール化されたことにより、自動的にパフォーマンスの最適化を行えるよ うになった。 </li></ul>
  5. 5. 今回やったこと <ul><li>CentOS に mod_pagespeed をインストールしました。 </li></ul><ul><li>mod_pagespeed の導入前後で、同一コンテンツにリクエストを投げて、結果を比較しました。 </li></ul>
  6. 6. インストール済みの Apache を確認します。 <ul><li>[root@localhost ~]# yum list httpd </li></ul><ul><li>Installed Packages </li></ul><ul><li>httpd.i386 2.2.3-43.el5.centos installed </li></ul><ul><li>[root@localhost ~]# </li></ul><ul><li>[root@localhost ~]# </li></ul>2.2.3 が入ってて、 32bit みたいですね。 ちなみに検証環境は [email_address] 円プランです。
  7. 7. 公開鍵を DL して、ぶち込みます。 <ul><li>[root@localhost ~]# wget https://dl-ssl.google.com/linux/linux_signing_key.pub </li></ul><ul><li>--2010-11-24 16:04:27-- https://dl-ssl.google.com/linux/linux_signing_key.pub </li></ul><ul><li>dl-ssl.google.com を DNS に問いあわせています ... 74.125.153.91, 74.125.153.136, 74.125.153.190, ... </li></ul><ul><li>dl-ssl.google.com|74.125.153.91|:443 に接続しています ... 接続しました。 </li></ul><ul><li>HTTP による接続要求を送信しました、応答を待っています ... 200 OK </li></ul><ul><li>長さ : 1745 (1.7K) [text/plain] </li></ul><ul><li>`linux_signing_key.pub' に保存中 </li></ul><ul><li>100%[============================================================================================================>] 1,745 --.-K/s 時間 0.02s </li></ul><ul><li>2010-11-24 16:04:29 (97.1 KB/s) - `linux_signing_key.pub' へ保存完了 [1745/1745] </li></ul><ul><li>[root@localhost ~]# rpm --import linux_signing_key.pub </li></ul><ul><li>[root@localhost ~]# </li></ul><ul><li>[root@localhost ~]# </li></ul>wget してから import します。
  8. 8. RPM を DL します。 <ul><li>[root@localhost ~]# wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-beta_current_i386.rpm </li></ul><ul><li>--2010-11-24 16:04:54-- https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-beta_current_i386.rpm </li></ul><ul><li>dl-ssl.google.com を DNS に問いあわせています ... 74.125.153.93, 74.125.153.91, 74.125.153.136, ... </li></ul><ul><li>dl-ssl.google.com|74.125.153.93|:443 に接続しています ... 接続しました。 </li></ul><ul><li>HTTP による接続要求を送信しました、応答を待っています ... 200 OK </li></ul><ul><li>長さ : 707378 (691K) [application/x-redhat-package-manager] </li></ul><ul><li>`mod-pagespeed-beta_current_i386.rpm' に保存中 </li></ul><ul><li>100%[============================================================================================================>] 707,378 295K/s 時間 2.3s </li></ul><ul><li>2010-11-24 16:04:58 (295 KB/s) - `mod-pagespeed-beta_current_i386.rpm' へ保存完了 [707378/707378] </li></ul>wget します。
  9. 9. yum でぶち込みます。 <ul><li>[root@localhost ~]# yum localinstall mod-pagespeed-beta_current_i386.rpm -y </li></ul><ul><li>ry) </li></ul><ul><li>Installed: </li></ul><ul><li>mod-pagespeed-beta.i386 0:0.9.10.1-250 </li></ul><ul><li>Dependency Installed: </li></ul><ul><li>at.i386 0:3.1.8-84.el5 </li></ul><ul><li>Complete! </li></ul>at も必要だったりするので yum で入れました。
  10. 10. 設定ファイルを覗いてみます。 <ul><li>[root@localhost ~]# egrep -v '^#|^$|^s*#' /etc/httpd/conf.d/pagespeed.conf </li></ul><ul><li>LoadModule pagespeed_module /usr/lib/httpd/modules/mod_pagespeed.so </li></ul><ul><li><IfModule !mod_deflate.c> </li></ul><ul><li>LoadModule deflate_module /usr/lib/httpd/modules/mod_deflate.so </li></ul><ul><li></IfModule> </li></ul><ul><li><IfModule pagespeed_module> </li></ul><ul><li>ModPagespeed on </li></ul><ul><li>AddOutputFilterByType MOD_PAGESPEED_OUTPUT_FILTER text/html </li></ul><ul><li>ModPagespeedFileCachePath &quot;/var/www/mod_pagespeed/cache/&quot; </li></ul><ul><li>ModPagespeedGeneratedFilePrefix &quot;/var/www/mod_pagespeed/files/&quot; </li></ul><ul><li><Location /mod_pagespeed_statistics> </li></ul><ul><li>Order allow,deny </li></ul><ul><li>Allow from localhost </li></ul><ul><li>SetHandler mod_pagespeed_statistics </li></ul><ul><li></Location> </li></ul><ul><li></IfModule> </li></ul>いろいろ書いてあります。
  11. 11. ab を掛ける前にリクエスト対象の コンテンツの内容を確認します。 <ul><li>[root@localhost ~]# curl http://localhost/hoge.html </li></ul><ul><li>hoge </li></ul><ul><li>[root@localhost ~]# </li></ul><ul><li>[root@localhost ~]# </li></ul>hoge って書いてあるだけです。
  12. 12. mod_pagespeed を反映する前に ab してみます。 <ul><li>[root@localhost ~]# ab -n1 -c1 http://localhost/hoge.html </li></ul><ul><li>ry) </li></ul><ul><li>Concurrency Level: 1 </li></ul><ul><li>Time taken for tests: 0.759 seconds </li></ul><ul><li>Complete requests: 1 </li></ul><ul><li>Failed requests: 0 </li></ul><ul><li>Write errors: 0 </li></ul><ul><li>Total transferred: 236 bytes </li></ul><ul><li>HTML transferred: 5 bytes </li></ul><ul><li>Requests per second: 1317.52 [#/sec] (mean) </li></ul><ul><li>Time per request: 0.759 [ms] (mean) </li></ul><ul><li>Time per request: 0.759 [ms] (mean, across all concurrent requests) </li></ul><ul><li>Transfer rate: 0.00 [Kbytes/sec] received </li></ul><ul><li>ry) </li></ul>こんな結果です。
  13. 13. Apache をリロードして page_speed を反映させます。 <ul><li>[root@localhost ~]# service httpd reload </li></ul><ul><li>httpd を再読み込み中 : [ OK ] </li></ul><ul><li>root@localhost ~]# </li></ul><ul><li>root@localhost ~]# </li></ul>読み込みました。
  14. 14. 反映されたところで、再度 ab します。 <ul><li>[root@localhost ~]# ab -n1 -c1 http://localhost/hoge.html </li></ul><ul><li>ry) </li></ul><ul><li>Concurrency Level: 1 </li></ul><ul><li>Time taken for tests: 0.14145 seconds </li></ul><ul><li>Complete requests: 1 </li></ul><ul><li>Failed requests: 0 </li></ul><ul><li>Write errors: 0 </li></ul><ul><li>Total transferred: 290 bytes </li></ul><ul><li>HTML transferred: 5 bytes </li></ul><ul><li>Requests per second: 70.70 [#/sec] (mean) </li></ul><ul><li>Time per request: 14.145 [ms] (mean) </li></ul><ul><li>Time per request: 14.145 [ms] (mean, across all concurrent requests) </li></ul><ul><li>Transfer rate: 0.00 [Kbytes/sec] received </li></ul><ul><li>ry) </li></ul>早くなった気がします。
  15. 15. 結果を比較してみます。 <ul><li>【 Before 】 </li></ul><ul><li>Concurrency Level: 1 </li></ul><ul><li>Time taken for tests: 0.759 seconds </li></ul><ul><li>Complete requests: 1 </li></ul><ul><li>Failed requests: 0 </li></ul><ul><li>Write errors: 0 </li></ul><ul><li>Total transferred: 236 bytes </li></ul><ul><li>HTML transferred: 5 bytes </li></ul><ul><li>Requests per second: 1317.52 [#/sec] (mean) </li></ul><ul><li>Time per request: 0.759 [ms] (mean) </li></ul><ul><li>Time per request: 0.759 [ms] (mean, across all concurrent requests) </li></ul><ul><li>Transfer rate: 0.00 [Kbytes/sec] received </li></ul>こっちが反映前
  16. 16. 結果を比較してみます。 <ul><li>【 After 】 </li></ul><ul><li>Concurrency Level: 1 </li></ul><ul><li>Time taken for tests: 0.14145 seconds </li></ul><ul><li>Complete requests: 1 </li></ul><ul><li>Failed requests: 0 </li></ul><ul><li>Write errors: 0 </li></ul><ul><li>Total transferred: 290 bytes </li></ul><ul><li>HTML transferred: 5 bytes </li></ul><ul><li>Requests per second: 70.70 [#/sec] (mean) </li></ul><ul><li>Time per request: 14.145 [ms] (mean) </li></ul><ul><li>Time per request: 14.145 [ms] (mean, across all concurrent requests) </li></ul><ul><li>Transfer rate: 0.00 [Kbytes/sec] received </li></ul>こっちが反映後
  17. 17. どうやら遅くなってしまったようです。 <ul><li>■ Requests per second ( 1 秒間に処理されたリクエスト数)では、 </li></ul><ul><li>Requests per second: 1317.52 [#/sec] (mean) </li></ul><ul><li>↓ </li></ul><ul><li>Requests per second: 70.70 [#/sec] (mean) </li></ul><ul><li>■ Time per request ( 1 アクセスの処理にかかった時間)では、 </li></ul><ul><li>Time per request: 0.759 [ms] (mean) </li></ul><ul><li>Time per request: 0.759 [ms] (mean, across all concurrent requests) </li></ul><ul><li>↓ </li></ul><ul><li>Time per request: 14.145 [ms] (mean) </li></ul><ul><li>Time per request: 14.145 [ms] (mean, across all concurrent requests) </li></ul>orz...
  18. 18. なんで遅くなったんだろう? <ul><li>Slashdot より </li></ul><ul><li>http://slashdot.jp/it/article.pl?sid=10/11/05/0053256 </li></ul><ul><li>下記のような作業を自動で行ってくれるとのこと。 </li></ul><ul><ul><li>Web ページのキャッシュ保持時間の変更 </li></ul></ul><ul><ul><li>ページ内に埋め込まれている CSS や JavaScript の外部ファイル化 </li></ul></ul><ul><ul><li>複数の CSS ファイルの連結 </li></ul></ul><ul><ul><li>サイズの小さい CSS や JavaScript ファイルをページ内に埋め込み </li></ul></ul><ul><ul><li>冗長なホワイトスペースの削除 </li></ul></ul><ul><ul><li>タグ内の冗長な属性の削除 </li></ul></ul><ul><ul><li>コメントの削除 </li></ul></ul><ul><ul><li>不要なクォート文字の削除 </li></ul></ul><ul><ul><li>CSS や JavaScript の minify </li></ul></ul>なるほど! hoge しか表示しないコンテンツじゃ意味ないのかな?
  19. 19. HTML 内で画像を読み込んでみます。 <ul><li>[root@localhost ~]# vim /var/www/html/hogehoge.html </li></ul><ul><li>[root@localhost ~]# cat /var/www/html/hogehoge.html </li></ul><ul><li><img src=&quot;./P1010999.JPG&quot;> </li></ul><ul><li><img src=&quot;./P1010999.JPG&quot;> </li></ul><ul><li><img src=&quot;./P1010999.JPG&quot;> </li></ul><ul><li><img src=&quot;./P1010999.JPG&quot;> </li></ul><ul><li><img src=&quot;./P1010999.JPG&quot;> </li></ul><ul><li><img src=&quot;./P1010999.JPG&quot;> </li></ul><ul><li><img src=&quot;./P1010999.JPG&quot;> </li></ul><ul><li><img src=&quot;./P1010999.JPG&quot;> </li></ul><ul><li>hogehoge </li></ul><ul><li>[root@localhost ~]# </li></ul><ul><li>[root@localhost ~]# </li></ul>同じ画像をひたすら表示させます。
  20. 20. ブラウザで見るとこんな感じ。 大丈夫だ、問題ない
  21. 21. では、 mod_pagespeed を無効にして、 <ul><li>[root@localhost ~]# mv /etc/httpd/conf.d/pagespeed.conf ~/ </li></ul><ul><li>[root@localhost ~]# service httpd reload </li></ul><ul><li>httpd を再読み込み中 : [ OK ] </li></ul>pagespped.conf をどかしてリロードします。
  22. 22. ab します <ul><li>[root@localhost ~]# ab -n1 -c1 http://localhost/hogehoge.html </li></ul><ul><li>ry ) </li></ul><ul><li>Concurrency Level: 1 </li></ul><ul><li>Time taken for tests: 0.796 seconds </li></ul><ul><li>Complete requests: 1 </li></ul><ul><li>Failed requests: 0 </li></ul><ul><li>Write errors: 0 </li></ul><ul><li>Total transferred: 660 bytes </li></ul><ul><li>HTML transferred: 425 bytes </li></ul><ul><li>Requests per second: 1256.28 [#/sec] (mean) </li></ul><ul><li>Time per request: 0.796 [ms] (mean) </li></ul><ul><li>Time per request: 0.796 [ms] (mean, across all concurrent requests) </li></ul><ul><li>Transfer rate: 0.00 [Kbytes/sec] received </li></ul><ul><li>ry ) </li></ul>さっきよりファイルがデカイみたいですね。
  23. 23. <ul><li>[root@localhost ~]# mv ~/pagespeed.conf /etc/httpd/conf.d/ </li></ul><ul><li>[root@localhost ~]# service httpd reload </li></ul><ul><li>httpd を再読み込み中 : [ OK ] </li></ul>続いて mod_pagespeed を有効にして、 pagespped.conf を戻してリロードします。
  24. 24. <ul><li>[root@localhost ~]# curl localhost/hogehoge.html </li></ul><ul><li><img src=&quot;./P1010999.JPG&quot;> </li></ul><ul><li><img src=&quot;./P1010999.JPG&quot;> </li></ul><ul><li><img src=&quot;./P1010999.JPG&quot;> </li></ul><ul><li><img src=&quot;./P1010999.JPG&quot;> </li></ul><ul><li><img src=&quot;./P1010999.JPG&quot;> </li></ul><ul><li><img src=&quot;./P1010999.JPG&quot;> </li></ul><ul><li><img src=&quot;./P1010999.JPG&quot;> </li></ul><ul><li><img src=&quot;./P1010999.JPG&quot;> </li></ul><ul><li>hogehoge </li></ul><ul><li>[root@localhost ~]# curl localhost/hogehoge.html </li></ul><ul><li><img src=&quot;http://localhost/ic.17e0cc19539a245f8b002bf95ee71a9c.150x100xP1010999,oJPG.jpg&quot;> </li></ul><ul><li><img src=&quot;http://localhost/ic.17e0cc19539a245f8b002bf95ee71a9c.150x100xP1010999,oJPG.jpg&quot;> </li></ul><ul><li><img src=&quot;http://localhost/ic.17e0cc19539a245f8b002bf95ee71a9c.150x100xP1010999,oJPG.jpg&quot;> </li></ul><ul><li><img src=&quot;http://localhost/ic.17e0cc19539a245f8b002bf95ee71a9c.150x100xP1010999,oJPG.jpg&quot;> </li></ul><ul><li><img src=&quot;http://localhost/ic.17e0cc19539a245f8b002bf95ee71a9c.150x100xP1010999,oJPG.jpg&quot;> </li></ul><ul><li><img src=&quot;http://localhost/ic.17e0cc19539a245f8b002bf95ee71a9c.150x100xP1010999,oJPG.jpg&quot;> </li></ul><ul><li><img src=&quot;http://localhost/ic.17e0cc19539a245f8b002bf95ee71a9c.150x100xP1010999,oJPG.jpg&quot;> </li></ul><ul><li><img src=&quot;http://localhost/ic.17e0cc19539a245f8b002bf95ee71a9c.150x100xP1010999,oJPG.jpg&quot;> </li></ul><ul><li>hogehoge </li></ul>ab の前にキャッシュされていることを確認します。 2 回目のアクセスからキャッシュされてるっぽいことが分かります。
  25. 25. <ul><li>[root@localhost ~]# curl localhost/hogehoge.html </li></ul><ul><li>ry) </li></ul><ul><li>Concurrency Level: 1 </li></ul><ul><li>Time taken for tests: 0.5713 seconds </li></ul><ul><li>Complete requests: 1 </li></ul><ul><li>Failed requests: 0 </li></ul><ul><li>Write errors: 0 </li></ul><ul><li>Total transferred: 714 bytes </li></ul><ul><li>HTML transferred: 425 bytes </li></ul><ul><li>Requests per second: 175.04 [#/sec] (mean) </li></ul><ul><li>Time per request: 5.713 [ms] (mean) </li></ul><ul><li>Time per request: 5.713 [ms] (mean, across all concurrent requests) </li></ul><ul><li>Transfer rate: 0.00 [Kbytes/sec] received </li></ul><ul><li>ry) </li></ul>では、 ab します。 今度こそ早くなった気がする。
  26. 26. もう一度結果を比較してみましょう。 <ul><li>【 Before 】 </li></ul><ul><li>Concurrency Level: 1 </li></ul><ul><li>Time taken for tests: 0.796 seconds </li></ul><ul><li>Complete requests: 1 </li></ul><ul><li>Failed requests: 0 </li></ul><ul><li>Write errors: 0 </li></ul><ul><li>Total transferred: 660 bytes </li></ul><ul><li>HTML transferred: 425 bytes </li></ul><ul><li>Requests per second: 1256.28 [#/sec] (mean) </li></ul><ul><li>Time per request: 0.796 [ms] (mean) </li></ul><ul><li>Time per request: 0.796 [ms] (mean, across all concurrent requests) </li></ul><ul><li>Transfer rate: 0.00 [Kbytes/sec] received </li></ul>こっちが反映前
  27. 27. もう一度結果を比較してみましょう。 <ul><li>【 After 】 </li></ul><ul><li>Concurrency Level: 1 </li></ul><ul><li>Time taken for tests: 0.5713 seconds </li></ul><ul><li>Complete requests: 1 </li></ul><ul><li>Failed requests: 0 </li></ul><ul><li>Write errors: 0 </li></ul><ul><li>Total transferred: 714 bytes </li></ul><ul><li>HTML transferred: 425 bytes </li></ul><ul><li>Requests per second: 175.04 [#/sec] (mean) </li></ul><ul><li>Time per request: 5.713 [ms] (mean) </li></ul><ul><li>Time per request: 5.713 [ms] (mean, across all concurrent requests) </li></ul><ul><li>Transfer rate: 0.00 [Kbytes/sec] received </li></ul>こっちが反映後
  28. 28. 今回も遅くなってしまったようです。 <ul><li>■ Requests per second ( 1 秒間に処理されたリクエスト数)では、 </li></ul><ul><li>Requests per second: 1256.28 [#/sec] (mean) </li></ul><ul><li>↓ </li></ul><ul><li>Requests per second: 175.04 [#/sec] (mean) </li></ul><ul><li>■ Time per request ( 1 アクセスの処理にかかった時間)では、 </li></ul><ul><li>Time per request: 0.796 [ms] (mean) </li></ul><ul><li>Time per request: 0.796 [ms] (mean, across all concurrent requests) </li></ul><ul><li>↓ </li></ul><ul><li>Time per request: 5.713 [ms] (mean) </li></ul><ul><li>Time per request: 5.713 [ms] (mean, across all concurrent requests) </li></ul>orz...
  29. 29. ググってみたところ、 同じ境遇の人がいました。 <ul><li>Re::Monologue より </li></ul><ul><li>http://blog.perl.tv/2010/11/vpsmod_pagespeed.html </li></ul><ul><li>単純計算で 19.96% 、約 20% の性能アップが認められました。対象ページは JavaScript なし、軽めの CSS と HTML のプレーン なもの。重めのページだとより実感できるかも。高速化のロジックから考えて、 firefox などのクライアント PC の方が効果が出ると考えると、それなり に体感できる速度アップが望めそうです。 FreeBSD 版もでないかな。 </li></ul><ul><li>追記 (2010/11/08) :コメント頂いて大きな勘違いに気づきました。動的に HTML の書き換えを行うため Requests per second の数値が低下しており、単純な HTTP 通信的には性能がダウンしています。この負荷と引き換えに UA に最適化された HTML が出力されるた め、クライアント PC での表示は速くなるはずです。上の CPU リソースが潤沢なマシンであれば効果的ですが、さくらの VPS のような環境で利用すると、 サーバ要因で逆に遅くなってしまう可能性もあるかもしれません。 </li></ul>なるほど。じゃあ ab じゃなくて、 jmeter なら速さが実感できるかも!
  30. 30. では、 JMeter で負荷を掛けてみます。 今回は単純に該当ページに 10 スレッドだけ負荷を掛けます。
  31. 31. 結果比較 全ての値で、優れていることが分かりました! 831.2343465 9.107468124 0 393 108 393 341 296 10 合計 831.2343465 9.107468124 0 393 108 393 341 296 10 After KB/sec スループット エラー 最大 最小 90% 中央 平均 リクエスト数                       301.9644975 3.271180896 0 3057 159 3057 368 574 10 合計 301.9644975 3.271180896 0 3057 159 3057 368 574 10 Before KB/sec スループット エラー 最大 最小 90% 中央 平均 リクエスト数  
  32. 32. まとめ <ul><li>サーバ側の負担はちょっとだけ高くなるようですが、サーバリソースにある程度余裕があるようであれば、導入してみる価値はあると思います。 </li></ul><ul><li>インストールもとても簡単に行えるので、みなさんも試してみてください。 </li></ul><ul><li>そして、試した結果を教えてください。 </li></ul>
  33. 33. ご静聴ありがとうございました。
  34. 34. 【追記】 @oranie さんから、エラーログすごくね?とツッコミをいただき、確認してみました。 <ul><li>[root@localhost ~]# tail /var/log/httpd/error_log </li></ul><ul><li>[Mon Dec 13 14:00:14 2010] [error] [mod_pagespeed 0.9.10.1-250] http://localhost/hogehoge.html:1: Reached end of document without finding <body> </li></ul><ul><li>[Mon Dec 13 14:00:15 2010] [error] [mod_pagespeed 0.9.10.1-250] http://localhost/hogehoge.html:1: Reached end of document without finding <body> </li></ul>確かになんか出てますね。

×