030 OSC2009 Tokyo/Fall デモで学ぶGoogleApps勉強会、満員御礼!


こんばんは、id:EC-OneのAkiです。

本日のOSC2009 Tokyo/Fall 「デモで学ぶGoogleApps勉強会」、なんと満席での開催となりました!

ご参加頂いたみなさま、どうもありがとうございました。
ブース展示は明日も行っておりますので、お時間がありましたらぜひお越し下さい。







JavaRuby及び周辺のOSSを用いた開発に関して、企業があらゆる悩みごとを相談できるのが、ナレッジセンターの「レスキューサービス」です。
どんな相談でも親身に受け付けますので、レスキューサービスってなに?もっと知りたい!と思った方はお気軽に問い合わせ下さい。
問い合わせ画像リンク

029 10/30 OSC2009 Tokyo/Fall デモで学ぶGoogleApps勉強会の資料はこちら


こんにちは、id:EC-OneのAkiです。

今日はOSC2009 Tokyo/Fallに来ています!
午後1時から行われる「デモで学ぶGoogleApps勉強会 〜Google Secure Data Connectorでクラウドと社内システムを連携!〜」の資料を、こちらに置いておきますので、会場で見えにくかった方や、満席で参加できなかった方はぜひご覧下さい。

デモで学ぶGoogleApps勉強会のパワーポイント資料

Twitterでの感想つぶやきもお待ちしております

TwitterでもECOne_Akiというアカウントで、セミナーの実況中継や展示ブースの紹介をしています。

Twitterキャプチャ

セミナーにお越し頂いた皆さま、展示ブースでチョコを受け取った皆さま、Twitterでの感想つぶやきお待ちしております。
今後もどうぞよろしくお願いいたします!







JavaRuby及び周辺のOSSを用いた開発に関して、企業があらゆる悩みごとを相談できるのが、ナレッジセンターの「レスキューサービス」です。
どんな相談でも親身に受け付けますので、レスキューサービスってなに?もっと知りたい!と思った方はお気軽に問い合わせ下さい。
問い合わせ画像リンク

028 Rubyビジネス・コモンズが10/31(土)に「Rubyプログラミング基礎」と大規模分散データベース「hBase」の勉強会を開催!


こんにちは、id:EC-OneのAkiです。

今日は快晴!雨が降ったあとなので空気も清々しいですね。

最近はイベントの告知ばかりしているような気がしますが*1、今日は2009年10月31日(土)に福岡で開催される「Rubyビジネス・コモンズ」の大規模分散データベース「hBase」 イケテル・クラウド勉強会をご紹介します。
同日の午前中には、Ruby初心者に向けた「Rubyプログラミング基礎」も併せて開催されるそうです。こちらも楽しみですね。

