はなちin

Tuningathon Prepare

各種レポート

チューニンガソンのページからリンクが貼ってある。適宜カンペのように見る。

環境Linux AMI

microでテストする。 とりあえず測定方法を調べる。

レギュレーション

第2回レギュレーション等詳しい

http_loadの使い方など書いてる。

前回のレギュレーション

第2回のblogから引用。

1
http_load -parallel 4 -fetches 100 urlsで、urlsは元のクローンが200を返すURLがランダムに1000件入ったもの。

prepare

SELinuxきる

設定例

1
2
3
getenforce #確認
setenforce 0 # 無効
vi /etc/sysconfig/selinux # 設定ファイルをSELINUX=disabled

各種ビルドする準備

sudo yum groupinstall "Development Tools"

apache関連をインストール

httpd-develを入れるとabが入る

sudo yum install httpd httpd-devel

http.confでいらないモジュールを読み込まないようにコメントインする。

php関連をインストール

sudo yum install php php-mbstring php-mysql php-devel

MySQLをインストール

sudo yum install mysql-server

自動起動

apache,mysqlデーモンの自動起動チェック

1
2
sudo chkconfig --list httpd
httpd              0:off    1:off    2:off    3:off    4:off    5:off    6:off
1
2
sudo chkconfig --list mysqld
mysqld             0:off    1:off    2:off    3:off    4:off    5:off    6:off

apacheの自動起動を設定

1
sudo chkconfig --level 35 httpd on

mysqlの自動起動を設定

1
sudo chkconfig --level 35 mysqld on

apacheデーモン起動

1
/etc/init.d/httpd start

mysql

1
/etc/init.d/mysqld start

測定ツール

前回の優勝者の記事を見ながらすすめる。

ab

apache-develを入れる。

http_load

公式サイト

参考: wgetは保存せずに、直接展開できるんだよ

オプションはhttp load - wikiduccaを参照。

インストール手順

1
2
3
4
5
6
cd
wget -O - 'http://www.acme.com/software/http_load/http_load-12mar2006.tar.gz' | tar zxvf -
cd http_load-12mar2006/
make
sudo mkdir -p /usr/local/man/man1
sudo make install

paralell

測定とうか同時に複数のページにアクセスするツール。 前の優勝者が、キャッシュにページを載せるために使っていた。 詳しい使い方はこのgist参照。

1
2
3
4
5
6
cd
wget -O - http://ftp.gnu.org/gnu/parallel/parallel-20120622.tar.bz2 | tar jxvf -
cd parallel-20120622/
./configure
make
sudo make install

テスト用WordPressで測定

テスト用に

1
2
3
4
5
cd
wget -O - http://wordpress.org/latest.tar.gz | tar zxvf -
mysql -u root
create database wpdb;
grant all on wordpressdb.* to 'wpadmin'@'localhost' identified by 'foobar';

入れ方の参考サイト

1
2
3
4
sudo ln -s ~/wordpress/ /var/www/wordpress
sudo vi /etc/httpd/conf/httpd.conf
sudo chown -R apache:apache wordpress/
sudo chmod 755 ~

テスト測定

before

1
2
3
4
5
6
2.2152 fetches/sec, 67129.3 bytes/sec
msecs/connect: 0.10885 mean, 0.152 max, 0.029 min
msecs/first-response: 1335.43 mean, 7194.22 max, 443.895 min
87 bad byte counts
HTTP response codes:
  code 200 -- 100
1
2
3
4
5
6
7
8
100 fetches, 4 max parallel, 3.16815e+06 bytes, in 89.1417 seconds
31681.5 mean bytes/connection
1.12181 fetches/sec, 35540.6 bytes/sec
msecs/connect: 3.59099 mean, 348.376 max, 0.029 min
msecs/first-response: 2529.95 mean, 7677.19 max, 627.21 min
84 bad byte counts
HTTP response codes:
  code 200 -- 100
1
2
3
4
5
6
7
8
100 fetches, 4 max parallel, 3.14057e+06 bytes, in 125.027 seconds
31405.7 mean bytes/connection
0.799825 fetches/sec, 25119 bytes/sec
msecs/connect: 4.78446 mean, 468.306 max, 0.029 min
msecs/first-response: 3721.56 mean, 7807.18 max, 599.578 min
73 bad byte counts
HTTP response codes:
  code 200 -- 100

after apc

1
2
3
4
5
6
7
8
100 fetches, 4 max parallel, 3.19567e+06 bytes, in 11.2148 seconds
31956.7 mean bytes/connection
8.91681 fetches/sec, 284952 bytes/sec
msecs/connect: 0.10083 mean, 0.143 max, 0.028 min
msecs/first-response: 247.546 mean, 1252.08 max, 160.334 min
90 bad byte counts
HTTP response codes:
  code 200 -- 100
