CPU交換の改善効果&ネットワーク障害の改善

ヤマレコのサーバ状態をmuninというツールを使って可視化しています。
今回、CPU交換とネットワーク障害回復の影響が見て取れました。
変化が見えたものを中心に、過去1週間のグラフを載せておきます。

CPU交換

9/16の夜にサーバCPUをAthron X2からPhenom II X4 810に差し替えました。
マザーボードは変えていないので、FSBの周波数向上などの恩恵は得られていませんが、単純にCPUコア数が増えた効果がありました。


CPUの交換作業は数分で終わり、特に問題も起きませんでした。
体感速度が上がったかというと、いまいち良く分からないのですが、たぶん向上したのでしょう。



CPU利用率:コア数が2から4になって、夜間のバッチ処理でもCPUに余裕が出るようになりました。



LoadAverage:特に変化なし。CPUのコアあたりの負荷量は変わってない。



MYSQL slow queries:CPUが向上して、応答性能が改善した結果、Slow Queryの量が減りました。本来はSQL文を見直すべきですが。。。


ネットワーク障害の改善

9/15までの数日間、ネットワークが異常に遅くなっており、試しにPINGを打つとパケットロスが80%に達していました。
体感速度も異常に遅くなっていたのですが、ケーブルの挿抜とルータの再起動で症状が直りました。



active connections:ネットワークの不具合がなくなったことで、同時コネクション数も削減。



MYSQL threads:1コネクション当たりの処理時間が短くなり、Query当たりの処理時間が短くなった結果、スレッドを同時に立ち上げなくて良くなった。


たぶん子供が自宅サーバのLANケーブルを触って不具合が起きたんだと思います。
本当はレンタルサーバを借りて信頼性のあるネットワーク上に置きたいのですが、ヤマレコの広告収入だけでは月数万ものお金を出せる状況ではないし、現在はどうしようもないです。
何とかしたいなぁ。

xoopsの携帯対応まとめ(導入編)

今週末は、xoopsの携帯対応で試行錯誤していました。


2009.7.26時点の実現方法は2種類あります。

  1. WizMobileで対応する方法
  2. HypCommonFuncの携帯対応レンダラー機能を使う。

両方調べたので、解説を残しておきます。

WizMobile

1.ダウンロード&インストール

配布元がダウンしているとのことで、XUGJのWizMobileページから最新版をダウンロードします。(2009.7.26時点で、ver0.42)


設置方法は上記ページに記載してあるので、その表記に従います。

2.テンプレート

携帯用テンプレートの置き場所は、デフォルト設定で以下になります。

XOOPS_ROOT_PATH/themes/mobile/templates/


上記のページに、各モジュールのテンプレートを置いて、カスタマイズします。
置き方は色々あるらしいのですが、「テーマ下テンプレート」という方法を使いました。


各モジュールのtemplates配下、およびtemplates/blocks配下のファイルを

XOOPS_ROOT_PATH/themes/mobile/templates/

に置きます。


例えば、minidiaryの場合

XOOPS_ROOT_PATH/themes/mobile/templates/yd_detail.html
XOOPS_ROOT_PATH/themes/mobile/templates/yd_diarylist.html
...
XOOPS_ROOT_PATH/themes/mobile/templates/yd_viewcomment.html
XOOPS_ROOT_PATH/themes/mobile/templates/b_diarylist.html

という感じになります。
blocks配下のファイルも、他のモジュールのファイルも全部同じフォルダに入れるのがポイントですね。


また、テーマファイルは

XOOPS_ROOT_PATH/themes/mobile/templates/theme.html

のみをカスタマイズすれば良いです。


携帯向けのテンプレートはモバイルテンプハウスMBXoopsなどで配布されているので、これらのファイルをベースにするとカスタマイズの手間が省けます。WizMobileも携帯対応レンダラーも同じファイルを使えます。

3.絵文字対応

PHP5.2以上であれば、絵文字の機能を使えます。