以下は、Rubyビジネス・コモンズがメンバーに対して送っているメーリングリストからの引用です。(「自分もRBCのメンバーになって、こういった開催案内を受け取りたい」という場合はhttp://rubybizcommons.blogspot.com/2009/01/blog-post.htmlをご覧ください)
参加者を募集中ですので、お気軽にお申し込みください。

開催告知です。

前回、分散処理システム「Hadoop MapReduce」について学びましたが、
いよいよ今回は、分散データベース「hBase」です。
hBaseは、大規模なデータになってもパフォーマンス劣化がおきにくく、
さらにhBaseを構成する複数のサーバーの一部がダウンしても、全体障害に発生しにくい構造をもっています。
このため、次世代のデータベースとしても大変注目されている技術です。

MapReduceと比較すると、hBaseに関する日本語の情報は少なく、
理解には英文資料を読み込むことが必要でした。

この技術を、RBCでは、いつもの勉強会のように、直感的に理解しやすく学んでいきます。

hBaseプロジェクトでは、JRubyを使うことで、
他の言語では味わえないような幅広い可能性について示唆されています。

今回は、こうしたテクニックを使い、わかりやすく理解しやすい勉強会を実施します。
クラウドを構成する技術のなかで、最も「学ぶべき」技術です。

是非、多くのみなさんが、この機会を次のステップアップに利用されることを期待します。


また今回は、Ruby初心者のために、
午前10:00〜12:00に同じ場所で「Rubyプログラミング基礎」を行います。
興味のある方は、こちらにも是非、いらしてください。



開催概要

1.日時
 2009年10月31日(土)13時〜18時
(「Rubyプログラミング基礎」は、10時〜12時です。)

2.場所
 株式会社イーシー・ワン 九州事業部
 福岡市早良区百道浜2−1−22 SRP8階
 tel. 092-985-0093


3.内容
(1)Key Value Storeについて考えよう
(2)hBase Shellで、使ってみよう
 ーhBase Shellは、hBaseプロジェクトで開発されたツールで、JRubyで開発されています。
 ーこれを利用すると、一行一行コマンドをうち、hBaseの特徴を掴んでいくことができます。
(3)Rubyで使ってみよう
 ー同じ事を、Rubyのコマンドラインツール「irb」を使って試してみます。
(4)Ruby on Railsに組み込もう
 ー学んだ知識を元に、Ruby on Railsで開発したプロジェクトに組み込んで、
  Webアプリケーションでの利用を実現してみます。


4.持ってくるもの
virtualBoxを導入したコンピュータをお持ちください。
virtualBoxの導入は、以下のリンクから行ってください。
http://dlc.sun.com/virtualbox/vboxdownload.html

*勉強会では、virtualBoxの仮想環境を利用して、事前に準備した開発環境を配布します。


5.参加費:無料


6.申し込み方法
以下のサイトから、お申し込みください。
http://form1.fc2.com/form/?id=477306

誰かが先生で、誰かが生徒という訳ではなく、集まった人たちとの交流によって、みんながインスパイアされ、何かをつかみ取ることができる。それがRubyビジネス・コモンズのイケテル勉強会です。
特に午前中の「Rubyプログラミング基礎」は、環境構築でつまづいてしまった人や、何から学びはじめたらいいのか分からない人にオススメの勉強会です。普段は企画をされている方、営業をされている方、学生の方など、色んな分野で「Rubyってなんだろう?」と感じている人に参加してもらえればと思います。







JavaRuby及び周辺のOSSを用いた開発に関して、企業があらゆる悩みごとを相談できるのが、ナレッジセンターの「レスキューサービス」です。
どんな相談でも親身に受け付けますので、レスキューサービスってなに?もっと知りたい!と思った方はお気軽に問い合わせ下さい。
問い合わせ画像リンク

027 ご注文ありがとうございます。ご一緒にVelocityはいかがですか?


こんにちは、id:EC-OneのAkiです。

EC-Oneイーシー・ワン)で提供している製品のひとつに、ポータルサイト製品*1があります。この製品は、各種社内システムへのシングルサインオンや、Sun Microsystemsが提供するSun Java System Identity Manager*2と連携したアカウント管理が行えることが特徴です。
この製品では、迅速な画面設計を行うため、Apache Velocityというテンプレートエンジンを多用しており...

うーん、ちょっと硬い書き出しになってしまいましたね。
今日はこのApache Velocityの特徴をご紹介しつつ、「Velocityいいよー」というお話がしたいと思います。

Apache Velocityを、通常の画面作成で作成するJSPと比較した場合、以下の4つが特徴として挙げられます。

1. 記述が圧倒的にかんたん

JSP(というよりStruts2)でbeanの中を表示するために必要な記述は...

 <%@ taglib prefix="s" uri="/struts-tags" %>
 <s:property value="guest.name" />様、ようこそ!

となりますが、これがVelocityなら...

 ${guest.name}様、ようこそ!

あぁ、63文字も短縮できます!*3

2. 拡張もかんたん

次に、JSPで新しいタグを作るとなると...

  • TLDファイルという、複雑な長いXMLファイルを書き
  • doStartTagなどのメソッドなどをオーバーライドした専用クラスを作成
    (Strusなら簡単に記述できますが、TDKファイルは健在です)

