今回は、Mstoneと言う負荷ツールを使ってメールサーバに負荷をかけてみました。

この、Mstoneを使えば、SMTP/POP/IMAP/WMAPのベンチマークが出来ます。

Mstoneについては、以下のURLを参照して下さい。

 

http://mstone.sourceforge.net//index.html(本家)

http://www.mozilla-japan.org/projects/mstone/(翻訳版)

 


注意:このツールは、あくまでもベンチマークのためにあるものです。外部の稼動サーバにこのツールを使用すると、法的責任を取らされる場合があります。なので、絶対に使用しないようにしましょう。いかなる場合でも、私は一切責任を負いません。

 

■使用OS

CentOS 5.4

 

■必要なもの

◎Mstone(本体)

◎CMake(Mstoneインストール時に必要)

◎gnuplot(結果をグラフで表示する場合に必要)

 

まず、負荷をかける側端末の設定です。

 

(1)CMakeをインストールする。

CMakeのダウンロード先は以下のURLです。

http://www.cmake.org/cmake/resources/software.html


ここから、【cmake-2.8.0.tar.gz】をダウンロードする。

)2010年1月8日の最新版です。

 

ダウンロードした、cmake-2.8.0.tar.gzを解凍する。

[root@hoge ~]# wget http://www.cmake.org/files/v2.8/cmake-2.8.0.tar.gz

[root@hoge ~]# tar zxvf cmake-2.8.0.tar.gz

 

解凍した、cmake-2.8.0に移動する。

[root@hoge ~]# cd cmake-2.8.0

 

CMakeのインストールを行う。

[root@hoge cmake-2.8.0 ]# ./configure –prefix=/usr/local/cmake

[root@hoge cmake-2.8.0 ]# make && make install

)prefixの前は、ハイフンハイフンです。お手数ですが、コピーせずに直に打ち込むか、コピー後、直してください。

 

インストールした、cmakeディレクトリにパスを通す。(この操作は任意です

 

[root@hoge ~]# vi /etc/profile

# No core files by default

ulimit -S -c 0 > /dev/null 2>&1

 

if [ -x /usr/bin/id ]; then

USER=”`id -un`”

LOGNAME=$USER

MAIL=”/var/spool/mail/$USER”

pathmunge /usr/local/cmake/bin ← 追加

fi

[root@hoge ~]# . /etc/profile

 

(2)gnuplotをインストールする。

 

[root@hoge ~]# yum -y install gnuplot

 

(3)Mstoneをインストールする。

 

まず、Mstoneをダウンロードする。

[root@hoge ~]# wget http://sourceforge.net/projects/mstone/files/mstone/4.9.4/mstone%2Bdocs-4.9.4.tar.gz/download

)2010年1月8日の最新版です。

 

ダウンロードした、Mstoneを解凍する。

[root@hoge ~]# tar zxvf mstone+docs-4.9.4.tar.gz

 

解凍した、Mstoneディレクトリに移動する。

[root@hoge ~]# cd mstone-4.9.4

 

Cmakeのセットアップを行う。

[root@hoge mstone-4.9.4]# cmake .

 

次に、cmakeでCMakeLists.txtを実行し、インストールを行う。

[root@hoge mstone-4.9.4]# cmake CMakeLists.txt

[root@hoge mstone-4.9.4]# make && make install

 

これで、【/usr/local/mstone】ディレクトリが作成されている。

 

mstoneのセットアップを行う。

まず、Lisenceに同意する必要があるため、以下を実行しLicenseに同意する。

[root@hoge ~]# cd /usr/local/mstone

[root@hoge mstone]# ./mstone config

 

次に、mstoneの設定を行う。

 

[root@hoge mstone]# ./mstone config

Netscape Mailstone.

Copyright (c) 1997-2000 Netscape Communications Corp.

 

 

Configure test clients [n]? y 

 

You can enter multiple machines like this: host1,host2

 

What is the name of the client(s) for default OS [localhost]: 

 

What additional client(s) [none]: 

 

Configure SMTP/POP/IMAP protocols [n]? y 

 

What is the name of the mail host [mailhost.example.com]: mx.test.com 

 

What is the user name pattern [mailtestuser%ld]: user%ld 

 