絵文字の機能を使うためには、モジュールの管理画面で
「携帯対応モジュール」→「一般設定」→「絵文字入力支援」
をONにします。


携帯電話から絵文字を含む文章を登録すると、自動的にsmartyに変換し、携帯で表示させるときにはキャリアに応じた絵文字コードに変換してくれるようです。


また、PCからはXoopsの顔文字欄の「もっと」というリンクをクリックし、Popupした画面の右上に「絵文字」という欄が追加されています。ここから絵文字を入力できます。


携帯用のテンプレートにも絵文字を入れられます。
[emj:xxx(:im|ez|sb)]と書けば入力できます。xxxの部分に、各キャリアの絵文字番号を入れます。


キャリアの識別子は省略可能で、省略するとdocomo用のものになるようです。
・im: docomo
・ez: au
・sb: softbank
です。


例えば、[emj:113:ez]と書くと、AUの113番目の絵文字(チューリップの花)になります。


絵文字の番号は以下から調べられます。
docomo: 基本絵文字拡張絵文字
拡張絵文字は、1000を加えます。たとえばクローバーの場合、[emj:1054]のように記載します。
au: 絵文字一覧
softbankはどこで公開されているのか、分かりませんでした。


ちなみに、絵文字対応にはText_Pictogram_MobileというPEARのパッケージを使っているようです。version 0.42では、「XOOPS_TRUST_PATH/wizin/lib/PEAR/Text/Pictogram/Mobile」に同梱されています。

携帯対応レンダラー(HypCommonFunc)

1.ダウンロード&インストール

HypCommonFuncのページから入手します。(2009.7.26時点で、HypCommonFunc_20090626.zip)
インストールも手順に沿って行えば、特に問題はおきませんでした。

2.テンプレート

携帯用テンプレートの置き場所は、デフォルト設定で以下になります。

XOOPS_ROOT_PATH/themes/ktai_default/templates/


上記のページに、各モジュールのテンプレートを置いて、カスタマイズします。


「テーマ下テンプレート」の場合は、各モジュールのtemplates配下、およびtemplates/blocks配下のファイルを

XOOPS_ROOT_PATH/themes/ktai_default/templates/

に置きます。


例えば、minidiaryの場合

XOOPS_ROOT_PATH/themes/ktai_default/templates/yd_detail.html
XOOPS_ROOT_PATH/themes/ktai_default/templates/yd_diarylist.html
...
XOOPS_ROOT_PATH/themes/ktai_default/templates/yd_viewcomment.html
XOOPS_ROOT_PATH/themes/ktai_default/templates/b_diarylist.html

という感じになります。
こちらもWizMobileと同様に、blocks配下のファイルも、他のモジュールのファイルも全部同じフォルダに入れるのがポイントですね。


また、テーマファイルは

XOOPS_ROOT_PATH/themes/mobile/templates/theme.html

なのですが、表示をカスタマイズするには上記では不十分です。

XOOPS_TRUST_PATH/class/hyp_common/ktairender/templates/default/header.html
XOOPS_TRUST_PATH/class/hyp_common/ktairender/templates/default/body.html
XOOPS_TRUST_PATH/class/hyp_common/ktairender/templates/default/footer.html

なども必要に応じて修正します。
RSSのリンクを消したかったのですが、定義されている場所を追い切れませんでした。


携帯向けのテンプレートはモバイルテンプハウスMBXoopsなどで配布されているので、これらのファイルをベースにするとカスタマイズの手間が省けます。WizMobileも携帯対応レンダラーも同じファイルを使えます。

3.絵文字対応

((i:xxxx))と記載します。括弧は半角です。xxxxの部分は、docomoS-JISコードの16進数を記入します。
((i:f98e))とか((i:f952))のような感じです。


文字コード
docomoの基本絵文字
docomoの拡張絵文字
を見るか、絵文字入力支援ソフトを使って調べます。


また、WizMobileと同様に、[emj:xxx(:im|ez|sb)]のフォーマットにも対応予定のようです。(動作未確認)
■参考: http://mbxoops.net/modules/d3forum/index.php?topic_id=62