という手順が必要ですが、Velocityならもっと簡単に作れます。例えば「今日の日付を出す」タグを作るとすると...

  • こんな感じのクラスを作成して
 public class DateTag {
  public String printDate() { new java.util.Date().toString() }
 }
  • こんな感じのXMLを書く
   <tool>
     <key>datetag</key>
     <scope>application</scope>
     <class>DateTag</class>
   </tool>

たったこれだけです。
使うときは、「$datetag.printDate()」を記述するだけ。簡単!って思いませんか?*4

3. (それなりに)枯れた技術である

"google:Apache Velocity"で検索していただくと分かると思いますが、2004年・2005年ごろの記事が非常に多く引っかかってきます。Velocityはその頃から使われているライブラリで、過去の利用事例も多いですので、バグに悩まされることは少ないと思います。
ちなみに、今も開発が続行されており、OSSでありがちなメンテナンスが止まった... という事態も今のところは大丈夫です。

4. メールテンプレートにも使える

もうひとつ、Velocity のいいところは HTML出力以外にも色んな用途で使えることです。社内でもプロジェクトによってはメール本文のテンプレートや、ソースコードの自動生成で便利に使っています。というより、こっちの用途で使われるほうがメインですね。

今回は、ポータル製品に絡んでApache Velocityを取り上げましたが、「Mayaa」や「FreeMarker」など、他にもたくさんの素晴らしいテンプレートエンジンが世の中に存在します。

「これまで、JSPしか使ったことないよー」という方も意外と多いらしいです。これを機にApache Velocityを使ってみてはいかがでしょうか?

今回はよく知られた技術を紹介しましたが、このような技術選定においても、レスキューサービスはお役に立ちます。「○○という処理を実現するには、どんな技術を使えばいいのだろう?」というご相談には、各種事例を交えて具体的な技術をご紹介することが可能です。お困りの際は、ぜひナレッジセンターにご相談ください。








JavaRuby及び周辺のOSSを用いた開発に関して、企業があらゆる悩みごとを相談できるのが、ナレッジセンターの「レスキューサービス」です。
どんな相談でも親身に受け付けますので、レスキューサービスってなに?もっと知りたい!と思った方はお気軽に問い合わせ下さい。
問い合わせ画像リンク

*1:導入事例はこちら
http://www.ec-one.com/product/example_portal.html

*2:社内や学校内に分散しているシステム全体でIDの管理を行う製品
http://www.ec-one.com/product/id.html

*3:taglibなんて書くのは最初だけでしょ?というつっこみは心の中にしまって下さい。あとEL式(Expression Language)のことも...

*4:タグなんて、普通1から作らないでしょ?というつっこみも心の中にしまって下さい。これも、EL式で簡単にできますか...

026 Rubyビジネス・コモンズが10/17(土)にイケテルビジネス勉強会クラウドスペシャルを開催!


こんにちは、id:EC-OneのAkiです。

台風が近づいて、段々雨足が強くなってきましたね...
みなさん、今日は電車が止まらないうちに気をつけてお帰り下さい!

さて、このブログでも過去に何度かご紹介をしていますが、EC-Oneイーシー・ワン)はJavaRubyのコミュニティに対して支援を行っており、その中のひとつに「Rubyビジネス・コモンズ」があります。(RBCという名前でご存知の方もいらっしゃるかと思います)
そのRubyビジネス・コモンズが、2009年10月17日(土)に東京で「イケテルビジネス勉強会クラウドスペシャル」を開催することになりました。