1
2
3
4
5
6
7
8
100 fetches, 4 max parallel, 3.11304e+06 bytes, in 10.6904 seconds
31130.4 mean bytes/connection
9.35417 fetches/sec, 291199 bytes/sec
msecs/connect: 0.09981 mean, 0.14 max, 0.029 min
msecs/first-response: 229.447 mean, 824.92 max, 161.934 min
77 bad byte counts
HTTP response codes:
  code 200 -- 100

5.4.4(no apc)

1
2
3
4
5
6
7
8
100 fetches, 4 max parallel, 3.0304e+06 bytes, in 129.405 seconds
30304 mean bytes/connection
0.77277 fetches/sec, 23418 bytes/sec
msecs/connect: 0.1025 mean, 0.141 max, 0.03 min
msecs/first-response: 4061.1 mean, 10796.7 max, 533.722 min
72 bad byte counts
HTTP response codes:
  code 200 -- 100
1
2
3
4
5
6
7
8
100 fetches, 4 max parallel, 3.05795e+06 bytes, in 124.715 seconds
30579.5 mean bytes/connection
0.801828 fetches/sec, 24519.5 bytes/sec
msecs/connect: 4.78716 mean, 468.183 max, 0.029 min
msecs/first-response: 3942.79 mean, 8519.66 max, 482.801 min
72 bad byte counts
HTTP response codes:
  code 200 -- 100
1
2
3
4
5
6
7
8
100 fetches, 4 max parallel, 3.3334e+06 bytes, in 139.018 seconds
33334 mean bytes/connection
0.719331 fetches/sec, 23978.2 bytes/sec
msecs/connect: 0.10252 mean, 0.141 max, 0.03 min
msecs/first-response: 4370.38 mean, 7944.66 max, 672.311 min
69 bad byte counts
HTTP response codes:
  code 200 -- 100

apc

pearインストール

sudo yum install php-pear

APCをインストール

sudo pecl install APC

apcの設定ファイルを作成

sudo echo “extension=apc.so” > /etc/php.d/apc.ini

apacheリスタート

sudo service httpd restart

php5.4のコンパイル

computed gotoはやるべき。Pythonでもできるぽい。

1
2
3
4
sudo yum -y install libxml2-devel openssl-devel pcre-devel bzip2-devel gmp-devel mysql-devel sqlite-devel
cd php-5.4.4/Zend
php zend_vm_gen.php --with-vm-kind=GOTO
cd ..
1
CFLAGS="-O3 -march=native -pipe" './configure' '--with-zend-vm=GOTO' '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--target=x86_64-amazon-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--cache-file=../config.cache' '--with-libdir=lib64' '--with-config-file-path=/etc' '--with-config-file-scan-dir=/etc/php.d' '--disable-debug' '--with-pic' '--disable-rpath' '--without-pear' '--with-bz2' '--with-exec-dir=/usr/bin' '--with-freetype-dir=/usr' '--with-png-dir=/usr' '--with-xpm-dir=/usr' '--enable-gd-native-ttf' '--with-t1lib=/usr' '--without-gdbm' '--with-gettext' '--with-gmp' '--with-iconv' '--with-jpeg-dir=/usr' '--with-openssl' '--with-pcre-regex=/usr' '--with-zlib' '--with-layout=GNU' '--enable-exif' '--enable-ftp' '--enable-magic-quotes' '--enable-sockets' '--with-kerberos' '--enable-ucd-snmp-hack' '--enable-shmop' '--enable-calendar' '--without-sqlite' '--with-libxml-dir=/usr' '--enable-xml' '--with-system-tzdata' '--with-mhash' '--with-apxs2=/usr/sbin/apxs' '--libdir=/usr/lib64/php' '--enable-pdo=shared' '--with-mysql=shared,/usr' '--with-mysqli=shared,/usr/lib64/mysql/mysql_config' '--with-pdo-mysql=shared,/usr/lib64/mysql/mysql_config' '--with-pdo-sqlite=shared,/usr' '--without-gd' '--disable-dom' '--disable-dba' '--without-unixODBC' '--disable-xmlreader' '--disable-xmlwriter' '--without-sqlite3' '--disable-phar' '--disable-fileinfo' '--disable-json' '--without-pspell' '--disable-wddx' '--without-curl' '--disable-posix' '--disable-sysvmsg' '--disable-sysvshm' '--disable-sysvsem'
1
CFLAGS="-O3 -march=native -pipe" make

export PATH=”~/.rbenv/bin:$PATH” eval “$(rbenv init -)” rbenv install 1.9.3-p194 rbenv install 1.8.7-p358 rbenv global 1.9.3-p194 rbenv global 2.0.0-dev

CFLAGS=”-g -O2 -march=native -pipe” gem install rails mysql therubyracer refinerycms CFLAGS=”-g -O2 -march=native -pipe” bundle install CFLAGS=”-g -O2 -march=native -pipe” gem install thin CFLAGS=”-g -O2 -march=native -pipe” gem install unicorn

Comments