jmeterをMacで使ってみる
jmeterをmacにインストールしてとりあえず使ってみるところまで試してみました。
環境は Mac OSX10.9でjmeterのバージョンは2.11です。
手順
インストール
- 公式サイトからバイナリをダウンロード
- 任意のディレクトリとかに移動して解凍
-
起動してみる
sh [jmeter展開したディレクトリ]/apache-jmeter-2.11/bin/jmeter
簡単なテストをしてみる
-
スレッドグループを作成
編集⇒追加⇒Threads⇒スレッドグループで作成
ここでスレッド数やRamp-Up数、ループ回数等を指定する。
- スレッド数 : テスト中に起動するスレッド数(ユーザ数みたいな意味)
- Ramp-Up数 : 上で設定したスレッド数を何秒間で生成するかを決定する。
例えばスレッド数が10でRamp-Up数が5だったら5秒間で10スレッドが生成される。 - ループ回数 : 一つのテストケースを何回繰り返すか設定。無限ループ設定も可能。
なのでスレッド数10、Ramp-Up数5、ループ回数100の場合
5秒間で合計1000リクエスト(秒間同時接続数2(10/5))となる。 -
サンプラー(HTTPリクエスト)を作成
スレッドグループ上で右クリック⇒追加⇒サンプラー⇒HTTPリクエストで作成
ここでホストやリクエストタイプ(GET/POST等)、リクエストパラメータの指定を行う。
-
リスナーを作成
テストの実行結果を色々な表示で可視化する。
個人的によく使うのは以下の二つ。-
統計レポート
テストの結果をサマリで確認できる。
負荷テストとかはここを見てればとりあえず良さそう。 -
結果ツリー
各アクセスのrequest/responseの内容が確認できる。
負荷テスト時等はメモリ圧迫したりするので必ずoffにする。
-
-
テストを実行してみる
メニューバーの実行、もしくは緑三角ボタンを押してテストを実行する。
事前に作成したリスナーに結果が表示されるので確認。
ちょっと応用
-
URLパラメータにランダムな値を動的に設定する
下記のようにHTTPリクエストのサンプラー設定画面内のparametersにURLパラメータを設定する。
その際値の方を${__Random(0,300)}
のように設定する。
この場合、0から300の値がランダムにoパラメータに設定される。
他にも色々関数があるので必要に合わせて。
-
URLパラメータとかパスの値をテキストファイルから読み込む
-
テキストファイルに読み込ませたいパラメータを書いて保存しておく。
# test.txt test1 test2 test3
-
スレッドグループ上で追加⇒前処理⇒ユーザパラメータを作成する。
- 作成したユーザパラメータを開き、「変数を追加」ボタンで変数を定義する。
- 名前は任意でOK(仮にtestparamとする)、隣の欄に「${__StringFromFile(test.txt)}」のような形でファイルを読み込む。
ファイルパスはjmeter起動時のディレクトリがカレントになるので適宜変更する。 - 読み込んだ値を使用する箇所で「${testparam}」として記述すればファイルからパラメータ等を設定できる。
-
-
コマンドラインから実行
サーバ上から別サーバへのアクセスをする場合等、
コマンドラインから起動したい時は以下のようにする。# 事前に作成しておいたjmxファイルを引数にして実行する。 # ログファイルが必要な場合は`-l`オプションを指定して出力可能。 ~/xxx/bin/jmeter -n -t test.jmx -l test.log
まとめ
ロジックコントローラとか色々便利な機能が他にもあるけど、
とりあえず基本的なテストはこれでできるかな。
機会があればもうちょっと掘り下げた内容も書きます。
EC2のEBSボリュームをProvisionedIOPS EBSに変更する
はじめに
稼働中のec2インスタンスのEBSボリュームをec2-api-toolsを使って
provisioned IOPS EBSに変更する方法を試してみました。
ec2-api-toolsのバージョンは1.6.12.2です。
手順
稼働中のインスタンスを停止する
ec2-stop-instances $instance_id
元になるEBSボリュームをdetachする
ec2-detach-volume $volume_id
EBSボリュームのスナップショットを作成する
ec2-create-snapshot $volume_id
Provisioned IOPS EBSを作成する
ec2-create-volume --availability-zone $zone --size 10 --type io1 --iops 4000 --snapshot $snapshot_id
作成したProvisioned IOPS EBSボリュームをインスタンスにatacheする
ec2-attach-volume --instance $instance_id --device /dev/sda $new_volume_id
インスタンスがEBS-Optimizedインスタンスでなければ、
以下コマンドで対応するインスタンスに変更する(この例ではm1.largeに変更)
ec2-modify-instance-attribute --instance-type m1.large $instance_id
EBS-optimizedにコンバートする
ec2-modify-instance-attribute --ebs-optimized True $instance_id
作成したEBS-Optimizedインスタンスを起動する
ec2-start-instances $instance_id
まとめ
DBの大量インサートとかIOバウンドな処理をする時は良さそうですね。
EC2のインスタンスタイプを変更する
前提
稼働中のec2インスタンスのタイプをec2 api toolsを使って
変更する方法を試してみます。
ec2-api-toolsのバージョンは1.6.12.2です。
手順
-
インスタンスを停止する
ec2stop $instance_id
-
インスタンスタイプを変更する
ec2-modify-instance-attribute --instance-type m1.large $instance_id # SYNOPSIS: ec2minatt
-
インスタンスを起動する
ec2-start-instances $instance_id # SYNOPSIS: ec2start
まとめ
簡単にインスタンスのスペックを変更できるのでいい感じです。
普段は最低限のスペックのインスタンスタイプで稼働させておいて
必要な時に一時的にハイスペックなタイプに変更できたりとても便利です。
次回は、EBSのタイプ変更(provisioned IOPS EBS)を試してみる予定です。
EC2でSnapshotを作成してリストアする
前提
前回からの続きで、今回は作成したEC2インスタンスのスナップショットを取得して
そこからAMIを作成、インスタンスをリストアするところまでやってみました。
手順的には省いてますが対象インスタンスが起動中の場合は、
一応停止してからの方がよいと思います。
手順
-
ebsボリューム情報を確認する
ec2-describe-volumes # SYNOPSIS: ec2dvol
-
スナップショットを作成する
# -d : スナップショットの概要 # 上で確認したvolume idを設定 ec2-create-snapshot -d 'snapshot test' $volumeid
-
作成したスナップショットからAMIを作成する
# -n : amiの名前 # -d : amiの概要 # --root-device-name : インスタンスのルートデバイス # -b ルートデバイスと対応するsnapshotのid # -a : アーキテクチャ # --kernel : 元インスタンスのkernelID(ec2-describe-instancesで確認) ec2-register -n test_ami -d 'test ami' --root-device-name /dev/sda -b /dev/sda=$snapshotoid -a x86_64 --kernel aki-44992845
-
作成したAMIからインスタンスを作成、起動する
ec2-run-instances $amiid --group first_group --key django_aws --instance-count 1 --instance-type m1.small --availability-zone ap-northeast-1a --instance-initiated-shutdown-behavior stop
まとめ
これで作成したスナップショット時点にいつでも戻れるようになりました。
何かの検証作業する時とか、すぐにやり直しが出来るようになるので便利です。
次回もec2 api tools使ってインスタンスタイプの変更をやってみる予定です。
AWSをEC2 API Toolsで使ってみる
前提
端末からAWSのapiを使ってec2を操作してみました。
今回はec2 api toolsを使ってインスタンスを
作成、起動、停止、削除まで試してみました。
ちなみに作成するインスタンスはCentOS6系で、検証環境はOSX 10.8です。
手順
- API Toolsをamazonの以下リンクからダウンロード
http://aws.amazon.com/developertools/351 - 適当な場所に展開(今回は/usr/local/opt)
-
扱いやすいようにシンボリックリンクを貼っておく
cd /usr/local/opt ln -s ec2-api-tools-1.6.12.2 ec2-api-tools
-
環境変数をセットする(.bash_profileの編集)
vi ~/.bash_profile #以下を追加する JAVA_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home EC2_HOME=/usr/local/opt/ec2-api-tools EC2_CERT=/Users/xxx/work/amazon_work/cert.pem EC2_PRIVATE_KEY=/Users/xxx/work/amazon_work/pk.pem PATH=$PATH:$EC2_HOME/bin export JAVA_HOME EC2_HOME EC2_CERT EC2_PRIVATE_KEY PATH # 東京リージョンにする場合は以下を設定 export EC2_URL=https://ec2.ap-northeast-1.amazonaws.com
-
動作確認してみる(使用可能なリージョン一覧を表示されます)
ec2-describe-regions # SYNOPSIS : ec2dre
-
awsに登録しているkeypairを確認する
ec2-describe-keypairs # SYNOPSIS : ec2dkey # KEYPAIR [登録済みkeypair名] xx:xx:xx のように表示されていればOK
-
セキュリティグループの作成
ec2-add-group first_group --description 'first security group' # GROUP sg-3b3e133a first_group first security group
-
作成したセキュリティグループのinbound設定をする
ec2-authorize first_group --protocol tcp --port-range 22 --cidr '0.0.0.0/0' ec2-authorize first_group --protocol tcp --port-range 80 --cidr '0.0.0.0/0'
-
EC2インスタンスを作成する
ec2-run-instancesコマンドで作成する。
とりあえず最低限の前準備が出来たのでec2のインスタンスを作成してみる。
パラメータが多いので以下簡単に概要AMI識別子(ブートイメージ) --group セキュリティグループ(複数指定可能) --key 使用するkeypair --instance-count 起動するインスタンスの数 --instance-type インスタンスタイプ(マイクロとかラージとか) --availability-zone AZ。指定しない場合、適当に場所が選択されてしまうようなので設定する --disable-api-termination TerminationProtectionの設定 --instance-initiated-shutdown-behavior シャットダウン時の挙動(stop/terminate)
よく使いそうなインスタンスタイプ(2014/02時点)
t1.micro 1 変数 0.615 EBS のみ $0.020 /1 時間 m1.small 1 1 1.7 1 x 160 $0.060 /1 時間 m1.medium 1 2 3.75 1 x 410 $0.120 /1 時間 m1.large 2 4 7.5 2 x 420 $0.240 /1 時間 m3.xlarge 4 13 15 2 x 40 SSD $0.450 /1 時間 m3.2xlarge 8 26 30 2 x 80 SSD $0.900 /1 時間
AMI識別子を調べる為にami一覧を取得する。
今回はCentOSの公式インスタンス(64bit版)を探す為にこんなコマンドで探した。ec2-describe-images -o 'aws-marketplace' --filter "name=CentOS-6-x86_64*" # 結果の中に[ami-xxxx]みたいな感じで出力されるのがAMI識別子
コマンドはこんな感じ
ec2-run-instances ami-31e86030 --group first_group --key xxxx --instance-count 1 --instance-type t1.micro --availability-zone ap-northeast-1a --disable-api-termination --instance-initiated-shutdown-behavior stop # ディスクの拡張やエフェラメルディスクをマウントする場合のオプション # ルートデバイスのサイズを30Gに変更する -b /dev/sda=:30 # エフェメラルディスクもマウントする -b /dev/sdb=ephemeral0
-
作成したインスタンスを確認してみる
ec2-describe-instances # SYNOPSIS: ec2din # RESERVATION r-097bbd0e 708359476534 first_group INSTANCE i-1e136319 ami-31e86030 ec2-54-199-101-205.ap-northeast-1.compute.amazonaws.com ip-10-160-131-243.ap-northeast-1.compute.internal running django_aws 0 [marketplace: aacglxeowvn5hy8sznltowyqe] t1.micro 2014-01-24T03:15:10+0000 ap-northeast-1a aki-44992845 monitoring-disabled 54.199.101.205 10.160.131.243 ebs paravirtual xen sg-3b3e133a default false BLOCKDEVICE /dev/sda vol-d34db9d9 2014-01-24T03:15:13.000Z false
-
sshで接続してみる
ssh -i xxx.pem root@ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com
-
※ディスクを拡張している場合
# 現状のディスクの状況を確認 fdisk -l # 拡張する(デバイス名は適宜変更) resize2fs /dev/xvde
-
EC2を停止する
ec2-stop-instances i-47951940 # SYNOPSIS: ec2stop
-
TerminationProtectionを解除する
ec2-modify-instance-attribute i-47951940 --disable-api-termination false # SYNOPSIS : ec2minatt
-
EC2インスタンスをterminateする
ec2-terminate-instances i-47951940 # SYNOPSIS : ec2kill
-
不要になったVolumesを削除する
# 現在のvolume一覧を取得する(削除するvolumeのIDを確認) ec2-describe-volumes # volumeIDを指定して削除 ec2-delete-volume vol-c9b641c3
まとめ
とりあえずこれでec2インスタンスの
作成、起動、停止、削除のサイクルが出来ました。
ちなみに各コマンドの詳細な使い方は
それぞれのコマンドに-h
オプションをつけると見れます。
次回はスナップショット取ったり、そこからリストアしたりとかしてみる予定です。