以下は、Rubyビジネス・コモンズがメンバーに対して送っているメーリングリストからの引用です。(「自分もRBCのメンバーになって、こういった開催案内を受け取りたい」という場合はhttp://rubybizcommons.blogspot.com/2009/01/blog-post.htmlをご覧ください)
参加者を募集中ですので、お気軽にお申し込みください。

お待たせしました。東京での勉強会告知です。
テーマは「クラウド・コンピューティング」で、ビジネス勉強会を行います。

「クラウド」は、様々な意味で語られていますが、
今回はGoogleを支える技術として話題になった「Map Reduce」について学び、
ビジネスとしての活用を考えてみます。

MapReduceは、沢山のコンピュータを並列的に利用することで、
大量のデータを短期間に処理することを可能とした技術です。

難しそうに見える技術かもしれませんが、
プログラミングの経験がなくても理解することはできます。

勉強会では、ゲームと解説を通じてMapReduceの原理について理解していただきます。
そしてこの仕組みを活用したビジネスを、ロールプレイを通じて考えていただきます。

経営者でも、マーケティング、企画のかたでも。コンピュータの知識はいりません。

時として、革新的な技術は、革新的なビジネスと裏表の関係にあります。

技術を理解して、ビジネスを考えてみましょう。
みなさんの、明日の糸口が、ここにあるかもしれません。


開催概要

1.日時:10月17日(土)13時〜18時

2.場所:株式会社イーシー・ワン 本社会議室(品川に移転しましたので、ご注意ください)
     東京都港区港南1-6-34東京日産港ビル8階
     tel. 03-6710-1221

3.持ってくるもの:筆記用具(サインペン)、夢、情熱

4.費用:無料

5.応募方法:以下のサイトから申し込みをしてください。

  http://form1.fc2.com/form/?id=472011

誰かが先生で、誰かが生徒という訳ではなく、集まった人たちとの交流によって、みんながインスパイアされ、何かをつかみ取ることができる。それがRubyビジネス・コモンズのイケテルビジネス勉強会です。
専門的な技術の知識やノートパソコンなどは必要ありません。企画や運用をされている方、営業をされている方、学生の方など、色んな分野に居ながら「クラウドをちょこっと知ってみたい」人に参加してもらえればと思います。
人気のビジネス勉強会、特に東京ではあっという間に満席になってしまいます。早めの申込をオススメします!

なお会場は品川にあるEC-Oneの移転先オフィスですので、お間違えなく!








JavaRuby及び周辺のOSSを用いた開発に関して、企業があらゆる悩みごとを相談できるのが、ナレッジセンターの「レスキューサービス」です。
どんな相談でも親身に受け付けますので、レスキューサービスってなに?もっと知りたい!と思った方はお気軽に問い合わせ下さい。
問い合わせ画像リンク

025 10/30のOSC2009 Tokyo/Fallにて「デモで学ぶGoogleApps勉強会」を開催!


こんにちは、id:EC-OneのAkiです。

吹く風もすっかり秋めいてきましたね。コンビニの棚にも栗やさつま芋を使ったお菓子が増えてきて、こんな手近なところでも秋が楽しめるんだな、と嬉しくなりました。
さて今回は10月30日、31日に開催されるオープンソースカンファレンスで、EC-Oneイーシー・ワン)がGoogleApps勉強会を開催しますので、その内容を少しだけご紹介したいと思います。

デモで学ぶGoogleApps勉強会 〜Google Secure Data Connectorでクラウドと社内システムを連携!〜

日時 : 2009年10月30日(金) 13:00 - 13:45
場所 : 日本工学院専門学校 蒲田キャンパス 12号館 (JR蒲田駅・西口より徒歩3分)

講師:中澤 杉夫(株式会社イーシー・ワン 開発統括本部 アーキテクト部 部長)
担当:株式会社イーシー・ワン
対象者:GoogleAppsや、Google Secure Data Connector、そしてGoogleAppEngine for Javaなどに興味のある方ならどなたでも


Google Secure Data Connector」を使ったデモを見ながら、企業におけるGoogleAppsの活用法について学びませんか?Googleが提供するクラウドサービスから、ファイアウォールの内側にあるリソースへ安全にアクセスする方法をご紹介します!

デモで学ぶGoogleApps勉強会 〜Google Secure Data Connectorでクラウドと社内システムを連携!〜

オープンソースカンファレンス2009 Tokyo/Fallのサイトの左上あたりから、事前登録が出来ます。
登録開始から2日の間に、既に定員の半分ほどのお申込を頂いていますので、セミナーはあっという間に満員になってしまいそうです。どうぞお早めのご登録を!

