古いおいぬま日報(不定期)のtDiaryなのですが、Ubuntu 8.10にしてからどうも調子が悪くて悩んでいます(*1)。というのは、tDiaryをapacheのmod_fcgid で動かしているのですが、CPU使用率100%近くなっているFastCGIのrubyプロセスがずっと残りっぱなしになっているようなのです。おかげで無駄にCPUリソースを食って非エコ状態になっています。
*1) 環境はUbuntu 8.10 + Apache 2.2.11 + mod_fcgid 2.2 + tDiary 2.2.0
apacheのエラーログには
[Mon Feb 16 20:17:26 2009] [notice] mod_fcgid: process /home/kazuhiro/www/diary/htdocs/index.fcgi(30333) exit(communication error), get stop signal 9
と何やらあやしげなログが出ているのですが、なぜ communication errorになるのかさっぱりわかりません。
該当プロセスをkillすればCPUリソース使い過ぎな状態は回避できるので、10分以上経ったrubyプロセスを強制的にkillするスクリプトをでっち上げてcronで動かすように。
#!/usr/local/bin/perl
# $ sudo aptitude install libproc-processtable-perl
use strict;
use Proc::ProcessTable;
my $pt = Proc::ProcessTable->new('cache_ttys' => 1);
for my $p (@{ $pt->table }) {
if ($p->cmndline =~ /^ruby.+index\.fcgi/) {
my $elapsed = time() - $p->start;
if ($elapsed > 60 * 10) {
$p->kill(9);
print sprintf "%s (%s) killed!\n", $p->pid, $p->fname;
}
}
}
mod_fcgidじゃなくてmod_fastcgiにすれば改善しそうな気もしますが、もうちょっと切羽詰まってから試してみようと思います。それにしてProc::ProcessTableモジュールは便利でした。
検索エンジン3社、正しいサイトURLを認識させるcanonical属性を導入(URLの正規化) :: SEM Rで取り上げられていますが、効果測定などのために「同じコンテンツを返すけど異なるURLを持つページ」で「正規のURLはこれだよ」と検索エンジンに伝えるcanonical属性のサポートがGoogle, Yahoo, Microsoftで始まったようです。
具体的には
http://www.example.com/?ref=rss
http://www.example.com/?ref=adwords
のように、/ のページに複数のURLがある場合に
<link rel="canonical" href="http://www.example.com/">
というタグを
タグ内に指定すると / を正規のURLとして扱ってくれるようにヒントを与えられる、ということです。なお、これはあくまでヒントであり、実際にどのURLが正規のものかは検索エンジンが最終的に判断するようです。
アクセス経路を判断するために、上のような方法でクエリ文字列にパラメータを指定しているようなサイトには非常に有用なのではないでしょうか。
個人的に気になったのは日本のモバイル版の検索エンジンもこの対応をしてくれるのかなということです。モバイルサイトの場合
http://www.example.com/?session_id=xyz
のようにセッションIDをURLにつけている場合が多いので、むしろモバイルサイトの方が有効利用されそうなんじゃないかと思いました。
Webサイト高速化の手法の一つとして、Steve Souders さんが唱えている”Minify JavaScript and CSS” (JavaScriptとCSSを圧縮せよ) というのがあります。若干今更感がありますが、ちょっとでも高速化するために、このブログで使用しているiNoveテーマのJSファイルをYUI Compressorを使って圧縮してみました。
YUI Compressorのインストール
例によってUbuntu 8.10な環境ですが、YUI CompressorはJava製なのでJDK 6.0を入れます。
$ sudo aptitude install sun-java6-jdk
終わったらYUI Compressorをダウンロードして解凍します(以後、解凍してできたディレクトリを$YUI_ROOTとします)。
WordPressのiNoveテーマで使っているJavaScriptファイルを圧縮
試しにこのブログで使用しているテーマiNoveのJavaScriptをYUI Compressorを使って圧縮してみます。
$ cd ~/tech/wp-content/themes/inove/js/
$ java -jar $YUI_ROOT/build/yuicompressor-2.4.2.jar menu.js > menu.js.new
結果は標準出力に書き出されるので、適当に別ファイルにでもリダイレクトします(-o でもOK)。出来上がったファイルのサイズを見てみると、下記のように5.8KBのファイルが4.0KBに減っているのがわかります。(約68%になりました)
$ ls -lh menu.js*
-rw-r--r-- 1 kazuhiro kazuhiro 5.8K 2009-02-13 00:21 menu.js
-rw-rw-r-- 1 kazuhiro kazuhiro 4.0K 2009-02-13 00:23 menu.js.new
こうやってどんどんファイルを小さくしていけば、クライアントの.jsファイルの取得が速くなるのでサイトの高速化が見込めます。どのぐらい速くなるかはクライアントの海鮮速度に大きく依存するので一概には言えませんが、ガンガン圧縮して試してみると良いと思います。
ただの自分用のメモですが。本家のショートカットのページで全部網羅されてます。
- Ctrl + T : 空のタブを開く
- Ctrl + Tab : タブを移動
- Ctrl + Shift + T : 最後に閉じたタブを復活(Tab Mix Plusを入れている場合)
- Ctrl + W : タブを閉じる
- Ctrl + F : ページ検索
- Ctrl + U : ページのソースを開く
- Ctrl + I : ページ情報を開く
- Ctrl + L : ロケーションバーを選択
- Ctrl + K : 右上のWeb検索にカーソルを移動
- Ctrl + J : ダウンロードマネージャーを表示
- Ctrl + Shift + K : Firebugを表示(Firebugを入れている場合のみ)
- Ctrl + Shift + L : Live HTTP Headersをサイドバーに表示(Live HTTP Headersを入れている場合のみ)
iTunesと連携して現在再生中の曲の歌詞をダウンロードして表示するソフトLyrics Masterというものを見つけました。ダウンロードしてきた歌詞をiTunes, iPodに保存することもできます。完全に自動的にiTunesに歌詞のデータを保存するのは難しいっぽいですが、これだけでも十分素晴らしいです。これでデジタル音楽ライフがまた少し盛り上がりそう。
しかもよく見たらMacだけでなくWindows版もありました。今までしらなかったことが悔やまれます…
「使ってみないとその善し悪しはわかりません」ということで、プロジェクト管理ツールであるRedmineをインストールしてみました。Installing Redmine通りにやっても微妙にうまくいかなかったので備忘録がてらメモを残しておきます。環境はUbuntu 8.10 + MySQL 5.0.67です。
事前準備
- Ruby 1.8.6 – 今回はUbuntu の 1.8.7 (2008-08-11 patchlevel 72) を使いました
- RubyGems 1.3.1
- Rake 0.8.3
- openssl
- RMagick
が必要です。まずはRubyGemsをダウンロードして解凍してインストールしましょう。
これがおわったらgemsでRakeをインストールします。
あとは openssl と rmagickです。
$ sudo aptitude install libopenssl-ruby librmagick-ruby
これで準備完了です!
Redmineのインストール
RubyForgeから0.8.0をダウンロードして解凍します(できたディレクトリを便宜上 $REDMINE_ROOT とします)。そして空のデータベースを作成しておきます。本家のドキュメントではproductionのDBしか作ってないですが、development, testも作っておくとよいでしょう。
mysql> create database redmine character set utf8;
mysql> create database redmine_development character set utf8;
mysql> create database redmine_test character set utf8;
DBを作成したら $REDMINE_ROOT/config/database.yml.example を database.yml としてコピーし、以下のように編集します。
--- config/database.yml.example 2008-12-30 19:09:27.000000000 +0900
+++ config/database.yml 2009-02-11 12:13:15.000000000 +0900
@@ -10,25 +10,28 @@
adapter: mysql
database: redmine
host: localhost
encoding: utf8
+ socket: /var/run/mysqld/mysqld.sock
development:
adapter: mysql
database: redmine_development
host: localhost
encoding: utf8
+ socket: /var/run/mysqld/mysqld.sock
test:
adapter: mysql
database: redmine_test
host: localhost
encoding: utf8
+ socket: /var/run/mysqld/mysqld.sock
test_pgsql:
adapter: postgresql
socket: /var/run/mysqld/mysqld.sock を足しているのは、何も設定しないと rails が/tmp/mysql.sock を参照するようになっていて、UbuntuのMySQLの設定とかみ合っていないからです。また、このsocketのパスは人によってはカスタマイズしているかもしれないので、うまくいかない場合は /etc/mysql/my.cnf を参照し、そこで指定しているパスと同じものを指定するようにしてください。また、username/password もデフォルトから変えている場合は、それも合わせて database.yml に変更を加えてください。
次にデータベースの初期設定を行ないます。本家のドキュメントによると RAILS_ENV=”production” を指定するようになっていますが、今回はお試しなので development でやってみます。
$ rake db:migrate RAILS_ENV="development"
終わったら $REDMINE_ROOT/tmp/{files,log,tmp} ディレクトリのパーミッションを変更します。
$ sudo chmod -R 777 files log tmp
今回は説明を簡素化するために端折ってますが、本来なら 777 の設定はよろしくないので、真面目にやるのであれば Webサーバを実行するユーザがこれらのディレクトリを所有するように chown するのがよいでしょう。
あとはfcgiスクリプトをコピーして、サーバを起動します。
$ cp public/dispatch.fcgi.example public/dispatch.fcgi
$ ruby script/server
問題なくサーバが起動したら http://サーバ名:3000/ にアクセスしてみましょう。下記のような画面が表示されればインストール完了です。

使ってみた感想
さっくり30分ぐらい使ってみた感想としてはインターフェースが簡素ということでしょうか。すごく質素なページしか表示されないので、最初何をやればいいのかよくわかりませんでした。チケットの新規発行はトラッカーは設定してないと使えなかったりとか、真面目にドキュメントを読まないとわからなかったりするので、もう少し初心者向けのチュートリアルがRedmine自体に組み込んであると良いのかなと思いました。
selene.GA4Kを入れてこのブログのモバイル版にもアクセス解析のコードをいれていたのですが、実際にやってみて思ったのは
- そもそもPCサイトとモバイルサイトではUIやリンク構造が全く違うので、直帰率とか1セッションあたりのPV数などごちゃ混ぜになってしまってデータがおかしくなってしまう
- selene.GA4Kはバグが多いし、フォーラムでの解答状況を見る限りサポートが手薄である。(この状態で商用利用では金取ろうってのがすごい)
ということでした。なのでGA4KやめてmyRTモバイルを使ってみようと思います。
コメント