eAcceleratorをインストールしてPHPを高速化する

eAcceleratorはPHPをコンパイルしたものをキャッシュして動作を高速化させるPHPの拡張機能。コンパイルされたPHPスクリプトを共有メモリにおいて実行する。共有メモリは実行時にロックされ一度にひとつのPHPのみ実行する。共有メモリにおけないものはディスクにおかれる。PHP4とPHP5で利用できる。

ここではVineのPHP5.2.6に対してeAccelerator0.9.5.3をソースコードからインストールする。

# apt-get install php5-devel
$ wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2
$ tar xfvj eaccelerator-0.9.5.3.tar.bz2
$ cd eaccelerator-0.9.5.3
$ phpize
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20060613
Zend Extension Api No: 220060519
$ ./configure
$ make
# make install

成功すればPHPのextension_dirにeaccelerator.soがコピーされる。

$ php -i | grep extension_dir
extension_dir => /usr/lib/php5 => /usr/lib/php5
$ ls /usr/lib/php5
bin/ build/ eaccelerator.so* mysql.so* mysqli.so* pdo.so* pdo_mysql.so* pdo_sqlite.so*
$

PHPの設定ファイルを編集(作成)する。ここでは/etc/php5/php.d/eaccelerator.iniを作成して以下を追加した。

extension="eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

iniの詳しい説明はここを参照。

上で定義したcache_dirを作成する。

$ mkdir /tmp/eaccelerator
$ chmod 0777 /tmp/eaccelerator/

Apacheを再起動してphpinfo()を表示。eAcceleratorの記述があるか確認する。

関連記事:
MySQLTunerを使ってMySQLを速くする

MySQLTunerを使ってMySQLを速くする

MySQLTunerはMySQLを診断して、いろいろアドバイスしてくれるプログラム。perlスクリプトで提供されているので、簡単に実行できる。なおWindowsでは動かないらしい。

ダウンロードして実行する。

以下のようなエラーが出た。

–forcememと–forceswapを指定して再実行。

いっぱい出てきたが[!!]で始まっているのはやばいやつみたい。そして最後のRecommendationsにお奨めの直し方が書いてあると思われる。

最初のやつは[Run OPTIMIZE TABLE to defragment tables for better performance]なのでテーブルを最適化してデフラグしろってことらしい。検索してみたところこのサイトが見つかった。以下のコマンドを実行すればよいらしい。ただしmysqlが動いている状態じゃないとだめとのこと。このサイトでは一時的にhttpdを止めることを推奨している。

これを実行後、再びmysqltunerを実行したところ、また同じRecommendationsが出たがmysqlを再起動後実行したら消えた。

次は[Reduce your overall MySQL memory footprint for system stability]だがメモリの使用量を減らせということだろうか?これはスルー。

次は[Enable the slow query log to troubleshoot bad queries]、まずいクエリーのログためにスロークエリログを有効に、ということらしい。スロークエリログとは、long_query_timeよりも時間がかかったクエリーのことらしい、これをログに取っておけばいろいろ調べられるということか。

これを有効にするにはmysqldの起動オプションに–log-slow-queries[=file_name]を加えるらしい。または以下の記述をmy.cnfに加えてもいいみたいだ。ここでは後者を採用。

これを記述後mysqlをリスタートし、/var/lib/mysql/log-slow-queries.logができていることを確認した。そのご再び、mysqltunerを実行してRecommendationsが消えたことを確認。

次が[Set thread_cache_size to 4 as a starting value]、スレッドキャッシュとはプールしておくスレッドの数のようだ。
my.confにthread_cache_size=4を記述して終了。

あとのRecommendationsはSQLを発行する側の問題だと思うので、これで終了。

次に[Variables to adjust]で以下の指摘がなされている。

query_cache_size (>= 8M)
tmp_table_size (> 32M)
max_heap_table_size (> 16M)

my.cnfに以下のように書いた。

query_cache_size=8M
tmp_table_size=32M
max_heap_table_size=16M

query_cache_sizeはその名のとおりクエリの結果をキャッシュしておくものだと思うが、これを付けたら速くなった気がする。このwordpressの一番下のHTML convert timeがリロードしたとき速くなった。

