rooseveltがダウン

2/24 2:49 CMANからnicovideがNGとの通知が来た。
リモートで会社にログインしたところ、monroeとrooseveltがダウンしていたので会社に移動した。

rooseveltの端末を見てみると、キーボードの入力も受け付けない状態でハングアップしていたので電源長押しで再起動した。
再起動後、各ホストにログインできるか試してみたところ、lincolnにログインできなかった。
端末を見てみると、swapメッセージが大量に出ていた。
キーボードは使えたのでrootでログインしたが、コマンド入力可能状態になる手前で止まってしまった。
電源ボタンを押したらシャットダウンシーケンスが始まったのでそのままシャットダウン。再起動を行った。
再起動後、initMDDirectoryを実行、apacheを再起動した。

IMAP over SSLが繋がらなかった

IMAP over SSLで使われるポート番号993が、ypbindによって使われていたのが問題だった。

https://bugzilla.redhat.com/show_bug.cgi?id=103401
Redhatに同様の問題が報告されていて、ここではポート番号をPIDから算出している記述があった。

とりあえずypbindを再起動して解決した。
誰かypbindが使うポート番号を指定する方法を求ム。

editTagについて調べた結果

要望にタグが編集できないと書いてあったので調べてみた。

レプリケーションによる時間差があるため、タグの書き込みに成功していても表示されない問題があった。
コメント書き込みに同様の問題がある。

nicovidaemonが応答しない(eSocksが失敗、10秒規制)場合に書き込みが失敗する問題もある。
これはeditTag、editCommentのコマンドの実行が成功したかどうかを確認するロジックが必要だと思う。

mod_rewriteとmod_proxyとmod_proxy_balancerを使ってリバースプロキシをする方法

apacheを再コンパイルして以下のモジュールを有効にする

# portupgrade -f www/apache22
[X] PROXY                 Enable mod_proxy
[X] PROXY_BALANCER        Enable mod_proxy_balancer
[X] PROXY_HTTP            Enable mod_proxy_http

httpd.confでモジュールをロードする

LoadModule proxy_module libexec/apache22/mod_proxy.so
LoadModule proxy_connect_module libexec/apache22/mod_proxy_connect.so
LoadModule proxy_http_module libexec/apache22/mod_proxy_http.so
LoadModule proxy_balancer_module libexec/apache22/mod_proxy_balancer.so

コンフィグのどこかに転送先のサーバを定義する。
今回はhttpd-vhosts.confの中に書いてみた。

<Proxy balancer://backend>
BalancerMember http://www.example.com loadfactor=10
</Proxy>

ModRewriteを使ってリバースプロキシの設定をする。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^/(.*)$ balancer://backend/$1 [P,L]
</IfModule>

cpuのステータスがnfsになって重くなっていた件

過去というか現在も自分のところのwebサーバが悲鳴を上げ続けてて、topしたときのstatusがnfsを連発してることが。

未だに原因は不明ですが、一つのヒントとしての記事が見つかったのでメモ。

これはちょっと限られた事例ですが, sy の CPU利用率が高く b のプロセスも多いケースがありました。
PHP でのセッションファイル共有のための NFSサーバで起こっていたのですが, アクセスが多い時間帯に sy の CPU利用率が高くなり若干重くなっていました。

原因は, 各 Webサーバでのセッションガベージコレクションが走る度に NFSサーバで readdir(2) が呼ばれ, 巨大なディレクトリツリーが転送されていたためでした。
ライフタイムを長めに取っていたこととユーザの増加のせいで, セッションファイルの数が 20~30万と多くなりすぎていて, これらの情報を取得するのにカーネルコード部分で負荷がかかっていたようです。

sy の数値が高かったのは, readdir(2) のシステムコールで CPU時間が取られていたためでしょう。
wa がサポートされている vmstat では, wa の数値も高くなるかもしれません。

対策として, 各 Webサーバの php.ini を session.gc_probability = 0 に変更し, Webサーバ上でガベージコレクションが発生しないようにして, NFSサーバにて cron処理でセッションファイルを削除するようにしました。*4

