Apache JMeter で、FW の内側の JMeter クライアントから AWS EC2 上の JMeter サーバにアクセスして負荷試験を行う方法
セキュリティグループ
EC2 上のセキュリティグループ(Security Group)は、ポート 22 だけ開ければ OK
SSH TCP 22 0.0.0.0/32
JMeter サーバの設定
cd apache-jmeter-3.0/bin
vi ./jmeter.properties
セキュリティグループ
EC2 上のセキュリティグループ(Security Group)は、ポート 22 だけ開ければ OK
SSH TCP 22 0.0.0.0/32
JMeter サーバの設定
cd apache-jmeter-3.0/bin
vi ./jmeter.properties
ソートのアルゴリズムの中でも最も速いとされているのがクイックソートだ。平均計算量は O(n log n) とされている。しかし最悪のケースの場合は O(n^2) である。
このアルゴリズムは、
import java.util.*;
public class Sort {
private Sort() {
}
public static void output(List data) {
for(int i = 0, n = data.size(); i < n; i++)
System.out.print(data.get(i) + ", ");
System.out.println();
}
public static void insert(List data) {
for(int i = 0, n = data.size(); i < n; i++ ) {
int j = i;
while(j > 0 && data.get(i) < data.get(j - 1))
j--;
int tmp = data.get(i);
for(int k = i; k > j; k--)
data.set(k, data.get(k - 1));
data.set(j, tmp);
output(data);
}
Java でバブルソートのアルゴリズムを考える。
今さらバブルソート・・・でもバブルソートっていったい何なんだ?と思いつつプログラマ業を営んでいる輩も多いかもしれない。バブルソートのアルゴリズムを知らなくても業務プログラムは組めるからね。
最近は Drupal のおかげで PHP にどっぷり浸かっている私ではあるが、自分自身の SE の道は Java と共に歩んできた。一番最初に Java でクライアントホテル予約システムのクライアント側のコードを書いたのは 1996年のことだから、今から 10年以上も前ということになる。
Tomcat を使っていて、サーブレットのクラス名 our_servlet.class に次の URL をマップしたい場合を考える。
https://localhost:8080/our_dir/ourservlet
ソースはここ。今なお生きる5つのルール。
SecureRandom クラスを使う。以下は、16 バイトのランダムなバイト列を作る例。
import java.security.*;
...
public final static String RANDOM_ALGORITHM = "SHA1PRNG";
public final static int RANDOM_LENGTH = 16;
...
public byte[] getRandom() {
try {
SecureRandom random = SecureRandom.getInstance(RANDOM_ALGORITHM);
byte seed[] = random.generateSeed(RANDOM_LENGTH);
byte b[] = new byte[RANDOM_LENGTH];
random.setSeed(seed);
random.nextBytes(b);
}catch(Exception e) {
e.printStackTrace();
}
return b;
}
以下の encrypt メソッドの引数に String でテキスト文字列を渡すと、暗号化されたものがバイト列で返ってくる。復号は decrypt の引数にそのバイト列を渡す。両メソッド共、crypt_spec 引数に AES を指定すれば AES で暗号するし、DES を指定すれば DES で暗号化する。
import java.io.*;
import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.*;
// CHANGE THIS VALUE DEPENDING ON WHAT YOU WANT
public static final int MESSAGE_LENGTH = 1024;
/**
* @param text
* Message to encrypt
* @param secret_key
* Secret Key
* @param crypt_spec
* Crypt algorithm like "AES" or "DES"
* @return Encrypted Byte Strings
*/
public byte[] encrypt(String text, byte[] secret_key, String crypt_spec)
throws InvalidKeyException, IllegalBlockSizeException, IOException,
BadPaddingException {
SecretKeySpec sKey = new SecretKeySpec(secret_key, crypt_spec);
byte[] secret = new byte[MESSAGE_LENGTH];
try {
Cipher cipher = Cipher.getInstance(crypt_spec);
cipher.init(Cipher.ENCRYPT_MODE, sKey);
secret = cipher.doFinal(text.getBytes());
} catch (Exception e) {
System.out.println(this.getClass().getName()
+ ".encrypt: Exception:");
e.printStackTrace();
}
return secret;
}
/**
* @param b
* Encypted Byte Message
* @param crypt_spec
* Crypt Algorithm like "AES" or "DES"
* @return Decrypted String
*/
public String decrypt(byte[] b, byte[] secret_key, String crypt_spec)
throws InvalidKeyException, IllegalBlockSizeException, IOException,
BadPaddingException {
SecretKeySpec sKey = new SecretKeySpec(secret_key, crypt_spec);
byte[] secret = new byte[MESSAGE_LENGTH];
try {
Cipher cipher = Cipher.getInstance(crypt_spec);
cipher.init(Cipher.DECRYPT_MODE, sKey);
secret = cipher.doFinal(b);
} catch (Exception e) {
System.out.println(this.getClass().getName()
+ ".decrypt: Exception:");
e.printStackTrace();
}
return new String(secret);
}