USBメモリはHDDに比べ、速度が遅く、読み書き回数が寿命に影響を与えるデバイスです。
そこで2GBも入っている物理メモリが遊んでいる事だし、Apache HTTP サーバ(httpd)の2.2から使用可能になったMemory cacheを有効にしてみました。
ちなみに元々のhttpdは、インストール直後のFedoraにyum install httpdで入れたままのものです。
現状をCheck&Try
まずはデフォルトのサーバを調べます。
# ps aux | grep httpd /* 今動いているサーバを確認 */ nobody 1996 0.1 1.8 259540 35092 ? S 12:33 0:39 /usr/sbin/httpd # /usr/sbin/bin/httpd -v Server version: Apache/2.2.14 (Unix) # /usr/sbin/httpd -M | grep cache /* 現在有効になっているキャッシュモジュールを調べる */ cache_module (static) disk_cache_module (static) Syntax OK
調べてみるとCacheモジュールとDiskキャッシュは有効になっているけれど、Memory Cacheは入ってない状態。後からモジュールを追加できる動的共有オブジェクト (DSO) で有効にできないかとmod_mem_cache.soを探したけど見つからず。
公式(Download – The Apache HTTP Server Project)からダウンロードしたhttpd-2.2.15.tar.gzには入っていたけれど、コピーしてただ読み込ませてもエラーが出て使えません。うーん、入った状態のものを1からビルドしないとダメと結論。
諦めてmake初挑戦
にわかなので初めてmakeとかしました。gccすら入ってなかったし。最新のhttpdは前述の公式からtmpに落としておきます。
# yum check-update # yum update # yum install gcc # cd tmp # tar xvzf httpd-2.2.xx.tar.gz # cd httpd-2.2.15
configureのパラメータですが、Apache 2.2でWebサイトをパフォーマンスアップ!(2/3) - @ITを参考にさせてもらっています
# ./configure --prefix=/usr/sbin --enable-cache --enable-disk-cache --enable-mem-cache # make
ちなみに–prefix=でインストール予定のパスを指定するらしい。
緊張しながら待つと無事に終わったらしい。一応ログを追っかけてErrorが無いか確認。問題なさそうなのでインストールします。
# /etc/init.d/httpd stop /* 今のサーバを停止 */ # make install
非力なATOM330ですが、処理自体は10分前後という所。無事に終わってやったぜ\(^o^)/と思ったらhttpd開始できず/(^o^)\ナンテコッタイ
# cd /etc/inietc/init.d/httpd start httpd を起動中: /bin/bash: /usr/sbin/httpd: No such file or directory [失敗]
いろいろ調べた結果、httpdの場所が変わってしまったのと、それによりぷつぷつリンクが切れてしまったのが原因らしい。
# find / -name httpd /usr/sbin/bin/httpd /* ナゼかsbinの下のbinディレクトリに入ってしまった */ # find / -name httpd.conf /usr/sbin/conf/httpd.conf /* httpd.confはこれを参照している模様 */ # rm /usr/sbin/conf/httpd.conf # ln -s /etc/httpd/conf/httpd.conf /usr/sbin/conf/httpd.conf /* 元々のhttpd.confを見に行く様にする */
2010/06/05 追記
httpdのスタートアップスクリプトである/etc/init.d/httpdもパスの修正が必要
修正前:httpd=${HTTPD-/usr/sbin/httpd}
修正後:httpd=${HTTPD-/usr/sbin/bin/httpd}
これで/etc/init.d/httpdでstart|stop|restartできます。
気を取り直してまた起動をかけてみる
# /etc/init.d/httpd start httpd を起動中: httpd: Syntax error on line 148 of /usr/sbin/conf/httpd.conf: module auth_basic_module is built-in and can't be loaded [失敗]
また失敗。調べてみるとこのメッセージは、「LoadModuleで組み込もうとしているDSOが、すでに有効になっている場合に出る」という事らしい。今httpd本体に組み込まれているモジュールを
/usr/sbin/bin/httpd -l
で調べ、httpd.confにてかぶっているLoadModuleを片っ端からコメントアウトしていきます。そしてもう一度httpd start.ちゃんとOKになったヽ( ゚∀゚)/ 正常に動いた後は、httpd.confにMemory cacheの設定を追加してリスタートしてあります。
<IfModule mod_cache.c> CacheIgnoreNoLastMod On <IfModule mod_mem_cache.c> CacheEnable mem / MCacheSize 512000 MCacheMaxObjectCount 9000 MCacheMinObjectSize 1 MCacheMaxObjectSize 1024000 MCacheMaxStreamingBuffer 128000 CacheIgnoreCacheControl On CacheStorePrivate On </IfModule> </IfModule>
MySQLのDBが壊れてた
あとは徒労日記が表示できれば完了。のハズだったんですが、「データベースに接続できません」という予想外のエラーを言われて凹む_| ̄|● その後の調査の過程で、DBをバックアップしようとしたところ、エラーが出て取れない事に気がつく。
# mysqldump -u root -p —all-databases > dump.sql Enter password: mysqldump: Got error: 145: Table ‘./wp/wp_options’ is marked as crashed and should be repaired when using LOCK TABLES
修正を試みたところ、無事に直った。
# mysql -u root -p mysql> use wp; mysql> check table wp_options; +———————-+———-+—————+—————————————————————————————+ | Table | Op | Msg_type | Msg_text | +———————-+———-+—————+—————————————————————————————+ | wp.wp_options | check | warning | Table is marked as crashed | | wp.wp_options | check | warning | 2 clients are using or haven’t closed the table properly | | wp.wp_options | check | error | Record at pos: 486376 is not remove-marked | | wp.wp_options | check | error | record delete-link-chain corrupted | | wp.wp_options | check | error | Corrupt | +———————-+———-+—————+—————————————————————————————+ 5 rows in set (0.02 sec) mysql> check table wp_options extended; +———————-+———-+—————+—————————————————————————————+ | Table | Op | Msg_type | Msg_text | +———————-+———-+—————+—————————————————————————————+ | wp.wp_options | check | warning | Table is marked as crashed | | wp.wp_options | check | warning | 2 clients are using or haven’t closed the table properly | | wp.wp_options | check | error | Record at pos: 486376 is not remove-marked | | wp.wp_options | check | error | record delete-link-chain corrupted | | wp.wp_options | check | error | Corrupt | +———————-+———-+—————+—————————————————————————————+ 5 rows in set (0.00 sec) mysql> repair table wp_options; +———————-+————+—————+———————————————————————————+ | Table | Op | Msg_type | Msg_text | +———————-+————+—————+———————————————————————————+ | wp.wp_options | repair | info | Wrong bytesec: 129-159-228 at 486376; Skipped | | wp.wp_options | repair | info | Wrong bytesec: 129-159-228 at 486376; Skipped | | wp.wp_options | repair | info | Found block with too small length at 170576; Skipped | | wp.wp_options | repair | info | Found block that points outside data file at 173996 | | wp.wp_options | repair | info | Found block that points outside data file at 174096 | | wp.wp_options | repair | info | Found block that points outside data file at 174452 | | wp.wp_options | repair | info | Found block that points outside data file at 176244 | | wp.wp_options | repair | warning | Number of rows changed from 258 to 251 | | wp.wp_options | repair | status | OK | +———————-+————+—————+———————————————————————————+ 9 rows in set (0.03 sec) mysql> check table wp_options extended; +———————-+———-+—————+—————+ | Table | Op | Msg_type | Msg_text | +———————-+———-+—————+—————+ | wp.wp_options | check | status | OK | +———————-+———-+—————+—————+ 1 row in set (0.00 sec) mysql> quit
この後は問題無くBlogが表示された。
何かのタイミングでデータベース(wp)が壊れていた事が原因みたい。これで少し快適&延命になるかな。