まつざきの技術メモ

エンジニアの私的な技術メモです。


コメントする

福岡JavaEE勉強会(第1回)を開催しました

福岡JavaEE勉強会(第1回)を開催しました。

ハンズオンの予定だったのですが、JavaEEの概要説明に時間を取り過ぎてしまったのと、
DBの準備に手間取ってしまい、コードを書く時間が取れませんでした。
準備が悪くてすんません><

今回使用したアプリのソースコードはこちらです。
ISUCON2というチューニングコンテストのアプリをJavaEE7のJAX-RS+Thymeleafで実装したものになります。

僕自身、業務でここ1年位JavaEE6(JSF)を使っているのですが、
以前からJAX-RSとThymeleafの組み合わせが気になっていたのと、
2013年6月にリリースされたJavaEE7をまだ試せていなかった事もあり、
JavaEE7のJAX-RS+Thymeleafで実装してみました。

■勉強会の準備をする時に参考にしたブログエントリーやスライド
Java EE 7 リリース 2013/06/12

Maven 入門

Tutorial: Using Thymeleaf
デザイナーさんたちとの協業を推し進める THYMELEAF
Thymeleaf の Document 読みながら Memo

JavaでIDEのアクセッサ生成よりlombokを使ったほうがいい理由

JAX-RSとかの話
Thymeleaf + JAX-RS + DomaをGlassFishで試してみる
JAX-RSとThymeleafの組み合わせをためしてみた
JAX-RSはHTML Webアプリケーションを開発するのに充分なフレームワークであるか?

[JPA2.0]キャッシュ
JPQL速かった!~JPAクエリ表現ごとのパフォーマンス比較 その2
JPQLを利用する際に行っていること
JPAのキャッシュを使ったアプリケーション高速化手法
Java EE 7のTransactionalアノテーションを試してみる

CDI関連情報まとめ
Java EE環境におけるCDIのデフォルト化
CDIを使う

Java EE関連の書籍あれこれ

 

主宰の@itoKami1123さん、ご参加頂いた皆様、
会場をご提供いただいたmswave福岡校様ありがとうございましたm(_ _)m

 

懇親会で「JavaFXとかPlayとかの勉強会はやらないの?」という話が出ました。
僕も勉強会したいので、福岡でやっている方いらっしゃいませんか?


コメントする

第6回 ITインフラ勉強会@福岡 (ISUCON夏期講習のAMIで、もくもくチューニング)を開催しました

第6回 ITインフラ勉強会@福岡 (ISUCON夏期講習のAMIで、もくもくチューニング)を開催しました。

まず始めに、

  • ISUCONって何?
  • ISUCON2のアプリや環境の説明
  • EC2とManagement Consoleの説明

などを行ったので、チューニング作業は自体は3.5時間くらいだったと思います。

その後、1時間ほど時間を取って、各自で作業した内容の発表や、
ISUCON2優勝チーム、準優勝チームのアプローチの紹介を行いました。

チューニンガソン出場経験者は数人いらっしゃいましたが、
ISUCON自体を今回の勉強会で初めて知ったと言う方が半分以上でした。
皆さん楽しんで頂けたようで何よりです。

今回の皆さんのチューニング内容は以下のようなものでした。
僕はPerlのアプリ改修をやってましたが、時間が全然足りませんでした><

  • MySQLのパラメータチューニング、インデックス作成
  • OSのパラメータチューニング
  • Perlのバージョンアップ
  • PSGI実装の入れ替えや、ワーカー数の調整
  • Varnish導入

3チームで作業しましたが、Varnishを導入したチームが一番パフォーマンスが上がり、
4400前後のチケット販売枚数だったと思います。他の2チームが1200前後でした。
(写真取るのを忘れたので、スコアは覚えてません。すみません・・・><)

実際には時間が限られてますので、個人的には以下の作業に絞って絞って作業すると良いのではないかと思っています。
アプリを改修しないと上位は狙えない気がします。

  • OSの不要デーモン停止
  • リバースプロキシを導入して負荷分散・静的ファイル配信(リソースに余裕があれば)
  • MySQLのスロークエリログと実行計画を確認して、パラメータチューニング、インデックス作成
  • キャッシュ(memcached, Redis, Varnishなど)
  • アプリの改修

作業自体のスピードアップは事前準備と練習あるのみですね。
スポーツと一緒で、普段やってない事、練習してない事は本番で出来るはずがありません。
最低でも、やる事と作業の流れや役割分担は大まかに考えておいた方がいいでしょう。

 

