きぬろぐ
antでのProxy設定メモ
投稿者: kinusati, カテゴリー: Java
Proxy配下で直接外部に接続できない環境下でantを利用してjarのダウンロードを行うためのメモ。
jmeterのソースファイルをビルドする際にant download_jarsが通るようになりました。楽ちん楽ちん。
Javaの逆コンパイラ “jad”
投稿者: kinusati, カテゴリー: Java
以前作成したJARファイルの中身が待ったくわからなかったのでjadを利用してclassファイルから逆コンパイルしたのですが、あまりの簡単さ、およびソースコードのきれいさにびっくりしました。こんな便利なツールが普通に使えるって感動ですな。と今更ですが。。。
JADについては以下のページがよくまとまっています。
jmap/jhatについて
投稿者: kinusati, カテゴリー: Java
Javaでメモリリークを調査するため、hprofを利用してメモリプロファイルを行うことがある。
hprofはJVMの起動オプションを指定してプロファイルをとる代物であるが、若干もさっとするし、何よりよく落ちる・・・Tomcatを起動していたらTomcatもろとも道連れになり実用に耐えません・・・
HPROF ERROR: Cannot allocate malloc memory [hprof_util.c:160] HPROF TERMINATED PROCESS
これでは使い物にならんと思って調べていたら、jmapというツールが存在することを発見。jmapはJVMのPIDを指定することでヒープデータを取得することが可能なツール。これを使えば↑の用にhprofが落ちて困ることは回避可能となる。jmapはJDKに付属している(JREには付属していない)。以下使い方。
# jmap -dump:format=b,file=<ダンプファイル> <pid>
heapダンプを取得後は、jhatで解析。jhatについては「Java SE 6完全攻略」 第5回 プロファイラ hprofとよき相棒 jhatの説明が詳しいので割愛するが、heapダンプサイズが大きい場合、java.lang.OutOfMemoryError: Java heap spaceが出ます。。heapサイズを調整して起動すればいいんですけどね。
# jhat -J-Xmx1024m <ダンプファイル>
なれてくるとJavaって便利ですね。
Struts2でcodebehindからConventionに変更
投稿者: kinusati, カテゴリー: Java
Struts 2.1.8でcodebehindを利用してコードを書いていたのだが、Action評価後にリダイレクトさせるやり方がわからなかった。
どのページを見ても出来るようなことは書いてますが、どうやってもうまくいかない・・。
理由は結局わからなかったのですが、調査していて気がついたのは「Struts 2.1系からcodebehindプラグインはdeprecate」ですという事実。
これはまずいと思って、Conventionプラグインを利用する用に変更しました。変更方法はこのページによくまとまっています。
一番注意が必要な点は「Action名からリクエストに変換するルールが異なる」と言うこと。結局JSP側も修正しましたよ。ふぅ。
Previously in Codebehind: Given an action named AnExampleAction, a request to /anExample -> AnExampleAction.execute() -> > anExample-index.ftl Now in Convention: Given an action named AnExampleAction, a request to /an-example -> AnExampleAction.execute() -> an-example-index.ftl
Javaのheap設定&調査コマンドメモ
投稿者: kinusati, カテゴリー: Java
コマンドメモです。
-Xrunhprof:heap=sites -verbose:gc -XX:+PrintGCDetails -XX:-PrintTenuringDistribution -XX:+PrintHeapAtGC -Xms1024m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=128m
Hibernateが難しい
投稿者: kinusati, カテゴリー: Java
Hibernate + Struts2を利用してアプリを書いているのですが、原因不明なことで詰まることが多い。
Hibernateの動きを正しく理解していないことがどうやら原因のようだ。
ここをみて、目から鱗。ちゃんと調べないとだめだという典型例でした・・
JVMに指定するオプション
投稿者: kinusati, カテゴリー: Java
とりあえずのメモ。
メモリの利用状況を調査するためにJVMに以下のオプションを指定する。
“-Xrunhprof:heap=sites -verbose:gc”
Eclipseでメモリリーク調査
投稿者: kinusati, カテゴリー: Java
Struts2を利用してアプリを書いているのだが、なぜかメモリリークする・・・おかしい。このままだとまずいので、今回はEclipse 3.6(Helios)にプロファイラのEclipse Test and Performance Tools Platform(Eclipse TPTP)をインストールして、メモリリークの調査しました。
インストール
1. 「ヘルプ」=>「新規ソフトウェアのインストール」を選択
2. 「作業対象」を「すべての使用使用可能なサイト」を]選択し、「テストおよびパフォーマンス」を選択する。
3. 選択項目を確認する。
4. ライセンスに同意する
5. ソフトウェア更新作業後、Eclipseの再起動を促されるため、再起動実施。
プロファイル
1. プロファイル対象プログラムを選択し、右クリックから「プロファイル(P)」=>「プロファイルの構成(P)」を選択する。
2. 「プロファイル」ボタンをクリック
3. 「メモリー分析」にチェックを入れて、「オプションの編集」をクリック
4. 「オブジェクト割り振り配分を追跡」にチェックを入れる。
5. パースペクティブを切り替える
6. プログラムが実行されるため、メモリの割り当てを目視する。
調査の結果、どうやらフレームワーク側で利用した領域に対してガーベジがなされていないことが発覚。よくよく調査してみたらStruts2 2.1.8.1未満にはメモリリークが存在するとのこと。これかなー。
Struts 2でのメモリリーク
投稿者: kinusati, カテゴリー: Java
Struts2(2.1.8)を利用してアプリを制作していたのだが、なぜかメモリリークがするので調査したところ、Struts 2.1.8.1未満はメモリリークの不具合があるとのこと。
Bug
- [WW-2167] – Memory leak when app stopped
- [WW-2759] – The Struts 2 Portlet Tutorial “mvn archetype:create -DarchetypeGroupId=org.apache.struts -DarchetypeArtifactId=struts2-archetype-portlet -DarchetypeVersion=2.1.1-SNAPSHOT -DartifactId=bookmark-portlet ” Can’t use
- [WW-3141] – Maven2 struts archtype error — documentation in http://struts.apache.org/2.x/docs/struts-2-blank-archetype.html
- [WW-3191] – Per Action alias validation for wildcard mappings broken due to WW-2996
- [WW-3269] – Docs are incomplete and generated zip is incompatible with windows
- [WW-3290] – Struts 2.1.8.1 omnibus ticket
- [WW-3356] – Maven Archetypes support broken
- [WW-3401] – S2 JSON Plugin handles json content and contentType encoding differently
Improvement
- [WW-3271] – Upgrade Strust 2 archetypes to use latest version – 2.1.8
- [WW-3272] – Create new Maven archetype base on Convention
Task
- [WW-1726] – Update and release the Struts 2 archetypes
- [WW-3359] – Struts 2.1.8 Archetypes omnibus ticket
早速2.1.8.1のjarに入れ替えたらリークせずにガーベジがスムーズに走るようになりました。フレームワークの不具合は勘弁してほしいです。
Struts 2のインターセプタによるパラメータ操作とデバッグ機能
投稿者: kinusati, カテゴリー: Java
表題の件ですが、CodeZineで連載されている記事です。Struts 2のインターセプタによるパラメータ操作とデバッグ機能
今Struts2を使ってサイトを作ってるのですが、ログ取りをどうしようかな・・・と思っていたらちょうど同じようなことを考えていたようなので参考にします。
メモメモ。