結局[!!]で始まるものは[!!] Maximum possible memory usage: 310.7M (121% of installed RAM)]以外消せたのでよしとしよう。

関連記事:
eAcceleratorをインストールしてPHPを高速化する

eclipse 3.4にPDT 2.0をインストールする

Javaランタイムはインストールされているものとする。

eclipseのダウンロードページでEclipse Classic 3.4 (151 MB)をダウンロードする。現時点ではeclipse-SDK-3.4-win32.zipになっている。

C:\eclipseに解凍しC:\eclipse\eclipse.exeを実行する。

[Help]→[Software Updates…]を実行する。

上のように[Graphical Editing Framework GEF]をチェックし[Install…]をクリックしてインストールする。インストールが成功すると、eclipseの再起動を促されるので再起動する。

[Help]→[Software Updates…]を実行し、[Manage Sites…]をクリックし下図のように[http://download.eclipse.org/technology/dltk/updates/]をチェックする。

つぎに以下のように[Dynamic Languages Toolkit – Core Frameworks]をチェックしInstallをクリックする。

PDTのダウンロードサイトへいき、[2.0.0 Integration Build]へいき、[PDT Runtime]のファイルをダウンロードする。ここではorg.eclipse.php_feature-I20080917.zip(6.01Mb)をダウンロードした。これを適当なディレクトリに解凍する。

[Help]→[Software Updates…]を実行し[Add Sites…]をクリックし[Local…]をクリックし、さっき解凍したeclipseディレクトリを指定し、ダイアログを閉じた後以下のように[PDT Feature]をチェックし[Install…]をクリックする。

関連記事:
eclipse PDTとXdebugを使ってphpをリモートデバッグ

PEARを使ってみた

PEARはPHP Extension and Application Repositoryの略で、PHPのライブラリを集めたものです。ライブラリはパッケージと言う単位で構成されます。PEARはそれとともにパッケージのインストーラー(パッケージマネージャ)であるpearコマンドも提供します。

パッケージの一覧はここで見ることができます。

pearコマンドの使い方

pearでパッケージをインストールする前に、それらがphpでちゃんと利用可能になっているか確認しなくてはなりません。つまりpearでインストールされたファイルがphpから見えるようになっていなければなりません。そのためにまず以下のコマンドを実行して、pearの”PEAR directory”を確認します。

$ pear config-get php_dir
/usr/share/php5-pear
$

つぎに、phpinfo();をブラウザで表示して、phpのinclude_pathディレクティブに上記のパスが含まれているか確認します。

上記のことを確認したら以下のファイルを作りブラウザで表示させます。

System.phpはpearのphp_dirに存在するはずなので、このファイルをブラウザで開いてブラウザやサーバのログにphpのエラーがでなければ、pearは使えることになります。

インストールされているパッケージを表示

$ pear list

インストールされているパッケージの情報を表示

$ pear info

リポジトリからパッケージを検索

$ pear search aaa

HTML_Menuをインストールしてみる

# pear install HTML_Menu
Did not download optional dependencies: pear/HTML_Template_Sigma, use --alldeps to download automatically
pear/HTML_Menu can optionally use package "pear/HTML_Template_Sigma"
downloading HTML_Menu-2.1.4.tgz ...
Starting to download HTML_Menu-2.1.4.tgz (14,295 bytes)
.....done: 14,295 bytes
install ok: channel://pear.php.net/HTML_Menu-2.1.4

インストールされたファイルを確認。

# pear list-files HTML_Menu
Installed Files For HTML_Menu
=============================
Type Install Path
doc /usr/share/php5-pear/doc/HTML_Menu/examples/data/menu.php
doc /usr/share/php5-pear/doc/HTML_Menu/examples/templates/sigma.html
doc /usr/share/php5-pear/doc/HTML_Menu/examples/templates/sigmatree.html
doc /usr/share/php5-pear/doc/HTML_Menu/examples/directtree.php
doc /usr/share/php5-pear/doc/HTML_Menu/examples/sigma.php
doc /usr/share/php5-pear/doc/HTML_Menu/examples/sigmatree.php
doc /usr/share/php5-pear/doc/HTML_Menu/examples/types.php
php /usr/share/php5-pear/HTML/Menu/ArrayRenderer.php
php /usr/share/php5-pear/HTML/Menu/DirectRenderer.php
php /usr/share/php5-pear/HTML/Menu/DirectTreeRenderer.php
php /usr/share/php5-pear/HTML/Menu/Renderer.php
php /usr/share/php5-pear/HTML/Menu/SigmaRenderer.php
php /usr/share/php5-pear/HTML/Menu/SigmaTreeRenderer.php
php /usr/share/php5-pear/HTML/Menu.php
php /usr/share/php5-pear/HTML/MenuBrowser.php

docとついているものはドキュメントなのでこれらを参考にする。ここではexmapleディレクトリ以下を全部サーバに持ってきてテストしてみた。

directtree.phpを開くと以下のようになった。

sigma.phpを開くと以下のようなエラー。
Warning: require_once(HTML/Template/Sigma.php) [function.require-once]: failed to open stream

テンプレートが使えるらしくてファイルが見つからないらしいが、スルー。

終わり。

sortコマンドの練習

以下のファイルfileがある。

bbb@example.jp
trueff@mail.goo.ne.jp
aaa@example.com
aaa@example.jp
aaa.bbb@example.jp
ambiesoft.trueff@google.com
ccc@example.com

これをドメイン別にソートし、その後名前順にソートしたい。

普通にsortコマンド使うと以下の用になる。
$ sort file
aaa.bbb@example.jp
aaa@example.com
aaa@example.jp
ambiesoft.trueff@google.com
bbb@example.jp
ccc@example.com
trueff@mail.goo.ne.jp

当然ドメイン別になってくれない。

sortのマニュアルを読むと-t でセパレータを指定でき、-kでどのフィールドでソートするかを指定できる。そこで以下のようにやってみた。

$ sort -t @ -k 2 file
aaa@example.com
ccc@example.com
aaa.bbb@example.jp
aaa@example.jp
bbb@example.jp
ambiesoft.trueff@google.com
trueff@mail.goo.ne.jp

上記コマンドの-k 2は2番目から最後までのフィールドでソートする意味。よってドメインでソートされる。しかしドメイン順になったが、aaa.bbb@example.jpの方がaaa@example.jpより先に来ている。よって以下の様にやってみた。

$ sort -t @ -k 2 -k 1,1 file
aaa@example.com
ccc@example.com
aaa@example.jp
aaa.bbb@example.jp
bbb@example.jp
ambiesoft.trueff@google.com
trueff@mail.goo.ne.jp

-k 1,1は最初のフィールドだけを見てソートするの意味。-k 1だと最初から最後までを見てソートする意味になってしまう。

終わり。

lsattrとchattrコマンド

これらはLinuxカーネル2.6で追加されたコマンド、従来のlsとchmodに対応というより拡張するext2 固有なフラグ。

lsattrコマンドを実行すると、現在のフラグを表示する。フラグには”acdijsuADST”などの種類がある。主なものの意味は以下のとおり。

a : ファイルの追加書き込みのみ許可する。(append)
c : ファイルを圧縮してディスクに保存する。アプリレベルは影響を受けない。(compress)
d : dumpでバックアップの候補にしない。(dump)
i : ファイルの変更を許可しない。削除もリネームもできない。このファイルへのリンクも作成できない。(immutable)
s : ファイルの削除後、ブロックをゼロクリアする。(secure?)
A : ファイルがアクセスされたとき、atimeを更新しない。
D : ディレクトリが変更されたとき、すぐにディスクに書き込む。
S : ファイルが変更されたとき、すぐにディスクに書き込む。(Sync?)

chattrコマンドを使ってフラグを変更できる。

$ chattr +c file
とすれば、ファイルfileにc属性を追加する。

$ chattr -c file
とすればc属性を削除する。

$ chattr =c file
とすればc属性を追加し、他の属性はクリアされる。

$ chattr -R +c dir
とすればディレクトリdir配下に再帰的に属性cを追加する。

Ubuntu8.04でWineを使ってGoogle Chromeを動かす

wineのインストール。

$ sudo apt-get install wine
$ wine --version
wine-1.0
$

Wineのバージョンが1.1.4以下の場合は以下のようにして、ソフトウェアソースにWineのレポジトリを加える。
[システム]→[システム管理]→[ソフトウェア・ソース]を起動後、サードパーティのソフトウェアに以下のレポジトリを加える。

deb http://wine.budgetdedicated.com/apt hardy main

http://wine.budgetdedicated.com/apt/387EE263.gpgをダウンロードしてapt-keyで追加する。その後wineをupgradeする。

$ sudo apt-key add 387EE263.gpg
OK
$ sudo apt-get update
$ sudo apt-get upgrade
$ wine --version
wine-1.1.4
$

ここからGoogle Chromeをダウンロードしてwineで実行する。

$ wine chrome_installer.exe

この後起動するとエラーになる。wintricksを使ってcorefontsを入れる。

$ sudo apt-get install cabextract
$ wget http://www.kegel.com/wine/winetricks
$ chmod +x winetricks
$ ./winetricks corefonts tahoma

以下のコマンドで起動。

wine ~/.wine/drive_c/windows/profiles/$USER/Local\ Settings/Application\ Data/Google/Chrome/Application/chrome.exe --new-http --in-process-plugins

しかし、これだと漢字が表示されない。~/.wine/drive_c/windows/Fonts/に日本語フォントがあればちゃんと表示できる。

参考:
http://tombuntu.com/index.php/2008/09/05/how-to-install-google-chrome-in-ubuntu-with-wine/

関連記事:
Google Chome インストールメモ
Ubuntu 8.04でWineを使う

Google Chrome インストールメモ

Googleが出したブラウザGoogle Chromeを使ってみました。

UIがとてもシンプルできれいです。基本的な特徴はこのページからみることができます。またこのページに開発までの経緯を漫画化したものが公開されています。

タブを自由に動かして新しいウインドウにしたり、他のウインドウにタブとしてくっつけたりできます。

タブの1つ1つが1プロセスになっています。タスクマネージャで見るとchrome.exeがタブを開くごとに起動されています。これにより、一つのページでJavascriptが無限ループなどしても、他のタブに影響しないなどの利点があるそうです。IE7では多分タブごとにスレッドになっていて、Firefoxでは全部1プロセスでやっているので、ここが内部的な大きな違いだと思います。またブラウザのバグで落ちるとしても、一つのタブだけですむものと思われます。

あと、シークレットウインドウというのがあり、ここでブラウズしたページやクッキーは閉じた後キャッシュに残らないので安全だそうです。

インストール時にGoogleUpdate.exeがスタートアップに登録され常駐します。何をするものかよくわかりませんが消したい場合は以下のレジストリの値を削除します。

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\Google Update

またタスクとしてスケジューラにアップデートプログラムが登録されます。コントロールパネルのタスクから削除できます。

オムニボックス(アドレスバー)に以下の文字列を入力していろいろな情報が見れます。

  • about:version
    バージョン情報や、User-Agent情報
  • about:memory
    メモリ使用状況
  • about:plugins
    プラグイン情報

このソフトはオープンソースで、ソースコードの取得やビルド方法はここに記述されています。Visual Studio 2005でビルドするようです。

msiなどのWindows Installerを使ったアプリのインストールが失敗する

Windowsのインストールシステムを使ってアプリケーションなどをインストールすると意味不明なエラーで失敗することが多々あります。とくに自分でファイルなどを削除してしまった場合、そのアプリの再インストールをすると失敗することが多いです。

Windows Installer CleanUp Utilityを使うとインストールの構成情報を削除することができ、これによってインストールを成功させることができることがあります。

Windows Installer Clean Up

対象のアプリを選択して、Removeをクリックすると構成情報を削除することができる。

このツールで構成情報を削除した後に同じアプリをインストールする場合は、前と同じフォルダにインストールした方がいいと思います。