ご参加頂いた方のブログエントリーはこちらです。

肉まん始めました – 第6回ITインフラ勉強会@福岡に参加してきました。
【福岡】インフラ勉強会で ISUCON を疑似体験してきました。

2013/09/11追記
ITインフラ勉強会@福岡でISUCONの予習をしてきました

 

ご参加頂いたみなさま、AMIを公開して頂いたISUCON主催者のみなさま、ありがとうございました!

 

PS. 会社ではメンバーが集まらないので、一緒にISUCON3に参加して頂ける方を募集中です。よろしくお願いします (ToT)


コメントする

第9回JAWS-UG福岡セミナー + e-ZUKA Tech Night Vol.15で発表してきました

飯塚で行われた第9回JAWS-UG福岡セミナー + e-ZUKA Tech Night Vol.15に参加して来ました。
今回はJAWS-UG福岡と、飯塚のTech系勉強会e-ZUKA Tech Nightのコラボ開催です。

僕は、自社のERPサービスをデータセンターからAWSに移行した話を事例としてお話させて頂きました。
発表したスライドはこちらです。

インフラの構成図はこちらです

AWS以外のLTもたくさんあって、とても楽しい時間を過ごせました。
e-ZUKA Tech Nightの皆さん、ご参加の皆さんありがとうございました!


コメントする

VAIO Pro 11にDebianをインストール

VAIO Pro 11にDebianをインストールした時のメモ。

手順は以下のとおり。

  1. まずは普通にWheezyをインストール
  2. sidにアップデート
  3. 最新カーネル(3.11-rc2)をビルドしてインストール

 

Wheezyそのままだと無線LANデバイスを認識しませんでした。Intelの7260ってやつが付いてるみたいです。
このブログエントリーによると、最新カーネルの3.11だとモジュールが入っているみたいなので、
今日時点の最新(3.11-rc2)をインストールしました。
カーネルだけ最新にするのもなんかイヤなので、ついでにsidにしています。

上記リンクのブログエントリーでは、Arch Linuxをインストールしていますが、同じ手順でOKです。

  1. 最新firmwareのダウンロード
  2. 最新カーネルソースのダウンロード
  3. intel_pstate.cにパッチを当てる
  4. カーネルコンパイル
  5. 出来上がったカーネルヘッダーとカーネルイメージのdebパッケージをdpkgコマンドでインストール

 

カーネルのコンパイルとインストールはこのブログエントリーを参考にさせてもらいました。
カーネルをコンパイルする時にプロンプトが沢山出て来ましたが、全てデフォルトにしました。

 

2013/07/23追記
Ubuntu 13.10 (Saucy Salamander) Daily Build でも同じように
最新firmwareと最新カーネルをインストールすれば動きました。
Ubuntu 13.10はリリース時にはカーネルが3.11になるようです。


コメントする

GlassFishが付加したExpiresヘッダを上書きする

Apache + GlassFishの環境で稼働中のアプリで、
アプリ内のjsファイルを修正しても、内容がクライアントに反映されなかった件の対応メモ。

GlassFishが静的ファイルにExpiresヘッダを付加するのが原因だったので、
(webapp/resourcesに配置したファイルだけ?)
今回はその前段に配置しているApacheのmod_expiresモジュールで対応しました。

GlassFishで設定出来そうな気がしますが、設定項目を見つけきれませんでした。
ご存知の方がいらっしゃれば教えて下さい><

■バージョン
OS: Scientific Linux 6.3 x86_64
Apache: 2.2.15
GlassFish: 3.1.2.2

■手順
Apacheはyumでインストール済なので、
ビルドしたRPMファイルからモジュールファイルを取り出して差し替えました。

1. 依存パッケージをインストール
2. 作業ディレクトリを作成
3. SRPMをダウンロード
4. mod_expiresのパッチファイルを作成
5. specファイルを修正
6. .rpmmacrosファイルを作成
7. RPMファイルをビルド
8. RPMファイルを解凍して、モジュールファイル「mod_expires.so」を取り出す
9. モジュールファイルを差し替え

SRPMの作成は必ず一般ユーザで行なうようにしてください。

# yum install rpm-build apr-devel apr-util-devel pcre-devel

$ mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}

$ cd ~/rpmbuild/SRPMS