OSC2009 Tokyo/Fallについての詳細は、以下のお知らせをご覧下さい。

====================================================================
「OSC2009 Tokyo/Fall」 セミナー参加登録 受付開始のお知らせ
====================================================================

セミナー参加登録の受付を開始いたしました。

http://www.ospn.jp/osc2009-fall/

各開催、多くの方にご参加いただいております。
セミナー参加登録もすぐに満員となってしまいますので、お早めのご登録を
おすすめいたします。

会期中、セミナーが目白押し、展示ブースも多数あります。
無料でご参加いただけます。
OSS初心者から上級者まで、よりわかりやすく、楽しめる企画が満載です。

──────────────────────────────────
□■□ --【オープンソースカンファレンス2009 Tokyo/Fall】-- □■□

セミナー参加登録受付中!⇒⇒⇒ http://www.ospn.jp/osc2009-fall/

◆日時:10月30日(金)、31日(土)10:00-17:00
◆入場:無料
◆会場:日本工学院専門学校 蒲田キャンパス 12号館 (JR蒲田駅徒歩3分)
◆主催:オープンソースカンファレンス実行委員会
◆共催:日本工学院専門学校
◆内容:オープンソース関連の最新情報提供 (展示・セミナー)
──────────────────────────────────

2004年から始まり、今回で40回目を迎える日本最大級のオープンソース総合
イベント「オープンソースカンファレンス」。

オープンソース・IT 技術に関するイベントとして、多彩なセミナーと、
オープンソースに触れられる展示で旬の最新情報をお届けします。
セミナー・ブースでの展示は、全て無料でご参加いただけます。

オープンソース最前線で活躍する人たちと気軽に出会えるのもOSCならではの
魅力!
ここでしか得られない貴重な情報や人脈、ビジネスチャンスを探しに、ぜひ
ご来場ください。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
◆事前登録について

ご希望のセミナーについては、お早めに事前登録をお願いします。

左側の「セミナー事前受付登録はこちら!」より、登録を行ってください。

★登録はこちらから → http://www.ospn.jp/osc2009-fall/

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
セミナータイムテーブルはこちら↓

30日(金)
http://www.ospn.jp/osc2009-fall/modules/eventrsv/?id=1&noform=1

31日(土)
http://www.ospn.jp/osc2009-fall/modules/eventrsv/?id=2&noform=1


展示一覧はこちら↓

http://www.ospn.jp/osc2009-fall/modules/xfsection/article.php?articleid=1

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
オープンソースカンファレンス2009 Tokyo/Fall の注目セミナー!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

30日(金)
『SLES11で構築するXen仮想化+HAクラスタ入門』
http://www.ospn.jp/osc2009-fall/modules/eguide/event.php?eid=55

オープンソース技術者のためのAMD最新テクノロジーアップデート』
http://www.ospn.jp/osc2009-fall/modules/eguide/event.php?eid=3

『eZ Publish ディスクール +DEMO! -- エンタープライズWebCMSに求められる機能とその実現 』
http://www.ospn.jp/osc2009-fall/modules/eguide/event.php?eid=61

『「互換性の高いWebコンテンツ作成を支援するツール」および「コミュニティの翻訳作業を支援するツール」のご紹介』
http://www.ospn.jp/osc2009-fall/modules/eguide/event.php?eid=71

『28TBもの大容量のストレージを実現!〜DRBDによるエンタープライズストレージ(iSCSI)のクラスタ化〜』
http://www.ospn.jp/osc2009-fall/modules/eguide/event.php?eid=23

『デモで学ぶGoogleApps勉強会 〜Google Secure Data Connectorでクラウドと社内システムを連携!〜』
http://www.ospn.jp/osc2009-fall/modules/eguide/event.php?eid=50

『これからのOSS人材育成 〜コミュニティと企業と技術者と、+教育機関〜』
http://www.ospn.jp/osc2009-fall/modules/eguide/event.php?eid=29

