ホームページ目次1997年前の話次の話

サーバーマシンでプロセスフルにしちまった

1997年3月12日

昨日は、夜ちょっとパズルプログラムの機能アップでも図ろうかと思って、

JAVA + CGI (perl) + pg95perl5(PostgreSQL)

という組合せで遊んでいた。つまり、データベースを利用して、機能アップ をしようという前年からの計画を実現しようとしただけのことである。JAVAか らperlで書かれたCGIを呼び出し、それが更にデータベースにSQLでアクセスす るために、perlでSQL命令文を生成してデータ更新なんぞをやるのである。

したがって、JavaとPerlとSQLが頭の中でどんどん混乱してくるのである。 Perlでちょこちょこプログラムを作るのも久しぶりだったので、とうぜん、シ ングルクォート(')、ダブルクォート (")、バッククォート (`)を間違えて書 いてしまったり、カンマ(,)の有無で意味が変ったりするのを見逃したりと大 層苦しんだのである。やはり、『慣れ』だけでプログラムを組んでいると、 複数言語を同時に使いこなす必要に迫られた時はパニックになるようだ。

それでもめげずに、ちょこちょこ作業をやっていたら、遊んでいる途中の状 態をセーブしたり、取り出したりができるようになりかけたので喜んでいた。

しかし、やっている途中で、どうもデータベースが反応しなくなったようだ。 また、Perlを間違えたかな?いやいや、どうもCGIが全然動いていないよう だ。いったいどうしたのだろう?

という状態になってしまった。それで、既に作って動作確認も済んでいるも のを動かそうとしたら、やはり全然動かない。これって、もしかして、サーバー マシンでCGIが動かなくなってしまっているのかな?とおもって、サーバー マシンを管理しているシステム管理者に『何だか変だよ?』と言った。

そうしたら、なんと、nobodyというユーザが、目一杯プロセスを起こして、 プロセスフル、つまり『もう仕事はこれ以上出来ません』てな状態になってるっ て。で、それはだれが原因かというと、やはり私であった。

詳しい原因を調べることも必要であったのだが、何しろ、皆様が今見ている ページをサービスしているサーバーマシンであって、これが、『もう仕事は出 来ん』と言っている状態だから、そうとうの緊急事態なのである。まあ、しょ うもない私のホームページをサービスしているだけならともかく、その他種々 のサービスを行なっているプロバイダの主要サーバーマシンが瀕死の状態では どうしようもないので、とりあえず不要なプロセス全部に死んでもらった。

本当は、CGIにからむものは、プロバイダのメインサーバーで動作確認す るなんて無茶に決まっているのであるが、面倒なのでついそうやってしまった のである。みなさんは、ちゃんとどうでもいいマシンで他への悪影響が最低に なるように十分考慮してCGIは確認されたい。

さて、プロセスを山のように起こしたのは、SQL文が変になっているにもか かわらず、その出鱈目SQL文でデータ登録を行なったら、出鱈目SQL文を必至で 解読し実行してくれて、プロセスの山を作り出してくれたのである。SQL文は Perlで組み立ててから、PostgreSQLのアプリケーションインターフェースであ るpg95perl5を利用して渡している。このPerlでの組み立てに失敗したのである。

さらに原因をさかのぼると、Perlへの引数の渡し方を間違えてしまったので ある。まあ、Perlの関数や " や ' や ` の使い方を間違えてしまったのであ る。

さて、どんな構成になっているかをちょっと図に描いてみた。

HTMLのFORM
JAVAのパズル・アプリケーション
↑ ↓
Apacheサーバー
↑ ↓
CGI Perlインターフェイス
データベース・アプリケーション・インターフェイス
データベース・Perl5・インターフェイス(pg95perl5)
データベース・SQLインターフェイス(PostgreSQL)
データベース(Postgres)

データベースには、今は、登録ユーザーの名前とパスワードなどと、問題を 解いているときの中間状態のセーブ/ロードができるようになっている。でも、 まだ公開してない。うまくいけば、今日中に公開になるかもしれない。

データーベース内部における、パズルの中間状態の記憶形式は、ただのテキ ストで、データーベースはどのパズルであろうと、一切区別せず突っ込むこと にした。だから、どのパズルでも、途中まで会社で遊んで、上司が来たらセー ブして、家に帰ってからロードして続きをすることもできるようになる。といっ ても、ロード/セーブ時のテキストは、どれも文字列であるのだが、それぞれ で形式は大いに異なり、それぞれのパズルごとにJAVAでセーブとロードの部分 を拡張しなければならない。

今のところ、テストしているのは、お絵かきロジック、イラストロジック、 ののぐらむ、というやつの、簡易版の方だけである。

書いているうちに問題をまた見つけてしまった。中間状態のテキストである が、どのパズルのどの状態をセーブしているのか位は先頭に入れておいた方が 何かと都合がいいな。では、ちょっと変更して、今日中に何とか公開しようと 思う。では、若干の期待をして待っていてくださ〜い。


ホームページ目次1997年前の話次の話