$ yumdownloader --source httpd

$ rpm -ivh httpd-2.2.15-28.sl6.src.rpm

$ cat << EOF > ~/rpmbuild/SOURCES/httpd-2.2.15-mod_expires.patch
--- httpd-2.2.17.orig/modules/metadata/mod_expires.c    2008-11-12 04:59:22.000000000 +0900
+++ httpd-2.2.17/modules/metadata/mod_expires.c 2011-01-20 11:47:03.000000000 +0900
@@ -472,6 +472,11 @@
         expiry = apr_table_get(r->headers_out, "Expires");
         t = r->headers_out;
     }
+    if ( apr_table_get(r->subprocess_env, "override_expires") ) {
+        expiry = NULL;
+        apr_table_unset(t,"Expires");
+        apr_table_unset(t,"Cache-Control");
+    }
     if (expiry == NULL) {
         /*
          * No expiration has been set, so we can apply any managed by
EOF

$ emacs ~/rpmbuild/SPECS/httpd.spec

$ cat << EOF > ~/.rpmmacros
%_topdir %(echo $HOME)/rpmbuild
%_builddir %{_topdir}/BUILD
%_rpmdir %{_topdir}/RPMS
%_sourcedir %{_topdir}/SOURCES
%_specdir %{_topdir}/SPECS
%_srcrpmdir %{_topdir}/SRPMS
%debug_package %{nil}
EOF

$ rpmbuild -ba ~/rpmbuild/SPECS/httpd.spec

$ cd ~/rpmbuild/RPMS/x86_64/

$ rpm2cpio httpd-2.2.15-28.sl6.x86_64.rpm | cpio -id

 

~/rpmbuild/SPECS/httpd.specとして保存するファイルはここに置いています。
変更箇所は以下です。

$ diff ~/rpmbuild/SPECS/httpd.spec{,.org}
105,108d104
<
< # my patch
< Patch212: httpd-2.2.15-mod_expires.patch
<
261,263d256
< # my patch
< %patch212 -p1 -b .mod_expires
<

 

モジュールのコピーはrootかsudoで行なってください。

# cp -i ~rpmbuilder/rpmbuild/RPMS/x86_64/usr/lib64/httpd/modules/mod_expires.so /usr/lib64/httpd/modules/mod_expires.so

 

あとは、httpd.confに以下のような設定をすればOKです。
この例では、画像のみ1ヶ月キャッシュして、
それ以外はすべてキャッシュしないようにしています。

SetEnv override_expires 1

<IfModule mod_expires.c>
    ExpiresActive on
    ExpiresByType image/png "access plus 1 months"
    ExpiresByType image/jpeg "access plus 1 months"
    ExpiresByType image/jpg "access plus 1 months"
    ExpiresByType image/gif "access plus 1 months"
    ExpiresDefault A0
</IfModule>

 

以下のブログエントリを参考にさせて頂きました。
ありがとうございますm(_ _)m

@kazeburoさん 
mod_expiresでExpiresとCache-Controlを上書きする
mod_expiresのパッチファイルは@kazeburoさんのそのまま使わせて頂いてます><

@tnmtさん 
いまさら聞けないrpmbuildことはじめ


コメントする

Fluentd meetup in Fukuokaを開催しました

Fluentd meetup in Fukuokaを開催して、LTして来ました!

Zusaarイベントページはこちら
Fluentd meetup in Fukuoka

開催のきっかけは@repeatedlyさんの、このツイート。
これに反応したのが、僕と@Spring_MTさんでした。

お二人の旅費を出して頂いたTreasure Data様。
会場をご提供頂いたOnRAMP様。
トークして頂いた@repeatedlyさん、@tagomorisさん、@Spring_MTさん。
LTして頂いた@snakemanさん。
会場やお店の手配などご協力頂いた@osacaz4さん、@kisさん。
そして、ご参加頂いた皆さん。
沢山の方々のご協力により、素晴らしいイベントにする事が出来ました。

本当にありがとうございました!!
ぜひまたやりたいですねー。

 

最後に発表頂いた方のスライドです。

@repeatedlyさんのスライドはこちら

 

@tagomorisさんのスライドはこちら

 

@Spring_MTさんのスライドはこちら

 

僕のスライドとChefのCookbookはこちら。
※READMEに環境構築時のメモを残してます。
matsumana / chef-repo

フォロー

新しい投稿をメールで受信しましょう。