『自宅から楽々遠隔操作、ICE-Linuxオープンソースで実現! 〜死活監視、イメージバックアップのノウハウを伝授〜』
http://www.ospn.jp/osc2009-fall/modules/eguide/event.php?eid=69

『「かんたんOSS」とJBossで構築するアプリケーションについて』
http://www.ospn.jp/osc2009-fall/modules/eguide/event.php?eid=76

『「Linuxサーバー構築標準教科書」勉強のコツ、教えます!』
http://www.ospn.jp/osc2009-fall/modules/eguide/event.php?eid=25

『〜いろいろあったりもしたけれど、私はげんきです〜』
http://www.ospn.jp/osc2009-fall/modules/eguide/event.php?eid=75

『Web技術の現状と将来』
http://www.ospn.jp/osc2009-fall/modules/eguide/event.php?eid=19

IPA支援の未踏クリエータが開発した、3つのユニークなオープンソース
http://www.ospn.jp/osc2009-fall/modules/eguide/event.php?eid=68

PostgreSQL 信頼性・性能向上ソリューションの紹介』
http://www.ospn.jp/osc2009-fall/modules/eguide/event.php?eid=46

31日(土)

『システム監視の画期的コストダウン、今、新概念のオープンソースZABBIX/ZABICOMが課題を解決』
http://www.ospn.jp/osc2009-fall/modules/eguide/event.php?eid=8

オープンソースの企業情報ポータル『Liferay』入門』
http://www.ospn.jp/osc2009-fall/modules/eguide/event.php?eid=53

Eclipse日本語化活動の報告』
http://www.ospn.jp/osc2009-fall/modules/eguide/event.php?eid=42

『【2本立て】オープンソース入門 / Moblin最新動向 〜 オープンソース GUIライブラリ「Clutter」〜』
http://www.ospn.jp/osc2009-fall/modules/eguide/event.php?eid=52

VPSホスティング徹底比較』
http://www.ospn.jp/osc2009-fall/modules/eguide/event.php?eid=2

Silverlight 3ではじめるRIAとオープンソースによる拡張』
http://www.ospn.jp/osc2009-fall/modules/eguide/event.php?eid=65

『jus研究会東京大会「オープンソースまつりは何を残したのか?」』
http://www.ospn.jp/osc2009-fall/modules/eguide/event.php?eid=62

『Web開発者に贈る昨今のPython事情』
http://www.ospn.jp/osc2009-fall/modules/eguide/event.php?eid=70

                                                                                                                                        • -

セミナータイムテーブルはこちら↓

30日(金)
http://www.ospn.jp/osc2009-fall/modules/eventrsv/?id=1&noform=1

31日(土)
http://www.ospn.jp/osc2009-fall/modules/eventrsv/?id=2&noform=1


展示一覧はこちら↓

http://www.ospn.jp/osc2009-fall/modules/xfsection/article.php?articleid=1

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

▼来場者プレゼント

ご来場いただき、オープンソースに関する意識調査アンケートにご協力いた
だいた方には『くじ引き』にてすてきな景品が当たるチャンス!
http://www.ospn.jp/osc2009-fall/ ※最下部に景品画像掲載中!

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
このメールは、転送、転載自由です。

====================================================================
問い合わせ先:オープンソースカンファレンス事務局 (OSC2009@Begi.net)
====================================================================

オープンソースのコミュニティが一堂に会し、魅力的なセミナーがたくさん開催される、東京では半年に一度のイベントです。お時間のある方はどうぞお越し下さい。
事前登録はオープンソースカンファレンス2009 Tokyo/Fallからどうぞ!








JavaRuby及び周辺のOSSを用いた開発に関して、企業があらゆる悩みごとを相談できるのが、ナレッジセンターの「レスキューサービス」です。
どんな相談でも親身に受け付けますので、レスキューサービスってなに?もっと知りたい!と思った方はお気軽に問い合わせ下さい。
問い合わせ画像リンク

024 Apache JMeterの計測仕様を変更したら1.6倍くらいスループットが上がった


こんにちは、id:EC-OneのAkiです。

