PHPのコンパイルオプションに –disable-allをつけて、不要なモジュールをインストールしないときのベンチマーク

PHP5.2.3の configureオプションである–disable-allを指定した場合にどの程度パフォーマンスに影響するかを実験する。
–disable-allとは、PHPをインストールする際にデフォルトでインストールされる機能をインストールしないようにするオプション。デフォルトでは不要なも機能まで入ってしまうため、無駄が発生する場合がある。例えば、XML,JSON、filter、PDOなどである。

PHP実験環境

  • 共通環境
    • ゲスト:CentOS release 4.4 (Final) (on Vmware server 1.0.2)
    • ホスト:Windows XP Professional
    • CPU: Intel Core2 Duo 6600 2.4G
    • Apache:2.2.4
      • ./configure –prefix=/usr/local/apache2 –enable-ssl –enable-rewrite –enable-so
  • 環境1
    • ./configure \
      –enable-mbstring \
      –enable-soap \
      –enable-zend-multibyte \
      –with-apxs2=/usr/local/apache2/bin/apxs \
      –with-mysql=/usr/local/mysql \
      –with-pdo-mysql=/usr/local/mysql \
      –with-curl \
      –with-curlwrappers \
      –with-gd \
      –with-jpeg-dir=/usr/lib \
      –with-png-dir=/usr/lib \
      –with-zlib-dir=/usr/lib \
      –with-mcrypt
  • 環境2
    • ./configure \
      –enable-mbstring \
      –enable-soap \
      –enable-zend-multibyte \
      –with-apxs2=/usr/local/apache2/bin/apxs \
      –with-mysql=/usr/local/mysql \
      –with-pdo-mysql=/usr/local/mysql \
      –with-curl \
      –with-curlwrappers \
      –with-gd \
      –with-jpeg-dir=/usr/lib \
      –with-png-dir=/usr/lib \
      –with-zlib-dir=/usr/lib \
      –with-mcrypt \
      –enable-libxml \
      –disable-all
  • 環境1には入っていて、環境2には入っていないモジュール
    • ctype
    • dom
    • filter
    • hash
    • iconv
    • json
    • pcre
    • PDO
    • pdo_mysql
    • pdo_sqlite
    • posix
    • session
    • SimpleXML
    • SPL
    • SQLite
    • tokenizer
    • xml
    • xmlreader
    • xmlwriter

結果

ファイルサイズ
環境1 環境2 環境2/環境1
(100%以下なら小さい)
libphp5.soのファイルサイズ(B) 17268191 11998616 69%
/usr/local/bin/phpのファイルサイズ(B) 16307443 11306924 69%
apache起動直後のメインプロセスVSZ (kB) 19572 17332 89%
apache起動直後のサブプロセスVSZ (kB) 19704 17468 89%
コマンドラインベンチマーク

コマンドラインにてfunction callの速度を計測。PHPのソースコードに付属している ./Zend/bench.php を利用。 5回実行した結果の平均を記載。

% php ./Zend/bench.php|awk ‘{print $2}’

環境1 環境2 環境2/環境1
(100%以下なら環境1が高速)
Webベンチマーク

Webでアクセスした際のパフォーマンス測定。コマンドラインと同じスクリプトを利用

環境1 環境2 環境2/環境1
(100%以下なら環境1が高速)

結論

Webで利用した場合は、環境1と環境2において差異は無さそう。

ファイル容量がモジュールを削減した分、20%程度減っているため、プロセス起動が頻繁に発生する場合に環境2はアドバンテージがある。

環境1
php env1

環境2
php env2

YMCのVPSサービスをフルに使う!

@YMCのVPSを借りました。
カスタマイズドなので、root権限でやりたい放題できます。

Xenで動いています。ゲストOSはCentOS 4.5 です。

しかしながら、初期状態ではいくつかいらないアプリケーションが元から入っているので削除します。

