アーカイブ
[MT4.2] 再構築時にデータベースへの問い合わせにかかる時間
MovableTypeではページの生成に非常に時間がかかる。
mod_perlやFastCGIを導入すればバイトコンパイルにかかる時間分を短縮できるが、再構築は分単位で時間がかかる処理のため、バイトコンパイルにかかる時間は無視できる程度になってあまり効果が出ないと思われる。
『MTからデータベースへのクエリの発行回数を減らす (mt-search.cgiを例にとって)。』ではデータベースへの問い合わせ回数を減らすことでページの生成時間を減らそうとしているが、アムダールの法則で、問い合わせにかかる時間が全体のうちに占める割合で効果が限定される。
自分の環境ではどうだろうかと思ってデータベースへの問い合わせにかかる時間を計ってみることにした。
環境は
| CPU | Celeron 2.0GHz |
| chip set | i865G |
| memory | PC2700 768MB |
| OS | FreeBSD 7.2 |
| DBMS | MySQL 5.0.77_1 |
| MovableType | 4.2.61 |
という感じで、ウェブサーバと同じマシンでmysqldを動かしている。
index_page.log
インデックスページのみを再構築したときのクエリログは上のようになった。
全体で449クエリ。そのうちSELECTが437クエリ、UPDATEが4クエリ、SETが8クエリ。
次にこのログを元にインデックスページ再構築時と同じクエリ列(query.txt)を作って
% time mysql -u root -ppasswd databese < query.txt > /dev/null
のようにして問い合わせ時間を計測した。
結果
0.086u 0.053s 0:02.13 6.1% 125+1371k 0+0io 0pf+0w 0.100u 0.046s 0:02.19 6.3% 87+977k 0+0io 0pf+0w 0.106u 0.034s 0:02.22 5.8% 130+1432k 0+0io 0pf+0w 0.115u 0.023s 0:02.20 5.9% 88+1001k 0+0io 0pf+0w 0.067u 0.074s 0:02.23 5.8% 109+1236k 0+0io 0pf+0w
となって5回平均で2.19秒かかっていることになる。
再構築時間が最短で13秒かかっているので、オーバーヘッドを含めずに17%程度がデータベースへの問い合わせにかかっている。
オンデマンドに問い合わせているだろうから、データベースサーバを置くマシンを別にしても大差ないだろう。
問い合わせ時間が0秒になっても10秒以上かかっていて、今のところ影響は少ないけど2割を超えてくると注意する必要があるかもしれない。
ftpコマンドで一括転送
ftpコマンドでファイルを一括転送するにはmget、mput、mdel内部コマンドをつかう。
>mget *.html
対話モードでは1ファイルごとにダウンロードするか聞いてくるのでprompt内部コマンドで非対話モードに切り替えておく。
[FreeBSD] iP4600の設定とPostScriptプリンタ化
Canon Pixus iP4600をFreeBSD鯖につないで設定。
パラレルポートは無いようなのでUSBで接続。
/etc/printcapを設定
iP4600|Canon Pixus iP4600:\ :sd=/var/spool/lpd/iP4600:\ :mx#0:\ :sh:\ :lp=/dev/ulpt0:\ :if=/usr/local/libexec/if-simple:\ :lf=/var/log/lpd-errs:
スプールディレクトリ/var/spool/lpd/iP4600を作っておく。
フィルタの/usr/local/libexec/if-simpleは/usr/share/examples/printing/if-simpleにあるのでそこからコピー。
これでsambaのprintingオプションをbsdにしておけばsambaが自動でプリンタを見つけてくれる。
Windows機からCanonのドライバで印刷すればOK。
[FreeBSD-users-jp 91344] Re: 動作 報告 Canon PIXUS MP810 ( スキャナ・プリンタ複 合機)
を参考にCanonが出しているCUPS用のフィルタでPostScriptプリンタ化。
http://cweb.canon.jp/drv-upd/bj/other.html#linux
から対象機種の機種別パッケージと共通パッケージをとってくる。
rpm2cpio /PATH/TO/cnijfilter-ip4600series-3.00-1.i386.rpm | cpio -ivd rpm2cpio /PATH/TO/cnijfilter-common-3.00-1.i386.rpm | cpio -ivd
でパッケージを展開。
/compat/linux以下にマージする。
cat psfile.ps | /usr/local/bin/gs -q -r600 -dSAFER -dNOPAUSE -dBATCH -sDEVICE=ppmraw -sOutputFile=- - | /compat/linux/usr/local/bin/cifip4600 --imageres 600 --media plain
とすれば印刷出きるので、/usr/local/libexec/psprint.shに
#!/bin/sh /usr/local/bin/gs -q -r600 -dSAFER -dNOPAUSE -dBATCH -sDEVICE=ppmraw -sOutputFile=- - | /compat/linux/usr/local/bin/cifip4600 --imageres 600 --media plain
と書いて、/etc/printcapに
ps|lp|PostScript Printer:\
:sd=/var/spool/lpd/ps:\
:mx#0:\
:sh:\
:lp=/dev/ulpt0:\
:if=/usr/local/libexec/psprint.sh:\
:lf=/var/log/lpd-errs:
のように追記すれば、PostScriptプリンタ化できる。
FreeBSD 7.2-RELEASE
FreeBSD 7.2-RELEASEが登場。
リリースノート
FreeBSD 7.2リリース(マイコミジャーナル)
FreeBSD 7.2-RELEASE登場,安定ブランチの最新版 – Jail仮想化機能IPアドレス強化とスーパーページ改善(gihyo.jp)
FreeBSD 7.2 注目の新機能(gihyo.jp)
自宅サーバを7.1から7.2にアップグレード。
『FreeBSD 7.1-RELEASE』のときと同じでfreebsd-updateからアップグレードできた。
16進ダンプする
ファイルなどを16進ダンプするにはod(octet dump)コマンドを使う。
>od -Ax -txC foo.jpg 0000000 ff d8 ff e0 00 10 4a 46 49 46 00 01 01 01 00 60 0000010 00 60 00 00 ff db 00 43 00 08 06 06 07 06 05 08 0000020 07 07 07 09 09 08 0a 0c 14 0d 0c 0b 0b 0c 19 12 0000030 13 0f 14 1d 1a 1f 1e 1d 1a 1c 1c 20 24 2e 27 20 0000040 22 2c 23 1c 1c 28 37 29 2c 30 31 34 34 34 1f 27 ...
もとは8進ダンプするコマンドだけど-tオプションで表示形式を選択できる。
-tに続くxで16進表示を指定。続くCでcharサイズごとに区切る。
-Axオプションはアドレスの表示形式を指定している。
xで16進を指定。
FreeBSDでRAMDISK
FreeBSDでは仮想ディスクを提供するドライバmdが用意されている。
mdconfigコマンドでmd*に仮想ディスクを追加、削除できる。
RAMディスクを作成するには。
# mdconfig -a -t malloc -s 256m -u 1
などとする。
-sにはサイズ、-uには/dev/mdに続くデバイスファイルの番号を指定する。
-tにはmalloc、vnode、swapが指定できて、mallocを指定した場合には記憶領域をmalloc(9)を用いて確保する。
あとは通常のディスク同様、
# newfs -U md1 # mount /dev/md1 /mnt
としてマウントする。
仮想ディスクを解放するときは、umountした後、
#mdconfig -d -u 1
として指定した番号の仮想ディスクを削除する。
mdmfsコマンドを使えば以上のことが1コマンドで出来る。
mdmfs -M -s 5m md2 /mnt
-Mオプションは記憶領域をmallocを用いて確保するように指示する。
GbEの速度
上ではGbE環境でのFTP転送スループットは最大で34.MB/sだった。
「おしえてブロードバンド 第52回:ギガビットイーサネットってどれくらい速いの?」
では最大で523.56Mb/s、つまり65.445MB/s、こちらのほぼ倍の速度が出ている。
もちろんこちらで計測したときにはファイルには書き込まず、GETしたデータはnullに捨ててた。
チップはRealtek8110SとMarvel88E8053のよう。
どこかにボトルネックがあるのだろうかと思ってlocalにftpしてみたら34MB/sぐらいしか出ていなかった。
どうやらサーバ側のディスクI/Oがボトルネックになっていたよう。
転送用ダミーデータをSATA接続のHDDに移してホスト1→ホスト3をもう一度計測してみた。
| ホスト | スループット |
| ホスト1→ホスト2 | 36.31MB/s |
※ホスト1:GbE-PCI2、ホスト2:Intel PRO/1000 MT Mobile Connection
やはりディスクI/Oがボトルネックになっていた。
ネットワーク速度がHDDの速度に追いついているということは遅延を考えなければ非常に快適な環境ということ。
ホスト1はFreeBSDのサーバ機。
カーネルオプションなどでディスクI/Oのスループットが上がったりするかも。
ネットワーク自体の速度はまた計測方法を考えよう。
MailmanでリストのURLを変更する
Mialman運用中にサーバのホスト名が変わったり、WWWのポートが変わったりするとMailmanが持っているリストのURLと食い違ってしまい、ウェブから設定などが出来なくなる。
リストのURLを変更するにはportsで入れた場合/usr/local/mailman/binにあるconfig_list管理コマンドで設定を変更する。
>list_config -o file_name list_name
で現在の設定がfile_nameに出力される。
>vi file_name
などで、ファイルに設定を記述する。
リストのURLを変更する項目はweb_page_url。
web_page_url = 'http://www.hoge.com/mailman/'
のようにMailmanスクリプトまでのURLを指定してやれば良いみたい。
>list_config -i file_name list_name
で設定を登録して完了。
デーモンを再起動する必要はなかった。
最近のコメント