【Apache・DB】夏だから不思議なエラーのお話
2014.08.12 15:15 | コメント(0) | 技術
この記事は最終更新日から1年以上が経過しています。
そして少し溶けてる。
さっちんだよー。
今日はApache周りとMySQLのお話。
一週間ほど前に謎のエラーで苦しんだので、経緯でも。
事の経緯はこんな感じ。
自宅でお遊び用に建ててるサーバにとあるプログラムを追加。
そのプログラムはキューに入ったジョブを定期的にチェックして、処理を行うシンプルなプログラム。
要は定期的に更新する必要のあるデータやらなんやらを自動的に取り込んでゴソッとDBに記述していく。
で、この子が動かない。
困ったねー。
はい、細かい説明のスタートです。
問題の切り分け
とりあえずテストで動かしたときから不調。期待した通りの振る舞いがされてない。
この時点で考えられるのは、
- プログラムの中身の問題。
- プログラム起動時の問題
- ネットワークの問題
- DBとの連携の問題
- その他考えの及ばない部分でのエラー
一番最後はそっとしておきましょうね。
んでまあとりあえずログを確認。
んむ、動いてる。
ただ1行だけブリッとエラー。
failed: push message into queue: connection closed.
ほう。
何の接続なんだ
なにがしかとの接続がうまく行ってないということなので、原因を探っていきます。
プロセスの確認と、ポートの確認
とりあえずプログラムを再起動。ちなみにこのプログラムはデーモンで走らせます。
プロセスの確認
ps aux
はい、ちゃんと生き返ったのを確認。
うし、では再度確認!
今度はtailでログを垂れ流しながらリトライ。
failed: push message into queue: connection refused by peer.
なんか変わった!
うん、でもやっぱりエラーなんだね。
このプログラムではジョブをキューに入れる時に特定のポート(今回なら7727番)使用します。
ポートの確認
netstat -l
うーん・・・ここで接続が切れててくれればポートの解放忘れ・・・アホだなー。
で終わったのですが、バリバリLISTEN状態。
さー困った!
プロセスが途中で死んでるわけでもないし、起動に失敗しているわけでもない。
使用予定のポートもしっかり空いてる。
じゃあなんじゃらほい。
DBの確認
エラーの内容が「キューに詰め込めなかったよ!」なので、可能性は薄いですが、DBとの連携が取れてないのかなと。
ちなみにDBはMySQLです。
まずは先ほど同様mysqlのポートが空いてるか確認。
netstat -l
まあ当たり前のように空いてる。
実際叩いてみましょうね。
mysql -u satsuki -p some_database
入れますなー。
ひょっとしたらDBの文字コードが違うとか?
SHOW CREATE DATABASE some_database;
これも違う・・・。
あと何見ようか
プロセス生きてる、ポート空いてる、DBも生きてる。でも動かそうとするとエラー。
いや、よくない(反語)。
順番に手動でアクセスしてみてそれでだめならもう諦めよう。
telnet 127.0.0.1 7727
出た!Connection refused!
なんだよー。全然接続できてないじゃないのー。
結局今回の原因はプログラム側で使用するポートが空いてないことが原因でした。
でもnetstatコマンド使ったときは問題なくLISTENで上がってきたんだよねー。
何度かプログラム自体の起動・停止も試してみたけど、改善のきざしはなかったし。
ただ、telnet叩いた後に再度再起動をかけるとなぜかすんなり起動。
今まで一度も同様のエラーは吐いてません。
何が原因だったんだろう?
久々にハマったエラーだったのと、結局原因がはっきりしてなくてモヤモヤしたので書いてみました。
「これじゃね?」って思い当たる節がある方は教えてください。
まあ今回のプログラムの場合は、データの鮮度なんて気にしないからシェルスクリプト組んでcronで動かす方法もあったんだけどねー。
ただなんとなく動くようにしないと負けなような気がしてw
ちなみにそこまで深刻ではないけど、まったく関係のないMySQLの変な仕様を見つけたので少し。
MySQLを見に行く時に、「127.0.0.1」でアクセスしに行くとTCP経由で見に行くけど、
「localhost」で見に行く場合はSocketを使うみたい。
DBサーバを別建てしてない場合はlocalhost指定の方が処理が速くなるかもねー。
- 技術の記事
-
- 【通信】インターネットの通信速度が遅い・・・
- 【Javascript】プラグインまたちょっくら触ってみた
- 【Apache・DB】夏だから不思議なエラーのお話
- 【Javascript】FC2のプラグインを改造してみよー(続編)
- 【Javascript】FC2のプラグインを改造してみよー
まだコメントがありません...(´・ω・`)