goo blog サービス終了のお知らせ 

YUKI'S BLOG

HCCソフト社長の日常をたまにお知らせします。

JMeterのインストールと簡単な使い方

2012-03-20 22:40:34 | 技術情報

Webアプリケーション等の負荷テストに利用する、JMeterのインストールと簡単な使い方です。

 

1.JMeterを、下記URLからダウンロードします。

http://jmeter.apache.org/download_jmeter.cgi

 

2.ダウンロードしたファイルを適当な場所で解凍します。そして、binフォルダの

jmeter.batファイルを起動します。

 

3.JMeterが起動します。

 

4.まず、テストを追加します。画面左の「テスト計画」を右クリックし、

「追加」→「Threads(Users)」→「Setup Thread Groups」を選択します。

 

5.名前は適当につけます。スレッドプロパティの「スレッド数」「Ramp-Up時間」「ループ回数」を指定します。

例えば、スレッド数50、Ramp-Up時間5秒であれば、1秒あたり10スレッド実行されることになります。

スケジューラで開始時刻等を指定することも可能です。

 

6.次に、そのスレッドで実行するHTTPリクエストを指定します。4~5で作成したスレッドグループを右クリックして

「追加」→「サンプラー」→「HTTPリクエスト」を選択します。

 

7.HTTPリスエストのWebサーバ、パス、パラメータ等を指定します。

 

8.テスト結果を確認するために、リスナーを準備しておきます。リスナーはいろいろありますが、

ここではスレッドグループを右クリックして、

「追加」→「リスナー」→「結果をグラフ表示(詳細)」を選択します。

 

9.テストを実行します。実行するテスト計画が選択された状態で、メニューの

「実行」→「開始」を選択します。

 

10.8で作成したリスナーを選択すると、テスト結果が表示されます。

応答結果や速度を計測することができます。

 

実際にWebアプリケーションの負荷テストを行う場合、セッションの設定等を行うことや、多くのクライアントから

同時アクセスを想定する場合、JMeterを起動するPCを複数用意し、ある程度のスレッド数を分けて実行する

必要があります。今後業務で使っていく中で分かったことがあればまた載せたいと思います。

 

 

 


JCS(Java Caching System)で簡単なサンプル

2011-11-07 23:43:34 | 技術情報

Javaでキャッシュを実現するためのライブラリとして、Apache JakartaプロジェクトのJCS(Java Caching System)があります。Java言語を用いたWEBアプリケーションやスタンドアロンシステムで使えそうなので、簡単なサンプルプログラムを作成してみました。

JCSの概要については、下記URLに解説記事がありました。

http://www.ibm.com/developerworks/jp/java/library/j-jcs.html

 

JCSはこちらからダウンロードできます。

http://commons.apache.org/jcs/DownloadPage.html

 

依存するライブラリとして、concurrentパッケージが必要です。

http://g.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html

 

サンプルですが、まず、JCSの構成ファイル(cache.ccf)を作成して実行時のカレントディレクトリに配置します。まずは基本的な構成として、純粋にメモリーを利用してキャッシュを構成してみました。

# DEFAULT CACHE REGION
jcs.default=
jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
jcs.default.cacheattributes.MaxObjects=10
jcs.default.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache

MaxObjectsにオブジェクト最大保持数を指定します。ここではテストのため、10を設定しました。

実際に簡単なオブジェクトを11個キャッシュに保存して、どうなるか試してみました。実行すると、古いキャッシュから2個が消えていました。つまりオブジェクト最大保持数-1個のオブジェクトがキャッシュに保存されている、ということになりそうです。キャッシュを見てなければファイルやDBから取得する、という使い方ができそうです。

以下、サンプルソースと実行結果です。

------ サンプルソース ------


package com.hcc_soft.geo.test;

import java.io.Serializable;

import org.apache.jcs.JCS;
import org.apache.jcs.access.exception.CacheException;

public class JCSTest {
	
	// キャッシュ領域名
	private static final String CACHE_REGION_NAME = "hcc";
	
	// キャッシュオブジェクト
	private JCS cache = null;

	public void test() {
		
		try {
			// キャッシュ初期化
            setCache(JCS.getInstance(CACHE_REGION_NAME));
            
            // 11人分のオブジェクトをキャッシュに入れる
            for(int i = 0; i < 11; i++) {
        		Person person = new Person("大川"+(i+1), "栃木", "000-0000");
        		cache.put("ohkawa"+(i+1), person);
            }
    		
            // 11人分のオブジェクトをキャッシュから読む
            for(int i = 0; i < 11; i++) {
            	Person person1 = (Person)cache.get("ohkawa"+(i+1));
        		System.out.println(person1 == null? "null":person1.toString());
            }
    		
        } catch (CacheException e) {
            e.printStackTrace();
        }
	}
	
	public static void main(String args[]){
		JCSTest s = new JCSTest();
		s.test();
	}

	public JCS getCache() {
		return cache;
	}

	public void setCache(JCS cache) {
		this.cache = cache;
	}
	