このところ、日によってすばらしい秋晴れの空を見ることが多く、それをより楽しむために、会社の裏にある川に沿った遊歩道を通って出勤しています。
ここは昼休みにはその辺のベンチが満席になる程の賑わいですが、さすがに朝は誰もいなくて爽やか... と思ったら、一人だけタバコを吸っている人が!

...と思ったら、弊社のM取締役でした。


さて、今回は社内のSNSで話題になっていたApache JMeterの計測仕様に関するお話です。

Apache JMeterのイケてない計測仕様?!

JavaアプリケーションやWebアプリケーションの性能測定するためのストレスツール、Apache JMeterはご存知ですか?

Apache JMeterロゴマーク

ウェブサイトの性能測定にこのJMeter(バージョンは2.3.4)を使ってみたところ、少しイケてない動作を見つけました。

あるECサイトにかかるストレスとスループットの測定のために、HTTPサンプラーの「すべてのイメージとアプレットを繰り返しダウンロードする」という機能を使って、ページとページ内の画像やCSS丸ごとを1ページビュー(PV)としてログインから商品購入までのシナリオを流しているのですが、なんだかすごく遅いんです。
商品画面を1ページ表示するのに1分以上かかったりすることがあります。

サーバのアクセスログをみながら原因を探していると、JMeterがページ内の画像やCSSをダウンロードしている部分に時間がかかっていることが判明しました。
画像なんかはまとめてファイルを取得すればいいのに、1個ずつダウンロード完了してから次のファイルをダウンロードしにいっているようです。

そこでソースコード修正したら1.6倍くらいスループットがあがりました。
以下、修正した部分を公開しますが、自社のサーバに負荷をかけてテストをするのが目的で修正したソースですので、その点をご了承ください。

JMeterのソースを3箇所修正してみたら...

修正したのは「jakarta-jmeter-2.3.4_src.zip」の、以下のファイルです。

jakarta-jmeter-2.3.4_src\src\protocol\http\org\apache\jmeter\protocol\http\sampler\HTTPSamplerBase.java

Java5.0から導入されたExecutors.newCachedThreadPool()使って一気に複数スレッドで取得するようにしました。

変更箇所1 - 先頭に以下のimportを追加*1
import java.util.concurrent.*;
import java.util.*;
変更箇所2 - 1110行目あたりに以下のstaticメンバを追加
    // スレッドキャッシュはJMeterのスレッドグループ内でそれぞれ生成
    private static ThreadLocal executorServiceThreadCache = new ThreadLocal() {
            protected Object initialValue() {
                return Executors.newCachedThreadPool();
            }
    	};
変更箇所3 - 1172〜1203行目のwhileループを削除し、代わりに以下を記述
            // 画像などのリソースファイルは複数スレッドで一度に取得
            List<Callable<HTTPSampleResult>> downloadTaskList = new ArrayList<Callable<HTTPSampleResult>>();
            while (urls.hasNext()) {
                Object binURL = urls.next();
                try {
                    URL url = (URL) binURL;
                    if (url == null) {
                        log.warn("Null URL detected (should not happen)");
                    } else {
                        String urlstr = url.toString();
                        String urlStrEnc = encodeSpaces(urlstr);
                        if (!urlstr.equals(urlStrEnc)) { // There were some spaces in the URL
                            try {
                                url = new URL(urlStrEnc);
                            } catch (MalformedURLException e) {
                                res.addSubResult(errorResult(new Exception(urlStrEnc + " is not a correct URI"), res));
                                res.setSuccessful(false);
                                continue;
                            }
                        }
                        // I don't think localMatcher can be null here, but check just in case
                        if (pattern != null && localMatcher != null && !localMatcher.matches(urlStrEnc, pattern)) {
                            continue; // we have a pattern and the URL does not match, so skip it
                        }

                        final int fframeDepth = frameDepth;
                        final URL furl = url;

                        Callable<HTTPSampleResult> callable = new Callable<HTTPSampleResult>() {
                            public HTTPSampleResult call() throws Exception {
                                return sample(furl, GET, false, fframeDepth + 1);
                            }
                        };
                        downloadTaskList.add(callable);
                    }
                } catch (ClassCastException e) {
                    res.addSubResult(errorResult(new Exception(binURL + " is not a correct URI"), res));
                    res.setSuccessful(false);
                    continue;
                }
            }
            try {
                ExecutorService executorService = (ExecutorService) executorServiceThreadCache.get();
                List<Future<HTTPSampleResult>> futureList = executorService.invokeAll(downloadTaskList);
                for (Future<HTTPSampleResult> future : futureList) {
                    try {
                        HTTPSampleResult binRes = future.get();
                        res.addSubResult(binRes);
                        res.setSuccessful(res.isSuccessful() && binRes.isSuccessful());
                    } catch (ExecutionException ee) {
                        res.addSubResult(errorResult(new Exception(" is not a correct URI"), res));
                        res.setSuccessful(false);
                    }
                }
            } catch (InterruptedException e) {
                res.addSubResult(errorResult(new Exception(" is not a correct URI"), res));
                res.setSuccessful(false);
            }