PHP で複数の Webサーバでセッションを共有する場合, NFSサーバを立ててセッションファイルを共有する方法を取ることも多いかと思いますが*5, Webサーバからのガベージコレクションを行う場合は, 毎回ディレクトリツリー情報の通信が行われることを心に留めておいてください。

セッションファイルは割と頻繁にアクセスされるため, NFSサーバのパフォーマンスを上げるには, noatime オプションをつけて NFSマウントし, ファイルアクセス時刻を更新しないようにするのも有効です。

サーバ診断:vmstat - Y-110's Wiki

stop slave構文

sqlスレッドだけ止めたりしたいとき。

START SLAVE [thread_type [, thread_type] ... ]
START SLAVE [SQL_THREAD] UNTIL
    MASTER_LOG_FILE = 'log_name', MASTER_LOG_POS = log_pos
START SLAVE [SQL_THREAD] UNTIL
    RELAY_LOG_FILE = 'log_name', RELAY_LOG_POS = log_pos

thread_type: IO_THREAD | SQL_THREAD

thread_type オプションを持たない START SLAVE は両方のスレーブ スレッドをスタートします。I/O スレッドはマスタ サーバからクエリを読み、それらをリレー ログ内に格納します。SQL スレッドはリレー ログを読みこみ、クエリを実行します。START SLAVESUPER 権限を必要とします。

emacsでbackspaceキーを押したらデリートの動作になる。

最近emacsのバージョンを22から23にアップした。その中で変わってた動作の一つとして、BSキーがデリートキーの動作になってしまうことがあった。

M-x describe-keyしてみると以下のように。

C-d runs the command delete-char, which is an interactive built-in
function in `C source code'.

It is bound to <deletechar>, C-d.

(delete-char N &optional KILLFLAG)

Delete the following N characters (previous if N is negative).
Optional second arg KILLFLAG non-nil means kill instead (save in kill ring).
Interactively, N is the prefix arg, and KILLFLAG is set if
N was explicitly specified.

あーなんか面倒だけどC-dとC-hでとういつしよかな。でもrootとかでやるとC-hきかんしな・・・。

DBサーバの切り替えについての本当に簡単な考察

現在、ファイルの書き換えによってDBサーバの切り替えを行っているが、即時切り替わる模様。

切り換えているファイルはwp-config.phpのdefineをコメント、アンコメントして対応しているが、二分ごとに行われるrsyncの同期タイミングとほぼ同時に切り替わる。

一つの要因として考えられるのは、apcによってファイルがキャッシュされているものが、内容が書き換わったと認識できて変わるのだろうか。

SpamAssassinルールメモ

## 無効ルール
# Subjectが複数行に渡るパターン。日本語の場合MIMEエンコードにより長くなるためよく発生するのでOK
score GAPPY_SUBJECT 0
# SubjectでMIMEエンコードが複数回行われるパターン。日本語では「あfooあ」のように英語が挟まった場合に普通に発生するのでOK
score SUBJECT_ENCODED_TWICE 0
# 本文で水平空白文字が0~10%の割合で出現するパターン。日本語の場合普通は単語の区切りにスペースを入れないのでOK
score TVD_SPACE_RATIO 0
# Fromに "<" があって ">" が無いパターン。Fromに日本語があるとマルチバイト中の 0x3c や 0x3e にマッチして誤判定するので無効化
score FM_FRM_RN_L_BRACK 0
# Subjectに!と?が含まれるパターン。日本語があるとマルチバイト中の 0x21 や 0x3f にマッチして誤判定するので無効化
score PLING_QUERY 0

http://www.kawaz.jp/pukiwiki/?Postfix%2FClamSMTP%A4%C8SpamPD%A4%C7%A5%A6%A5%A3%A5%EB%A5%B9%A1%F5SPAM%A5%D5%A5%A3%A5%EB%A5%BF#u2ab1e6d

Spamassassinがおかしい

courierのログを眺めていたら、ルールが見つからないからアップデートしろやゴルアっていわれた。

spamd[61507]: logger: removing stderr method
spamd[61509]: config: no rules were found! Do you need to run ‘sa-update’?
spamd[61507]: child process [61509] exited or timed out without signaling production of a PID file: exit 25 at /usr/local/bin/spamd line 2541.

spamasassin

で、404だし、http://www.sa-update.pccc.com/はForbiddenだし。