雑感

配布元サイトが落ちていたり、導入に関する情報がバラバラになっていたりと、非常に分かりにくかったです。
みんなちゃんと導入できているんだろうか・・・。
そもそも上記で正しいのかも不安ですし。


今回の内容が、Xoops携帯対応の参考になれば幸いです。

xoopsのセッションを延長して、データ消えを回避


ヤマレコでは、cubeUtilのオートログイン機能を使っています。


セッションを使ってPOSTするようなFormがあるときに、セッションの有効期限が切れていると「Retry Post」というメッセージが出て、入力FormのPOSTデータが消えてしまうことがあるようです。

この問題が起きるたびに、
「1時間頑張って書いた記録が消えた、どうなってるんだ」
みたいな、
書いた人の状況を考えると、
「こんなシステム、もう二度と書いてやるか」
と思いそうな不具合報告を受けるので、何とかして回避したいと思ってました。


今回は暫定対処として、まずはセッションの持続期間を長くして、セッション切れが起きにくくなるようにしました。
セッションハイジャックの危険性が上がるので、セキュリティ的には問題だし、時間を延ばすだけなのでPOSTデータが消えるという問題は解決しないのですが、それも仕方ないかと。

対処内容

xoopsの全般設定メニューにセッション関連の項目があります。
「セッションの設定をカスタマイズする」⇒ 「はい」にチェック
「セッションがタイムアウトするまでの時間」⇒ 時間を指定


これだけでうまくいくのかと思ったのですが、まだ30分ぐらい経つとデータが消える症状が出ました。
で、Cookieの有効期限を確認しましたが、設定していた時間になっていました。


だとするとサーバ側のデータが消されているんだろうと推測し、php.iniの設定を変更しました。


例えば、60分にする場合は

session.gc_maxlifetime 3600

とすればOK。


また、.htaccess

php_value session.gc_maxlifetime 3600

と指定してもいいようです。


これでとりあえず治ったようなのでひと安心。

HDD交換でサーバ機止まる。


うちのサーバはメイン機とバックアップ機があって、毎晩差分バックアップを取る構成を取っています。
今回バックアップ機の入れ替えをしたんですが、結局メイン機まで影響が出てしまいました。


まずは、何が起こったか、メモだけ残しときます。

日曜(6/14)

  • バックアップ機のHDDを追加。
  • バックアップ機の旧HDDから新HDDにrsyncでコピーしようとするが、エラーを吐いて止まる。
    • エラーメッセージは、error in rsync protocol data stream (code 12) みたいな感じでした。
    • なんかデータサイズが大きいファイルがあることが原因らしい。
  • 仕方ないので、「次のバックアップ時間まで待つか」、と思いバックアップ機を再起動しておく。

月曜(6/15)

  • 2:00 バックアップ開始(バックアップ機のマウントが失敗していて、実際はメイン機が固まる)
  • 7:00 トップページが見れないよ、と言われ、症状に気づいてメイン機を強制リブート・・・でもうまく動かない。
    • トップページ以外のページはちゃんと見れた。
  • ここで、バックアップ機のマウント状況をチェックすると、新HDDをマウントできていなかった。
    • nfsのmount失敗に気づく。
  • 新HDDをmountしたら、バックアッププロセスが今さら動き出す・・・でもトップページは表示できない。
  • 「ひょっとしてDB壊れたか?」
  • DBチェックをしてみる。
    • # mysqlcheck -h localhost -u root -p -a -o -A
  • 原因が分からないので、怪しいブロックも外してみる ⇒ とりあえず表示できた。

(しばらく様子見)

  • やっぱり表示できない。でもたまに表示されるので、違う気がしてきた。
  • プロセスをtopで見てみる。⇒ Dで止まってるhttpdプロセスが大量にある・・・
  • statusのDって何かと調べたら、IOWaitで止まっているプロセスのことらしい。
  • 「あ、よく考えたらバックアップ動かしたままだ。」と気づく。
  • バックアップを止めてみる。 ⇒ ちゃんと動いているみたい。