HTTP Cache Manager使用時の注意点

またJMeterを使うと同時に、HTTP Cache Managerを使ってコンテンツキャッシュのエミュレーションを行っているという場合には注意が必要です。
内部でThreadLocalを使っているので、新しいスレッドの中で動作させるとJMeterのスレッドグループのデータと分離されてしまうようです。
その場合には、org.apache.jmeter.protocol.http.control.CacheManagerの203行目くらいにあるThreadLocal宣言をInheritableThreadLocalに変更しないといけません。
あと、InheritableThreadLocalにすることでスレッドセーフではなくなるので、setCacheメソッドやclearCacheメソッドにはsynchronizedをつけた方がいいかも知れません。

jakarta-jmeter-2.3.4_src\src\protocol\http\org\apache\jmeter\protocol\http\control\CacheManager.java

の変更点は以下の通りです。

変更点1 - 203行目の「threadCache = new ThreadLocal(){」を以下に変更
        threadCache = new InheritableThreadLocal() {
変更点2 - 205行目の「return new HashMap();」を以下に変更
                return java.util.Collections.synchronizedMap(new HashMap());

これでスループットは1.6倍くらいに上がりますが...

今回書いたソースコードは、1クライアントが1サーバに対して張る接続数を無限にしています。
しかし本物のブラウザだったら「持続的な接続を2つ張る」等が多いでしょうから、あまり本物のブラウザを正確に模しているとは言えないですね。(もとのJMeterのソースは「持続的な接続を1つ」だったようですが...?)
RFCでは「HTTP/1.1では持続的な接続は2までにすべき」と書かれていて、「1クライアントが1サーバにかける負担はあまり高くすべきでない」という考えですが、今回は対象が自社のサーバで、敢えて負荷をかけることでテストをすることが目的ですので上記のソースとしています。それ以外の目的で利用することは以下のような理由であまりお勧めしません。

http://neta.ywcafe.net/000691.html
HTTP/1.1 の同時接続数について - daily dayflower
狐の王国 最大接続数を増やして速くなったと喜ぶ人々、再び


EC-Oneイーシー・ワン)のSNSはこんなニッチな(?)話題で盛り上がったりしています。


ナレッジセンターでは、Apache JMeterのような各種開発ツールについてのご質問、「品質管理の取り組みとしてテストを実施したいが、何から始めればよいのか分からない」といったご相談にもお応えしています。
トライアルで質問を無料で受け付けるキャンペーンも実施しておりますので、お気軽にお問い合わせ下さい!







JavaRuby及び周辺のOSSを用いた開発に関して、企業があらゆる悩みごとを相談できるのが、ナレッジセンターの「レスキューサービス」です。
どんな相談でも親身に受け付けますので、レスキューサービスってなに?もっと知りたい!と思った方はお気軽に問い合わせ下さい。
問い合わせ画像リンク

*1:ちょっと横着して*を使っちゃってます...