このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

サーバーがダウンしてしまいます。

発言者:イチロー
( Date Tuesday, February 11, 1997 18:16:11 )


LC630、メモリー20MBでMINDとMacHTTPとeasyBBSDXその他のCGIを動かしています。
週末になると必ずサーバーがダウンしています。
そこでMacHTTPをQuidproにしてみたのですがだめでした。
サーバーソフトが飽和状態になってフリーズしているようです。
サーバーソフトの設定でなんとかなるのか?
(メモリーの割り当てを増やすとか、接続数を制限するとか?)
マシンのメモリーを増設すれば解決するのか?
どなたかご経験があれば教えてください。



田中求之 さんからのコメント
( Tuesday, February 11, 1997 21:24:21 )

>サーバーソフトが飽和状態になってフリーズしているようです。

具体的な症状、あるいは、どのような状態でフリーズが起きるのか?などは
わかりますか?

もしサーバーのメモリーが足りないのであれば、サーバーの Status ウィンドウの
メモリーに関する情報の部分で、空きメモリーがほとんどない(バーが右にまで達する)
といったことが起きるはずですが、このあたりはどうでしょうか?

それから、使用しているシステムはなんでしょうか?

自分のマシンで起きている症状を見極め、また、サーバーなどの表示している情報を
しっかりと分析することから、トラブルの解決は始まります。人によってサーバーの
状況(マシン、システム、ネットワーク、同時に動かしているソフト等)はことなる
わけですから、結局は自分で原因を突き止めて解決するしかないと思っておいて
ください。MacHTTP にせよ、MIND にせよ、EasyBBS にせよ、それぞれは、何の
原因もなくフリーズするようなものではありません。


なお、フリーズの件とは直接関係ないと思いますが、サーバーソフトウェアは 
Quid Pro Quo に取り替えるべきでしょう。
MacHTTP で CGI を多用すると、かなり反応速度が遅くなり、他への影響も
大きいと思います。


イチロー さんからのコメント
( Wednesday, February 12, 1997 00:07:52 )

症状の説明からさせていただきます。
「Quid Pro Quoのメモリーがたりません」と表示されて止まっていました。
フリーズはしていなかったので「OK」をえらんで動作しました。
とりあえずメモリーの割り当てを2MB増やしてみました。
原因としてはeasyBBSに同時刻に4件の書き込みがありましたのでたぶんこれが原因だと思います。
CGIをacgiにしているのでcgiにすればとりあえず処理がおわるまでは他を受け付けない
と記憶しているのですが、これでとりあえずサーバーダウンだけは避けられますか?
使用OSは漢字トーク7.5.5です。

田中求之 さんからのコメント
( Wednesday, February 12, 1997 15:40:30 )

>「Quid Pro Quoのメモリーがたりません」と表示されて止まっていました。

メモリーが足りない場合は、基本的には、起動したときにエラーが出るはず
なのですが、変ですね? ただ、サーバーに多めにメモリーを割り当てて
様子をみるのが、まず解決のための第1歩でしょう。

>原因としてはeasyBBSに同時刻に4件の書き込みがありましたので

