きぬろぐ


antでのProxy設定メモ

投稿者: kinusati, カテゴリー: Java

Proxy配下で直接外部に接続できない環境下でantを利用してjarのダウンロードを行うためのメモ。

http://ant.apache.org/manual/proxy.html

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未満はメモリリークの不具合があるとのこと。

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に入れ替えたらリークせずにガーベジがスムーズに走るようになりました。フレームワークの不具合は勘弁してほしいです。

コメント(1)

Time::HiResの使い方

投稿者: kinusati, カテゴリー: Perl

Perlプログラムのプロファイルを行うときに、ミリ秒単位で応答時間を取得したい場合がある。

そんなときにはTime::HiResがおすすめ。簡単にミリ秒で取得できます。

use Time::HiRes qw( usleep ualarm gettimeofday tv_interval );
my @before = gettimeofday();
&method1();
my @after = gettimeofday();
my $elapsed = tv_interval(\@before, \@after);

↑のやり方で、&method1()の実行にかかった時間が取得できます。楽ちん楽ちん。

コメントする

« 前のページ  次ページへ »

フリースペース

バナーやブログパーツなどを貼って、ご自由にお使いください。