以下は、コマンドの意味がわかる方のみ実行してください!かなーり危険です。
Read more

Senna インストールメモ

2007年3月4日時点で、最新の安定版のライブラリを使った場合のSennaのインストールメモ。

Sennaとは、MySQLのFULLTEXT INDEXを日本語でも行えるようにするMyISAMテーブルの拡張モジュール。

以下のコマンドをコピペすればインストールが完了することを目的で書いています。

cd /usr/local/src

# mecab
wget http://superb-west.dl.sourceforge.net/sourceforge/mecab/mecab-0.94.tar.gz
tar zxf mecab-0.94.tar.gz
cd mecab-0.94
./configure --prefix=/usr --with-charset=utf8
make
make install

cd ..

# mecab dic
wget http://easynews.dl.sourceforge.net/sourceforge/mecab/mecab-ipadic-2.7.0-20060707.tar.gz
tar zxf  mecab-ipadic-2.7.0-20060707.tar.gz
cd mecab-ipadic-2.7.0-20060707
./configure --with-charset=utf8 --prefix=/usr
make
make install

cd ..

# senna
wget http://osdn.dl.sourceforge.jp/senna/24191/senna-1.0.1.tar.gz
tar senna-1.0.1.tar.gz
cd senna-1.0.1
./configure --prefix=/usr
make
make install
mkdir /var/senna
echo 'sjis' > /var/senna/senna.conf

cd ..

#mysql
wget http://www.rootman.co.kr/NFS2/APM/mysql-5.0.24.tar.gz
tar zxf mysql-5.0.24.tar.gz
cd mysql-5.0.24
patch -p1 < ../senna-1.0.1/bindings/mysql/mysql-5.0.24a.senna.diff
patch -p1 < ../senna-1.0.1/bindings/mysql/mysql-5.0.24a.senna.2ind.diff

libtoolize -c -f
aclocal-1.9
autoheader
automake-1.9 -c -a -i
autoconf
touch sql/sql_yacc.yy

CFLAGS="-O3 -mtune=nocona -I/usr/local/include" \
CXX=gcc CXXFLAGS="-O3 -mtune=nocona \
-felide-constructors -fno-exceptions -fno-rtti -I/usr/local/include" \
LDFLAGS="-L/usr/local/lib" \
./configure \
--prefix=/usr/local/mysql \
--with-charset=utf8 \
--with-extra-charsets=all \
--with-mysqld-user=mysql \
--with-senna \
--enable-thread-safe-client \
--enable-assembler \
--with-readline \
--with-mysqld-ldflags=-all-static \
--disable-shared

make
make install

計画停電の時に実行すべきLinuxコマンド

atコマンド

# at -t '200702100700'
at> shutdown -h now
Ctrl+D

これで動くのかは。。。。神のみぞ知る。

っていうのは嘘で、

# atq

で見られるっす。

Read more

Subversionで$Id:$をCVSのように置換する方法

SubversionではCVSのようにテキストファイル内に特定の文字列がある場合、
それを自動的に置き換えない。

Subversionの場合はファイルごとに文字列の置き換えを指定してあげないと
いけない。

1つ1つ置き換えるのは面倒なので以下のコマンドでカレントディレクトリ以下
にIDタグの置き換えを行う設定をできる。

% svn propset svn:keywords Id `find . \( -name .svn -prune \) -o -type f -print | xargs grep -l '\$Id:'`
% svn commit

レポジトリ自体の設定にできないのだろうか。。。

Red Hat ES3