What is the password pattern [myPassword]: passwd 

 

How many users [100]: 100 

 

What is the first user number [0]: 1 

 

Do you want to view the new conf/general.wld [y]? 

Here is the new conf/general.wld:

 

# common setup info for tests

# See sample.wld for detailed usage

 

# Information on how the test is distributed and reported

# Test independent configuration

<CONFIG>

# Debug with short runs and a few clients, then increase test time

# These get overridden in the test specific files (or the command line)

clientCount   2       # nominal clientCount (usually overriden)

rampTime      20s

time          1m

 

# Each test should set a title/comments in their CONFIG section

# This is a reminder to set something

title         Need to set test title…

comments      Some sort of testing…

#sysConfig    conf/sample.html        # File for additonal system config

 

# Uncomment this to enable core dumps:

#clientCommand ulimit -Sc 900000; ./mailclient

</CONFIG>

 

# Each <Monitor> section defines remote monitoring commands

#   for one or more machines.

# Commands containing ‘%c’ run to completion.

#  Otherwise the command will be shutdown down

<MONITOR>

name          vmstat.txt            # outfile will be CLIENT*-NAME

command       vmstat %f

process       conf/clean_vmstat.pl  # custom processing script

</MONITOR>

 

# The PreTest sections will run before the test starts

<PRETEST>

name    preifconfig.txt  # outfile will be CLIENT*-NAME

command       ifconfig

</PRETEST>

 

# The PostTest sections will run after the test ends

<POSTTEST>

name          ifconfig.txt  # outfile will be CLIENT*-NAME

command       ifconfig; uname -a

# clean_ifconfig expects the input name to be preifconfig.txt or pretest.txt

process       conf/clean_ifconfig.pl  # custom processing script

</POSTTEST>

 

# The <DEFAULT> tag sets protocol block defaults

<DEFAULT>

# defaults for both e-mail and revision control systems

loginFormat   user%ld

passwdFormat  passwd

numLogins     100

firstLogin    1

 

# e-mail defaults

server        mx.test.com

smtpMailFrom  user0@mx.test.com

addressFormat user%ld@mx.test.com

numAddresses  100

firstAddress  1

 

# revision control system defaults

repoUrl       http://myLocalSvn

topDir        repoTop/mstone

 

</DEFAULT>

 

 

# Specify client machines

# mstone assigns the same process/thread counts to each host in a client block.

# Use one host per client block for maximum allocation flexibility.

<CLIENT HOSTS=localhost>

maxThreads 100

</CLIENT>

 

 

Configure SVN support [n]? 

 

Generate an account LDIF file for Netscape Directory Server [n]? 

 

Make any additional changes to conf/general.wld and then re-run ‘setup’

 

①テストクライアントの設定です。

②今回は、1クライアントなので、localhostを指定

③追加クライアント指定、追加クライアントは無いのでデフォルト

④テストを行うので、【y】を指定する。

⑤負荷対象サーバを指定する。

⑥今回は、負荷検証用に使用するユーザを、【user1】、【user2】、【usern】のように作成します。そのため、user%ldを指定。%ldは、ランダムに選択される通し番号の値が入ります。

⑦ 負荷検証用に使用するユーザのパスワードを指定する。ここでは、全てのユーザのパスワードが

【passwd】に設定する。

⑧ラッシュ対象のユーザ数を指定します。今回は、100ユーザまで作成するので【100】を指定します。

⑨ランダムに選択される通し番号の一番若い番号を指定します。ここでは、【1】を指定しているので、1~ユーザ数(ここでは100)までランダムで選ばれます。

⑩作成された設定ファイルを表示します。デフォルトで【y】です。

⑪SVNに関しては、今回関与しないのでデフォルトの【n】です。

⑫NMSのユーザ情報LDIFを自動生成しないので、デフォルトの【n】です。

 

次に、Mstoneのセットアップを行います。

[root@hoge mstone]# ./mstone setup

Netscape Mailstone.

Copyright (c) 1997-2000 Netscape Communications Corp.

 

Found these message files:

en-17k.msg en-1k.msg en-20k.msg en-2k.msg en-32k.msg en-3k.msg en-5k.msg en-750.msg en-gif-17k.msg gr-3k.msg nu-5k.msg words-ascii.dat

 