	protected class Person implements Serializable {
		protected String name_;
		protected String address_;
		protected String phone_;
		public Person(String name, String address, String phone) {
			name_ = name;
			address_ = address;
			phone_ = phone;
		}
		public String toString() {
			return "名前:"+name_+" 住所:"+address_+" 電話番号:"+phone_;
		}
	}

}

------ 実行結果 ------

null   ←古くて消えたキャッシュ
null   ←古くて消えたキャッシュ
名前:大川3 住所:栃木 電話番号:000-0000
名前:大川4 住所:栃木 電話番号:000-0000
名前:大川5 住所:栃木 電話番号:000-0000
名前:大川6 住所:栃木 電話番号:000-0000
名前:大川7 住所:栃木 電話番号:000-0000
名前:大川8 住所:栃木 電話番号:000-0000
名前:大川9 住所:栃木 電話番号:000-0000
名前:大川10 住所:栃木 電話番号:000-0000
名前:大川11 住所:栃木 電話番号:000-0000


JavaFX2.0のインストール

2011-10-24 00:32:20 | 技術情報

この10月にJavaOne2011の開催にあわせて、Javaのリッチクライアント技術であるJavaFX 2.0の正式版がリリースされたとのことなので、試にインストールしてみました。

といっても、手順は非常に簡単でした。

Oracleのダウンロードページ

http://www.oracle.com/technetwork/java/javafx/downloads/index.html

から、

対象のSDKとSamplesをダウンロードして、SDKのインストーラを実行するだけでOKでした。

(あらかじめJDK6のUpdate26以上が必要です)

 

Samplesには、

・BRICK BRAKER (簡単なゲーム)

 

・Ensemble (各種デモ)

 

・Swingとの連携

 

等があります。

 

デモを見ていると、これまでのSwingより、かっこいいUIが作れそうな感じです。Oracleが今後注力して開発するようなので、今のうちに学んでおこうと思います。

 


JFaceアプリをEclipseから起動する

2011-10-13 23:40:40 | 技術情報

前回作成したJFaceのアプリをEclipseから起動します。

Eclipseから通常のJavaアプリと同様に起動しましたが。。

 

 

java.lang.NoClassDefFoundError: org/eclipse/core/runtime/IProgressMonitor
Caused by: java.lang.ClassNotFoundException: org.eclipse.core.runtime.IProgressMonitor
 at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:248)

とのこと。このクラスは、pluginフォルダのorg.eclipse.equinox.common_3.6.0.v20110523.jar

に含まれているので、プロジェクトのビルドパスに追加しました。

 

 

もう1回実行してみると、

 

Exception in thread "main" java.lang.UnsatisfiedLinkError: no swt-win32-2133 in java.library.path
 at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1734)
 at java.lang.Runtime.loadLibrary0(Runtime.java:823)
 at java.lang.System.loadLibrary(System.java:1028)
 at org.eclipse.swt.internal.Library.loadLibrary(Library.java:108)
 at org.eclipse.swt.internal.win32.OS.<clinit>(OS.java:46)
 at org.eclipse.swt.internal.win32.TCHAR.<clinit>(TCHAR.java:30)
 at org.eclipse.swt.widgets.Widget.<clinit>(Widget.java:83)
 at org.eclipse.jface.window.Window.createShell(Window.java:487)
 at org.eclipse.jface.window.Window.create(Window.java:430)
 at org.eclipse.jface.window.Window.open(Window.java:790)
 at com.hcc_soft.geo.core.view.swt.CoolBarApplicationWindow.main(CoolBarApplicationWindow.java:524)

SWTのネイティブDLLがパスにない、というエラーなので、swt-win32-2133.dllをEclipseのプロジェクト直下にコピーしてみました。その結果、

 

Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\eclipse3\workspace\HccMapCore3\swt-win32-2133.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
 at java.lang.ClassLoader$NativeLibrary.load(Native Method)
 at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1803)
 at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1728)
 at java.lang.Runtime.loadLibrary0(Runtime.java:823)
 at java.lang.System.loadLibrary(System.java:1028)
 at org.eclipse.swt.internal.Library.loadLibrary(Library.java:108)

開発PCは64ビットでした。なのに開発に使っていたswt.jarが32ビット版なのでエラーになったようです。(古いPCのものを流用していました)

調べたところ、

http://archive.eclipse.org/eclipse/downloads/drops/R-3.6.1-201009090800/winPlatform.php

下の方の「SWT Binary and Source 」から64ビット版のSWTがダウンロードできました。

 

 

解凍すると、中にswt.jarが入っているので、プロジェクトのビルドパスに設定します。

DLLはswt.jarをさらに解凍すると

swt-win32-3655.dll

swt-awt-win32-3655.dll

swt-gdip-win32-3655.dll

swt-wgl-win32-3655.dll

の4ファイルあったので、とりあえず全てプロジェクト直下にコピーしました。

 

再度実行。。。。。

 

 

動作しました。JFaceアプリについて、これからもう少し勉強してみたいと思います。