Red Hat ES3のセットアップをしたんだけど,このディストリビューションはとても解りづらい...(TOT

up2dateができるまで一晩かかった...自分で1こ1こrpmをダウンロードしてインストールの繰り返し....rpmはRed Hat NetworkのWebからしか落とせない.ほんとやだ.

むかつく点 1
rpmコマンドでrpmファイルを指定してインストールするときにも順番が関係ある.

むかつく点 2
RPMの依存関係がめちゃくちゃ

むかつく点 3
up2dateのupdateがある...ほんとおわってる.

むかつく点 4
rpmダウンロードするのに100kbpsぐらいしか出ない.

MySQLのデータ復元,チェック,修復コマンド

http://dev.mysql.com/doc/mysql/ja/check-table.html

keywords:mysql table restore check repair

vim 置換

vimで、ファイル内の文字列を置換するコマンド。

・確認しながら置換
:%s/group/`group`/gc

・全部置換
:%s/group/`group`/g

About APOP

CNSガイドを書いていて,ちょっとためになったこと.

世の中で俗に言われている”APOP”.
「APOPはプロトコルか?」という疑問があがった.APOPを,POP3やIMAPなどと並列に扱ってよいのかどうかという問いかけがあった.

僕の中では,APOP=Authenticated Post Office Protocol と思っていて,POP3の拡張かと思っていた.しかし,それは間違いだった.

どうやら,POP3で規定されている1つのコマンドに,”APOP”がある.POP3コマンドのLIST,DELE,RETRコマンドと並列に扱うものだった.

数年前頃からセキュリティの意識が高くなり,APOPという言葉が流行りだしたが,APOPの認証方式の仕様自体は昔から規定された.

ここでかかれている内容は,いまいち正確ではない.正しいけど,抽象度が高く,勘違いを招く文章だ.
http://e-words.jp/w/APOP.html

そして,こちらがPOP3のRFC.
http://asg.web.cmu.edu/rfc/rfc1939.html

mail2entry

Joi Ito氏が作成したmail2entryという,メールからweblogに投稿できるスクリプトを設置した.そのインストールログを書いておく.

スクリプト自体は,Pythonでかかれており,実行環境として2.2必要が必要.

構築環境

mail2entry(20030506)
qmail-1.03 + localtime patch
python 2.2 + JapaneseCodecs
Redhat 9.0
Movable Type 2.64

インストール

  1. アーカイブをダウンロードする
    http://www.gweep.net/~aron/mail2entry/mail2entry20030506.tar.gz
  2. 展開して,その中にあるsettings.pyを自分の環境に合わせて編集する.設定項目はファイルにコメントとして書いてある.
  3. 設定ファイルが正しいかどうかテストする.アーカイブ中のINSTALLにかかれている実験方法が不親切なので,ちょっと細かく書く.
    1. テストをするメールファイルを用意する.(生のメールデータ) ファイルを用意するのがめんどくさい場合はこちらに用意してあるのを使ってください.(100px X 100px の画像が添付されたメール)
    2. 以下のように,mail2entry.pyのSTDINにメールファイルを流す.cat < メールファイル> | python mail2entry.py <setting.pyのあるディレクトリ>
    3. 例:cat message | python mail2entry.py .
    4. このコマンドを実行すると,/tmp/log-tracebacks.logに,スクリプトの実行結果が出るのでチェックする.エラーが無ければ成功.このメールファイルがちゃんと登録されると以下のようなエントリーが作成される.

    WS000.JPG

  4. 今回,MTAとしてqmailを用いているので,.qmailファイルに,あるメールアドレスに投げられたメールをmail2entry.pyに流す設定をする.
  5. 宛先となるユー残お.qmailファイルに,以下のような内容を書き込む.
    | /path/to/mail2entry.py /path/to/settings.py
  6. ちょっとつっこんだ話になるが,qmail-commandが実行されるときはumask066で動く.よって,qmailからmail2entry.pyが呼ばれ,新しいファイルが作成されるとotherに対して読み込み権限がつかないので、mail2entry.pyを適宜変更する.
  7. 上記を行って,メールを送信すると,おそらくエラーが発生する.エラーログ(/tmp/log-tracebacks.log)を参照して,適宜ファイル・ディレクトリのパーミッションを変更する.

Read more

 

リンク

自分の他サイト