Copying build/Linux2.6_x86/mailclient and message files to /var/tmp/

Linux hoge.testmachine.com 2.6.18-164.6.1.el5 #1 SMP Tue Nov 3 16:18:27 EST 2009 i686 i686 i386 GNU/Linux

 

(4)検証用のユーザを作成する。

今回は、100ユーザ作成します。(user1~user100)

検証用ユーザは、負荷対象サーバで作成します。(今回は、mx.test.com

そこで、いちいちコマンド打ちながら作成するのは時間がかかるので、以下のスクリプトを作成しました。

 

[root@mx ~]# vi user_add.sh

#!/bin/sh
echo -n “作成するユーザ数を入力:”
read num
i=1
while [ $i -le $num ]
do

echo user$i passwd >> usernumber
let i=i+1

done

while read user pass
do

useradd $user
echo $pass | passwd stdin $user

done < usernumber

rm -rf usernumber

passwdはユーザのパスワードです。passwdを任意の文字列に編集すれば、それがパスワードになります。

)echo $pass | passwd の stdin の前は、ハイフンハイフンです。上をコピーすると、stdinの前は?になるかと思いますので、お手数ですが、ハイフンハイフンに書き直してください。

 

作成後、実行権限を与えます。

[root@mx ~]# chmod +x user_add.sh

)sourceコマンドや.を使用して頂いても大丈夫です。

 

実行方法は、以下の通りです。

[root@mx ~]# ./user_add.sh

作成するユーザ数を入力:100 ← 今回使用するユーザ数
Changing password for user user1.

passwd: all authentication tokens updated successfully.

Changing password for user user2.

passwd: all authentication tokens updated successfully.

Changing password for user user100.

passwd: all authentication tokens updated successfully.

 

これで、/home直下に100のユーザが出来ます。

 

ちなみに、多数のユーザを一度に削除するスクリプトは以下です。

[root@mx ~]# vi user_del.sh

#!/bin/sh
echo -n “削除するユーザ数を入力:”
read num
i=1
while [ $i -le $num ]
do

userdel -r  user$i
echo delete user$i
let i=i+1

done

 

user_add.shと同じように、実行権限を付与します。

ユーザ削除方法は以下の通りです。

[root@mx ~]# ./user_del.sh

削除するユーザ数を入力:100 ← 今回100ユーザ作成したので、100ユーザ削除する。

delete user1
delete user2
delete user3

delete user99
delete user100

 

ユーザの削除は、テスト後に行いましょう!

 

これで、実行環境が整いました。

それでは、実際に、負荷をかけてベンチマークを取ってみましょう!

 

(5)ベンチマーク方法

・smtp編

[root@hoge ~]# cd /usr/local/mstone

[root@hoge mstone]# ./mstone smtp –t 60s –l 100

 

上記のテストでは、60秒間に100ユーザでメール送信のテスト(ベンチマーク)を行います。

 

結果は、【mstone/results】の中に、日付時間でディレクトリが作成されます。その中にある【results.html】を見ると、結果がブラウザに表示されます。

 

実行結果例

http://www.kurobuti.com/blog/result/20100109.0013/results.html

 

・pop編

[root@hoge mstone]# ./mstone pop -t 60s -l 100

 

上記のテストでは、60秒間に100ユーザでメール受信(pop)のテスト(ベンチマーク)を行います。

 

実行結果例

http://www.kurobuti.com/blog/result/20100109.0027/results.html

 

何か、エラー出とる。

 

・IMAP編

[root@hoge mstone]# ./mstone imap -t 60s -l 100

 

上記のテストでは、60秒間に100ユーザでメール受信(imap)のテスト(ベンチマーク)を行います。

 

実行結果例

http://www.kurobuti.com/blog/result/20100109.0033/results.html

 

このツールは便利ですね(´ー`)

このツールを使えば、メールサーバが遅い原因の切り分けなども出来ますねъ(`ー゜)

例えば、LDAP+SMTPで構築した時に、何が悪いかとかヽ(´ー`)ノ


1月 9, 2010 at 12:36 am by 黒ぶちメガネ
Category: Linux