火曜(6/16)

  • 仕方がないのでcpio使って、バックアップ機のHDD間でコピー開始

って状況です。
早く終わらないかな・・・。

メモリを活用したサーバの高速化(分析〜対処)

最近ヤマレコのサーバが遅くなっていたので、色々と調べてみました。
今回は高速化の対応として、メモリをうまく使うツールを導入することにしました。

サーバ性能監視ツールによる分析

まず、現状のサーバ性能を見るために、
http://munin.projects.linpro.no/:muninをインストールして、
グラフを眺めてみました。



図:CPU利用率


CPU利用率を見ると、夜間のバッチ処理で少し負荷が上がりますが、
全体的に見て余裕があるので、おそらくI/O待ちで
性能ネックになっているのだろうと考えました。

PAE対応によるメモリ拡張

muninのメモリ利用量グラフを見て初めて気づいたのですが、
メモリを6GB積んでるはずなのに、3GBしか認識されていませんでした。
メモリを有効活用するために、KernelをPAE対応に変更しました。


方法はyumでインストールするだけなので、非常に簡単でした。

# yum install kernel-PAE


あとは、grubの設定を書き換えて、PAE対応のカーネルで起動するようにします。

# vi /etc/grub.conf


古いカーネルがデフォルト起動になっている(default=1)
ので、PAE対応のカーネルがデフォルトになるように修正(default=0)します。

default=0
timeout=5
splashimage=(hd0,2)/boot/grub/splash.xpm.gz
hiddenmenu
title Fedora (2.6.23.17-88.fc7PAE)
        root (hd0,2)
        kernel /boot/vmlinuz-2.6.23.17-88.fc7PAE ro root=/dev/md2 rhgb quiet
        initrd /boot/initrd-2.6.23.17-88.fc7PAE.img
title Fedora (2.6.23.17-88.fc7)
        root (hd0,2)
        kernel /boot/vmlinuz-2.6.23.17-88.fc7 ro root=/dev/md2 rhgb quiet
        initrd /boot/initrd-2.6.23.17-88.fc7.img

リブートすると、メモリが増えていることが分かります。

#cat /proc/meminfo
MemTotal:      6099484 kB
...



図:メモリ利用率の遷移


まぁ、もともと余裕があったのですが、とりあえず6GBまで認識するようになりました。

phpのコードをメモリキャッシュする(APC

メモリを有効活用する方法として、PHP の実行コードをキャッシュする手段を取ります。

# yum install http-devel
# pecl install APC


php.iniを編集します。以下の行を追加しました。

extension=apc.so
apc.shm_size=324
apc.user_entries_hint=320000

メモリが余ってるので、今回は300M程キャッシュに割り当てました。

あとはapacheを再起動するとOK!


/usr/share/pear/apc.php
HTTPDのフォルダにコピーしてみると、利用状況が確認できます。


図:APCの利用状況



図:APCの利用状況(グラフ)


100MB強のキャッシュ利用なので、300MB程度で十分足りているようです。


このAPCの導入だけで、体感速度が何倍も速くなった気がします。
興味のある方は、比較評価をやってるサイトもあるので探してみてください。

DBのインメモリキャッシュを使う

本当はここまでやりたいのですが、十分性能が速くなってしまったので
棚上げにしておきます。


APCmemcachedを使って、
・一度DBから読み込んだら、メモリキャッシュに格納
・DBに書き込むときに、メモリキャッシュを消す or 更新する
という作りにすれば良いはずです。


また性能が落ちてきたら、これも対応します。

全部フリーソフトでムービー編集(DVカメラからPC→DVD→HDDレコーダ)


先々週の金曜朝、「結婚5周年記念でサプライズよろしく!」と
妻にリクエストされたので、5年間撮りためてたDVカメラ
SONY DCR-PC350 & SANYO Xacti)のデータを吸い出して、
DVDを作ってみました。