EasyBBS に同時のアクセスがかかってもエラーになることはないはずです。
(ただし、書き込みがおかしくなるということが起こりうるのですが)
(はやく修正しないと (^_^;; )

アクセスを同時に受け付けても、実際の処理は一つずつ行われますので
acgi を cgi に変更しても状況は変わらないでしょう。cgi にしてしまう
と EasyBBS の処理中には他のすべての処理が止まってしまいますので、
アクセスへの反応速度などがかなり低下します。cgi に変更する必要は
ないと思います。

EasyBBS 以外に何か CGI を使っていますか?

イチロー さんからのコメント
( Wednesday, February 12, 1997 17:26:33 )

とりあえず本体のメモリーを36MBに増設してQuid Pro Quoのメモリーの割り当てを
10MBにし、BBSのアクセスの多い2つにそれぞれ1.5MBずつメモリーを割り当てました。
しばらく様子を見てみます。
使用しているcgiはeasy BBS、easy BBS DX×2、MailForm×4などです。
ありがとうございました。

田中求之 さんからのコメント
( Wednesday, February 12, 1997 18:21:58 )

10Mもメモリーは必要ないと思いますが…

あと、CGI として

>easy BBS、easy BBS DX×2

重複が多いですね。

もし複数の BBS を開催したいということであれば、EasyBBS Plugin を使うと
いう方法もあります。

MailForm は使ったことがありませんが、複数たち揚げなくても済む方法が
あるように思いますが、どうなんでしょうか?

イチロー さんからのコメント
( Wednesday, February 12, 1997 20:12:37 )

MailFormではなくて田中先生のguestMailです。失礼しました。
複数立ち上げているのはそれぞれ項目が違うのとmailでの転送先が違うからなのですが、
もしかして転送先が違っても対応できるのでしょうか?
EasyBBS Pluginについてはまだよく読んでいないのですが、Quid Pro Quoにも対応しているのですか?
これから読んでみます。

田中求之 さんからのコメント
( Wednesday, February 12, 1997 20:57:26 )

>もしかして転送先が違っても対応できるのでしょうか?

CGI のスクリプトを書き換えれば、一つの CGI で複数の宛先へのメールの処理を
行わせることも可能です。

EasyBBS Plugin は Quid Pro Quo に対応していますよ。


石津@RJC さんからのコメント
( Thursday, February 13, 1997 00:18:57 )

今回の件に直接関係はないと思いますが、どうもQuidProQuoではHTTPCookie
を頻繁に利用するTANGODAMなどのCGIが頻繁に動作する場合に、メモリーを解放
できずに、アプリケーションメモリーを食いつぶし、自滅(メモリー不足)す
ることがあるようです。
TANGODAMを利用したchatを作ったのですが(もうすぐフリーで公開します)、
8Mのメモリーを割り当てたQuidProQuoが1000件ぐらいの書き込みがあると接続
拒否に陥るので、原因追及したところ、この現象を確認しました。

QuidProQuoをご利用の方は時々メモリーの使用状況を確認された方がいいと思
います。

田中求之 さんからのコメント
( Thursday, February 13, 1997 01:37:32 )

メモリーリークが起きるらしいというレポートは QPQ のメーリングリスト
でもあがっていました。

私のところの QPQ は、まったく落ちずに快調そのものですが、考えてみたら
CGI はほとんど使わない(もっぱら画像送り出し専用)からかな?

石津@RJC さんからのコメント
( Thursday, February 13, 1997 09:55:40 )

>私のところの QPQ は、まったく落ちずに快調そのものですが、考えてみたら
>CGI はほとんど使わない(もっぱら画像送り出し専用)からかな?

どうも普通のページやイメージを使っている場合には問題ないみたいですね。
Cookieのハンドルに問題があるように考えてます。

イチロー さんからのコメント
( Thursday, February 13, 1997 20:04:35 )

気がついたらQPQに割り当てた10MBの8割くらいメモリーが使用されていました。
その時点でのアクセスは2、3件でしたのでメモリーが解放されずにどんどん消費されているようです。
処置がわからないのでとりあえず落として再起動したら戻りました????

>CGI のスクリプトを書き換えれば、一つの CGI で複数の宛先へのメールの処理を
行わせることも可能です。

これはScriptingWithMacHTTP(2nd)の複数の Form を一つの CGI で処理する方法の部分を読めば良いのですか?
またproxy 経由でアクセスしているユーザーには Form が使用できなくなることがあるの件は現在は解決していますか?


田中求之 さんからのコメント
( Thursday, February 13, 1997 20:33:59 )

QPQは空きメモリーをキャッシュとして使うはずですので、大きなデータを含んだ
ページなどを処理すると、キャッシュに取られるはずです。メモリーの残り具合
をみて、キャッシュを調整するようになっています(すくなくもと WebSTAR
よりもキャッシュはよくできていると思う)。

一つの CGI で、複数の処理をこなさせる方法ですが、QPQ を使うのであれば、
ユーザー定義アクションを活用するのが楽でしょう。余分なトラブルに巻き込
まれずに済みますよ。


イチロー さんからのコメント
( Thursday, February 13, 1997 22:17:54 )

>メモリーの残り具合をみて、キャッシュを調整するようになっています

そうなんですか?小心者なので思わず再起動してしまいました。

それからしつこいようですがもう一度確認させてください。
>CGI のスクリプトを書き換えれば、一つの CGI で複数の宛先へのメールの処理を
行わせることも可能です。

というのはCGIが
ホームページAのフォームからのメールは123@jjj.or.jpに送り
ホームページBのフォームからのメールは456@jjj.or.jpにおくる
とういうように入力される項目のデータの違いを理解して処理できるということですか?

何度も何度もすいません。初心者のためお許しください。

田中求之 さんからのコメント
( Friday, February 14, 1997 02:26:42 )

>ホームページAのフォームからのメールは123@jjj.or.jpに送り
>ホームページBのフォームからのメールは456@jjj.or.jpにおくる
>とういうように入力される項目のデータの違いを理解して処理できるということですか?

そうです。

たとえば、私のこのサーバーは、この会議室や、ご意見メール、あるいはもうひとつ
別の会議室等、すべてをたった1つの CGI でこなしています(だから遅いんだ、って
いうつっこみはなしね (^_^;; )

このように、CGI は、スクリプトをうまく書けば、一つのものでいくらでも異なった
処理が可能になります。

イチロー さんからのコメント
( Friday, February 14, 1997 12:56:19 )

 複数の会議室を1つのCGIで運用するのはいじくりまわしているうちにできてしまいました。
ありがとうございます。(適当にいじくりまわしているから進歩しないのですが?)

 そこでこのこととは関係ないのですが各会議室のメッセージ内容を修正すると
CGIがファイルの作成された日付を参照するので最近7日間に登録されたメッセージ
などがバラバラになることに気付きました。

 それからずうずうしのですが、田中先生が使われている
「複数種類のFormからのデータの種類によって複数のメールアドレスに振り分ける処理」
をしているCGIスクリプトのサンプルは無いのでしょうか?
複雑そうで気が遠くなりそうなのでヒントでも良いのですが、具体的にどの辺りをいじればいいのか
だけでもできれば教えてください。よろしくお願いします。

田中求之 さんからのコメント
( Friday, February 14, 1997 14:35:58 )

> そこでこのこととは関係ないのですが各会議室のメッセージ内容を修正すると
>CGIがファイルの作成された日付を参照するので最近7日間に登録されたメッセージ
>などがバラバラになることに気付きました。

修正前に、ファイルの最終更新日を記録しておいて、中身を修正してから、後で
元の更新日に戻すという方法があります。Tanaka's osax を使えばスクリプトで
処理できます。この作業のために追加したといってもよいコマンドがありますから (^_^;;


>「複数種類のFormからのデータの種類によって複数のメールアドレスに振り分ける処理」
>をしているCGIスクリプトのサンプルは無いのでしょうか?

私のサーバーには登録してませんが、サンプルはすぐに作れます。ただ、今は時間が
ない状況なので、来週まで待ってください。

ユーザー定義アクションを使うものにしてよいですね?

イチロー さんからのコメント
( Friday, February 14, 1997 16:07:53 )

お願いばかりで申し訳ありませんが、よろしくお願いします。

>ユーザー定義アクションを使うものにしてよいですね?

どのような方法があるのかも良いのかも検討がつかないのでよろしくお願いします。

>この作業のために追加したといってもよいコマンドがありますから

こちらもよろしくお願いします。

loony さんからのコメント
( Saturday, February 15, 1997 13:40:16 )

ユーザー定義アクションを使ったCGIについては前にありました。
参考まで。

→  ユーザー定義アクションを使ったCGI

田中求之 さんからのコメント
( Monday, February 17, 1997 00:59:01 )

ユーザー定義アクションを使ったことがないのでしたら、TYPE=HIDDEN のフィールド
を使ってメールアドレスを FORM に埋め込んでおくというのがいいでしょうね。

つまり、処理結果を aaa@bbb.cc.ddd.ff に送りたいページの場合には

<FORM ACTION=... METHOD="POST">
<INPUT TYPE="HIDDEN" NAME="Mail" VALUE="aaa@bbb.cc.ddd.ff">

名前:<INPUT TYPE="TEXT" ...

(以下省略)

というFORM を使い、CGI で処理する際には、post_args をデコードして、
最初の項目をメールドレスにして、データを送るようにするわけです。

この方法なら、guestMail のスクリプトをちょっと書き換えるだけでいいので
簡単にできると思いますが、どうですか?>イチローさん

とりあえず、サンプルは、「サンプル書き散らし」の方に載せますが。
(もともとの話題からずれてしまっているので)