新規記事投稿
フォロー記事投稿
記事のキャンセル
From: たけちん
<badkids@sainet.or.jp>
Subject: Re: TIME OUT
Date: 1998/01/30 00:45:28
Reference: mesh.npc.2/00212
分かりました。詳しい解説ありがとうございました。
(とりあえず、知らない間にエラーは直ってるんですが。)
今度またエラーが出たらやってみます。
(出るかなー?)
エラーが出た際には、必ず状況報告および必要なファイルを送ります。
1月28日に、にあさんは書きました。
>1月27日に、たけちんさんは書きました。
>
>>今まで何ともなかったのに今日突然「TIME OUT」ニなってしまいました。
>>プロセステーブルやkillをすればよいとのことですがシェルが全然わからずどうすればいいか分からず困ってます。
>>
>たけちんさんのサーヴァはso-netですね。so-netはOSがSolaris 2.5.1で
>ユーザサーヴァはApache/1.1.3を使っているようですね。
>
>ふーむ、確かに10秒待ってからTIME OUTになっていますね。これは正常な
>タイムアウト(って言うのも変ですが)で、ファイルロックが外れないまま
>止まってしまったnpc.cgiがいて、そのためにカウンタファイルの更新が
>出来ないでTIME OUTになっている可能性が高いです。
>
>時折、サーヴァのファイルロック機構に問題が生じていてTIME OUTになって
>しまう例もありますが、今回の場合、他のso-netユーザさんのnpc.cgiは
>正常に動いていることから、サーヴァの問題とは考えづらいですからね。
>
># ホントにnpc.cgiが止まっているとしたら、確実に現象が捕捉できた
># 最初の例になるはず。
>
>では、まずプロセステーブルを取ってみて下さい。
>Solaris 2.5.1(SunOS 5.5.1)のpsコマンドオプションはよく分からないの
>ですが、SunOS 4.1.3と同じなら、
>
>ps -agxwwu
>
>とすると、長いリストが得られます。もしもエラーになるようでしたら、
>
>man ps
>
>とすると、psコマンドのマニュアルが見られますので、その中で、
>「全部のプロセス」とか「他のユーザが所有するプロセス」とか
>「制御端末を持たないプロセス」とかのリストが得られるオプションを
>指定して下さい。
>
># HP-UX だと ps -efl とかになるので、OSごとにオプションは
># 微妙に違うです。Solarisだと何になるんでしょうか? > Solarisユーザ
>
>さて、プロセステーブルが得られたら、その中からnpc.cgiのプロセスに関する
>情報を抽出するのですが、リストが長すぎて見つけるの大変でしょうから、
>grep コマンドを使って見つけます。
>
>まず、
>
>ps -agxwwu > ps.txt
>
>とかして、プロセステーブルをファイルに記録します。おそらくUnixのコマンドを
>使うのは億劫でしょうから、ps.txtファイルをご自分のマシンに持ってきてから
>エディタのサーチコマンドでnpcと言う文字列が含まれる行を探して下さい。
>
>プロセステーブルの各欄の意味は最初の行に書いてあります。その中で、PIDと
>書いてある欄が、そのプロセスのプロセスIDです。killコマンドを実行するには
>これが必要になりますので、ここの数字を探して下さい。
>
>例えば、プロセステーブルの出力例は以下のようになります。
>
>USER PID %CPU %MEM SZ RSS TT STAT START TIME COMMAND
>root 0 0.0 0.0 0 0 ? D Jan 17 1:31 swapper
>root 1 0.0 0.0 52 0 ? IW Jan 17 0:06 /sbin/init -
> .
> .
>www 17223 15.4 0.7 224 812 ? S 03:41 0:00 /so-net/home/takechin/public_html/cgi-bin/npc.cgi
> .
> .
>
>この例では、npc.cgiのPIDは17223と言うことになります。
>最初の欄のUSERと言うのは、そのプロセスを実行したユーザ名ですが、サーヴァが
>Apache/1.1.3だと、CGIプロセスは単一のサーヴァプロセスで実行されるはずなので
>ユーザ名はたけちんさんのidであるtakechinではなく、wwwとかhttpdとかnobodyとか
>多分そんな名前のはずです。
>
>次にこのPIDを使ってプロセスをkillします。ただし、先ほども書いた様に、プロセスを
>実行したUSERはサーヴァプロセスに割り当てられているユーザIDだと思われますので、
>たけちんさんのidでkillしても有効になりません。そのためプロセスをkillするだけの
>ごく簡単なCGIを書いて、それを実行します。
>
>#!/bin/sh
>
>kill -QUIT ここに今得られたPIDの番号を書く
>
>echo "Content-Type: text/plain"
>echo
>ps -agxwwu
>
>exit 0
>
>と言うCGIを実行すると、プロセスのkillを実行して、npc.cgiがある
>ディレクトリにcoreファイルを生成した後、プロセスリストを出力して終了します。
>確かに指定したプロセスがkillされていることを確かめて下さい。それから、
>正常にcoreファイルが生成出来るように、このCGIを実行する時には、
>npc.cgiがあるディレクトリにその時だけサーヴァによる書き込み権限を
>付けておいて下さい。通常は chmod 777 cgi-bin、で良いです。
>
># さて、プロセスkillの後、カウンタは復活したでしょうか?
>
>あと、誠にお手数ですが、得られたプロセスリスト ps.txt と core ファイルを
>送っていただけないでしょうか? Solarisは手元に無いので急には無理ですが、
>機会があったら止まった原因を解析してみたいので。