Webで作業のやり方やマニュアルを調べながら、
大量のビデオを早送りして確認しつつ取り込むので、結構
時間がかかりました。
何とか結婚記念日には見せられたのですが、やっと今日納得いく
かたちで終わらせました。


今回のDVDは「第一段」ってことにしたので、5年後の自分に向けて
作業メモを残しておきます。頑張れ!5年後のオレ!

1)DVカメラ(SONY DCR-PC350)からの読み込み

全部フリーソフトでやりたかったので、Windowsムービーメーカーを使いました。
↓参考にしたallaboutの記事
http://allabout.co.jp/computer/digitalvideo/subject/msubsub_moviemaker.htm

手順は以下のような感じでした。

  • USBドライバインストール
  • IEEE1394で接続(USBじゃなくてもいいみたい)
  • 本体側をUSB操作可能にメニュ変更
  • Windows ムービーメーカー、作業メニューの「ビデオデバイスからの取り込み」
  • aviファイルGet

2)Xactiのデータ変換

XactiのデータはMPEG4(.mp4)のファイルなので、ムービーメーカー
読み込めるaviファイルに変換しました。
QTConverterというソフトはうちのPCを使うと途中で止まるし、
mp4toaviというソフトは画質劣化するので、Superという
ソフトを使いました。

  • Superをインストール

http://www.erightsoft.com/SUPER.html#Dnload

3)動画編集

編集はWindowsムービーメーカーです。

  • 表紙作成:フェードインとフェードアウト形式
  • スライド間の表紙:ロールタイトル形式
  • 動画埋め込み:適当に切り貼りして張り込み。
  • 画像埋め込み:動画を撮っていない時期は、写真で撮った画像で凌ぎました。
  • 説明追加:ニュースバナー形式のタイトルを選択。
  • ラスト:バックグラウンド黒に基本タイトル白抜きで。
  • バックグラウンドMusic: オルゴール曲を適当に挟み込みました。

※最初に動画とタイトルスライドをFixしておく必要があります。
 あとから動画の位置を変えると、重ね合わせる説明の場所も
 再配置しないといけなくなります。(回避方法が分からなかった・・・)

4)作成したファイルをavi形式で記録

  • ファイル⇒ムービーファイルの保存

形式はDV-AVI(NTSC)を選択します。15分ぐらい。

5)ISOイメージに変換

DVD Flick(http://www.dvdflick.net/)を使いました。

  • Project Setting ⇒ Video ⇒ Encoding ProfileをBestに
  • Project Setting ⇒ Burning ⇒ Create ISO Imageにチェック。
  • Create DVD

※直接DVDにも書きだせるんですが、焼くのに失敗するので、一旦ISOイメージを作りました。

6)DVDに書き出し

PCに昔入れてたDVD Decrypterで書き込み。
DVD FlickにもImgBurnが入っているのでどっちでもいいが。

7)HDDレコーダーに記録

HDDレコーダーにDVDをセットして、
DVDからHDDにダビング・・・。


いや〜。無駄なStepはない気がするんですが、フリーソフト
全部やると大変ですな。高いソフトはもっと簡単なんだろうなぁ。

ヤマケイデビュー!

とりあえず、無事アメリカから帰ってきました。
ジャンクフードや肉を食べまくった割には、体重も変わらない!
・・・と思ったら、筋肉が落ちて脂肪がタップリというだけの話でした。


というどうでもいい話は置いといて、、
12/15発売の「山と溪谷」誌でヤマレコが掲載されました!


インドアで楽しむ登山の特集ということで、ヤマレコを
取り上げてもらいました。
事前にインタビューを受けて、ヤマレコの開発経緯とか、
今後の方針とか色々と聞かれました。


よければ本屋ででも記事を見てみてください。
山の便利帳も付いてるし、今回はお得な号ですよ。


順調にユーザ登録も増えてるので、効果もあったのかな。
掲載いただいてありがとうございました!