X

【Project peko】2ch特化型サーバ・ロケーション構築作戦 Part15

■ このスレッドは過去ログ倉庫に格納されています
1▲:/usr/local/bin/ch2 -o i686 ◆P8fXJj6wwo
垢版 |
04/08/21 15:04ID:hJLR4nfQ
peko作戦について語るスレです。
サーバロケーションPIEに関する話題もこちらで。
現在の主要なテーマはpeko/cobraおよびtigerサーバが
特定条件下における突然死の原因究明です。
9月にrootさんが現地へ渡米して作業するそうです。

<関連サイト>
レンタルサーバー maido3.com 2ちゃんねるの転送量: http://server.maido3.com/pie/
MRTGによる統計情報: http://mumumu.mu/mrtg/
2ちゃんねる/PINKちゃんねる 稼動中のサーバ一覧: http://mumumu.mu/serverlist.html

<運営板PINKちゃんねる関係>
【Project ama】PINKちゃんねる特化型サーバ構築作戦 Part2
http://qb5.2ch.net/test/read.cgi/operate/1082721809/l50
【PINKちゃんねる】新サーバ獲得会議☆3
http://qb5.2ch.net/test/read.cgi/operate/1080295660/l50

<携帯電話特化型サーバ構築作戦関係>
【Love Affair】携帯からのアクセスに対する考察・次の一手 Part2
http://qb5.2ch.net/test/read.cgi/operate/1088657713/l50

<前スレ>
【Project peko】2ch特化型サーバ・ロケーション構築作戦 Part14
http://qb5.2ch.net/test/read.cgi/operate/1087666806/l50
554root▲ ★
垢版 |
04/11/22 03:50:19ID:???
む、、、止まったか。< ex7
04/11/22 03:52:47ID:Ja+Umu6n
gotoで最後に飛ばすとか。。。

http://www.google.co.jp/search?hl=ja&c2coff=1&q=mod_perl+exit+goto&lr=lang_ja
556root▲ ★
垢版 |
04/11/22 03:54:01ID:???
bbs.cgi をとりあえず動く状態 (>>550) にして少し動かし続けたところ、突然反応がなくなりました。
pingはかかる、、、。

メモリリークとかが起こった予感。
557root▲ ★
垢版 |
04/11/22 03:57:51ID:???
ex7はリブート要請しました。

みんなが何年もの間言っていたほど簡単には、mod_perl化はできないとわかった、、、。
04/11/22 03:58:24ID:GuTGbMhJ
いっそbbs.cgiを1から書き直すとか……。

誰がやるんだとか言う突っ込みはなしの方向で一つ。
04/11/22 03:59:58ID:Ja+Umu6n
俺も一から書き直したが早い気がする。

言い出しっぺの法則で>>558が(りゃ
04/11/22 04:09:50ID:???
やっぱbbs.cgiが(りゃ だからか、、
561root▲ ★
垢版 |
04/11/22 04:32:54ID:???
ここでテストしてましたが、mod_perl配下だとTZ環境変数もおかしくなるみたい。

鯖が不安定なんだけど
http://ex7.2ch.net/test/read.cgi/morningcoffee/1101034399/

少なくとも今日のところは、撤退せざるを得ないなと。

で、SuExecをやめたぶん、ほんのちょっぴりパフォーマンスがよくなったのかも。
これについては、要経過観察で。
562root▲ ★
垢版 |
04/11/22 04:38:57ID:???
今後やるとしても、まずは、基礎研究とじっくりとした調査が必要そうですね。
環境変数とか、動作の違いとか。

で、世の中の解説やWebにあるページとかを見ても、
mod_perlの2系(with Apache2)は、実はあまり多く解説されていないように見えます。
つまり、練りが足りないということがじゅうぶん考えられる。

もちろん、じっけん!じっけん!(AA略 して、
ここで練るというのもありですが、
そうするにしてもまずは事前準備をじっくりやって、勝ち目が出てきてからってことになるかなと。

ということで今日のところは、負け&撤退ということで。
563root▲ ★
垢版 |
04/11/22 05:05:41ID:???
寝る前に、試みた設定をダンプしておこう。
何か、設定に間違いがあったのかもしれない。

・mod_perlはportsからインストール(www/mod_perl2)

・httpd.conf

LoadModule perl_module libexec/apache2/mod_perl.so
<IfModule mod_perl.c>
PerlModule Apache2
</IfModule>
(略)
<Directory "/home/ch2ex7/public_html">
(略)
<IfModule mod_perl.c>
<Files bbs.cgi>
SetHandler perl-script
PerlResponseHandler ModPerl::PerlRun
PerlOptions +ParseHeaders
</Files>
</IfModule>
</Directory>

# 以下は動作確認の際のみ入れた設定
# mod_perl status
<IfModule mod_perl.c>
<Location /perl-status>
SetHandler perl-script
PerlResponseHandler Apache::Status
</Location>
</IfModule>
564root▲ ★
垢版 |
04/11/22 05:09:05ID:???
これで、有効にした後でエラーなくカキコできたことは確認。(>>561 のスレの最後のほう2つ)
しかしその後、リモートログイン窓の反応なくなる。

リモードコンソールのlogin:も出なくなった(エコーバックはあった)

メモリがめいっぱいになった時と同様の動作であったため、
メモリリーク? が起こったのかもしれない。
ただしsyslogには、そのようなメッセージはなし。
04/11/22 07:49:03ID:rH7Qo05H
<Files *.cgi>
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
PerlOptions +ParseHeaders
Options +ExecCGI
</Files>
Perlrequire "〜/startup.pl"

===startup.pl================================
use Apache2 ();
use subs qw(exit);
*exit = \&ModPerl::Util::exit;

1;
============================================

#!/usr/local/bin/perl

use strict;
use warnings;

if (exists $ENV{MOD_PERL}) {
my $path = $ENV{SCRIPT_FILENAME};
$path =~ s|/[^/]*$||;
chdir($path);
}
566root▲ ★
垢版 |
04/11/22 11:33:19ID:???
>>565
自分の環境でやってみました。
>>546 なパターンのプログラムの場合、同じ結果ですね。

で、ModPerl::Util::exit に変えても同じ。

[error] ModPerl::Util::exit: (120000) exit was called at ./test2.cgi line 1Compilation failed in require at /home/hoge/public_html/test/mod_perl/mod_perl_test.cgi line 33.\n

つまり、requireした先でModPerl::Util::exit; は呼んではいけないらしい。
567root▲ ★
垢版 |
04/11/22 11:39:36ID:???
use Apache::compat; を startup.pl に入れてみたけど、結果は同じ。
この問題が解決できないと、メンテナンス性という意味でつらいかも。

ということで、とりあえずここまで。
しばらく本業します。
04/11/22 15:26:07ID:2pXcN7gl
bbs.cgiをPerl5.8.5以降専用に大幅にリファクタリング。
mod_perl2でバグるところは書き方がしくじっている可能性が高い。
569root▲ ★
垢版 |
04/11/22 19:14:57ID:???
土曜の日テレの「キター」と、
さっきのCXの「ドーン」を無事にクリアできたということは、
やはり >>535 が効果を発揮したのか。
04/11/22 20:59:48ID:nl3X+2Ly
21:00からのTVタックル@liveanbでどうなるか
04/11/23 00:48:12ID:+x6i4aWR
やっぱPerlのような物に拘るのはもう限界じゃない?
preg_hogehoge()も付いてるあれの方がまだ安全というか、なんというか。
04/11/23 10:32:48ID:YKcaKfwe
>>571
ひ(ryがいぢれないものはだめなのでわ?
04/11/23 17:43:35ID:eXOFpxSi
PHPならひ(ryのひともいじれるんじゃ?
04/11/23 23:05:28ID:8ZIt9Br8
夜○さんが弄れない予感。
04/11/24 04:55:41ID:akrv5p91
で、その夜○さんとやらはmod_perl2用のPerlが弄れるのか?
04/11/24 17:07:33ID:???
たぶん たぶん
2001年8月の2ちゃんねるの規模は、、、
現 tiger 2台とみた、
04/11/24 17:46:55ID:Ym4+XOeN
北ネット弱えええ!!!
04/11/24 18:42:32ID:+HFCWJf9
それは・・・(びっくり

そりゃあ色々変わっていくのが自然だよなぁとオモタ。
579root▲ ★
垢版 |
04/11/24 19:45:50ID:???
>>576
今一番働いているtiger = tiger503 = ex7の最大転送量が、
圧縮して14〜15Mbpsぐらい。
http://mumumu.mu/mrtg/mrtg-rrd.cgi/traffic/ex7traf.html

2台だと、圧縮して30Mbpsぐらいはさばけると。

この頃って、もう圧縮してた(mod_gzip)はずだから、
http://web.archive.org/web/20011127064159/http://www.yakin.cc/

tiger4台分ぐらいなんじゃないかしら。
580root▲ ★
垢版 |
04/11/24 19:49:12ID:???
てことはなにかい。

4 x (morningcoffee + news4vip + entrance + keiba + base) = 2001年8月の2ちゃんねる

っていうことなのか。
04/11/24 19:49:12ID:zANVD3pv
8月の閉鎖騒動の時は圧縮してなかったんでわ?
582root▲ ★
垢版 |
04/11/24 19:50:21ID:???
>>581
そっすね。
圧縮前の転送量ベースなら、ほぼぴったりか。
04/11/24 19:50:39ID:gWJBlVQT
>>580
狼とVIPの書き込みの多さはただごとじゃないからのう
野球と競馬もROMが半端なく多いからのう
04/11/24 19:59:30ID:???
つまり、圧縮して30Mbpsくらいだったのかぁ。
2001年8月の2ちゃんねる
= 2 x ex7鯖
= ex7鯖 + news18鯖 + news19鯖 x 2
= morningcoffee + news4vip + entrance + keiba + base + anime + mnewsplus + newsplus x 2
(trafiicinfoは各種データがmnewsplusの2%くらいなのではずした)

(ノ∀`)アチャー
04/11/24 21:53:32ID:g/SvI2MW
すげー

あらゆる意味で・・・
04/11/24 21:56:21ID:+ZRnpHE8
もしかして、bbs.cgi内で開いたファイルで
明示的にcloseしてないのがあって
それがmod_perlで動作させようとしたときに影響してる、
なんてことはないですかね。

いや、mod_perlでexitした時の動作とか全然知らないし
メモリ不足が原因なら、全然関係ないんですが。
04/11/25 05:31:21ID:WpWvuctR
exitの代わりにreturnで戻すのはだめ?
常駐してんだから終了させんじゃなくapacheに戻してやる。
exitするとデータがクリアしたのに、他のプロセスで同じモジュールが動き続けて馬鹿になってゾンビが出る。
dieは?こいつも同じ原因を作る。
588root▲ ★
垢版 |
04/11/25 18:15:12ID:???
mod_perlからはとりあえず一時撤退するとして、
SpeedyCGIを使ってみるというのは、どうなんだろう。
589root▲ ★
垢版 |
04/11/25 18:45:57ID:???
Perl側を変えないとすると、こうかな。
# まだ入れてない。

LoadModule speedycgi_module libexec/apache2/mod_speedycgi.so

# まずは安全のため、機を見てコメントアウトとか数字を増やすとか
<IfModule mod_speedycgi.c>
MaxRuns 0
</IfModule>

# bbs.cgiだけSpeedyCGIにしてみる
<IfModule mod_speedycgi.c>
<Files bbs.cgi>
SetHandler speedycgi-script
</Files>
</IfModule>
590root▲ ★
垢版 |
04/11/25 23:23:58ID:???
きたく。ねむい。

>>589は、明日昼間あたりに入れてみるか。
04/11/25 23:29:25ID:???
これは何がどうなってどうなると予想されるものなんですか?
現状の2ちゃんねるにおいての話しとして、
592root▲ ★
垢版 |
04/11/25 23:38:52ID:???
>>591
これが、一番まとまっていると思います(原文の翻訳かな)
http://perldoc.jp/docs/modules/CGI-SpeedyCGI-2.21/SpeedyCGI.pod

つまりうまくいけば、Perl CGIの実行パフォーマンスが数倍になると。
で、こいつはmod_perlよりお手軽で、
mod_perlほど元プログラムをいじらなくても導入できる見込みがあると。

かつ、suexecとも仲が悪くないらしいし、
root権限なくても動かせるというのも、魅力的すね。
593root▲ ★
垢版 |
04/11/25 23:40:32ID:???
mod_perlにしてもそうですが、
基本路線としては、c系(PHP)を高速化した路線と大同小異です。

つまり、毎回でっかいPerlインタプリタを起動するコストを下げたいと。
04/11/25 23:45:11ID:???
LA を下げるのに寄与するって考えればいいのかな?
処理が比較して短い時間で終るからどんどん捌けるという路線?
595root▲ ★
垢版 |
04/11/25 23:47:15ID:???
てなわけで、

if 成功
bbs.cgi のすばらしい高速化が実現し、負荷耐性が上がるかもしれない
else
歓迎せざる、予期せぬ結果を招くかもしれない
endif

ということになります。

いろいろ調べていて、それなりに高速化の成功例も報告されているようなので、
まずは実験してみようかなと。
596root▲ ★
垢版 |
04/11/25 23:49:43ID:???
>>594
そですね。短い時間というか、
1つのbbs.cgi起動・実行をより少ない資源で済むようにすると。

仕込みはしてあるので、
万一「あっちゃー」が起こった時にリブートしていただけるんでしたら、
今やってもいいかなぁ、とか思っていたりして。して。
04/11/25 23:51:44ID:6+wq7L37
  _  ∩
( ゚∀゚)彡 じっけん!じっけん!
 ⊂彡
04/11/25 23:51:48ID:???
i am ready
599root▲ ★
垢版 |
04/11/25 23:52:40ID:???
>>598
どもです。
んでは、やってみますね。
600root▲ ★
垢版 |
04/11/25 23:56:52ID:???
入れた。まずは、

<IfModule mod_speedycgi.c>
MaxRuns 0
</IfModule>

入り。
601root▲ ★
垢版 |
04/11/25 23:57:53ID:???
#<IfModule mod_speedycgi.c>
#MaxRuns 0
#</IfModule>


をコメントアウトした。
04/11/25 23:57:59ID:???
tiger503 (ex7) ですか?
603root▲ ★
垢版 |
04/11/25 23:59:22ID:???
ちょっと様子見、、、。
604root▲ ★
垢版 |
04/11/25 23:59:35ID:???
>>602
そうです。
605root▲ ★
垢版 |
04/11/26 00:00:00ID:???
ひょっとすると、設定間違ってて、
bbs.cgiの1行目を直さないといけない、、のかも。
606root▲ ★
垢版 |
04/11/26 00:02:46ID:???
bbs.cgiの1行目を、

#!/usr/local/bin/speedy

に変更した。
607root▲ ★
垢版 |
04/11/26 00:03:48ID:???
>>606 はだめすね。
/usr/bin/perl に戻しました。
効いてない、、、。のかも。
04/11/26 00:04:22ID:???
どんどん LAが・・・
609root▲ ★
垢版 |
04/11/26 00:04:37ID:???
うまく効いてないかな?
500 エラーになるすね。>>606
610root▲ ★
垢版 |
04/11/26 00:05:41ID:???
この状態でしばらく動かしてみるです。

>>608
LAは、この時間のex7だといつもこんなかんじすね。
611root▲ ★
垢版 |
04/11/26 00:06:19ID:???
つまり、LA=30とか50とかでは、どってことないってころです。< この時間のex7
04/11/26 00:08:02ID:???
>>606 の直後にどんどん上昇し始めて
>>607 の直後から元にもどり始めた

ということです。
04/11/26 00:09:44ID:+llSYnHe
mod_perl化のための一歩
・exit()をApache::exit()でオーバーライド
614root▲ ★
垢版 |
04/11/26 00:10:08ID:???
ですね。500エラーの原因をつかむ必要がありそう。
615root▲ ★
垢版 |
04/11/26 00:11:33ID:???
今Apache起動しなおしました。LAが一時的に上がるです。
616root▲ ★
垢版 |
04/11/26 00:15:20ID:???
ふむ、やはり500エラーになるですね。

(>>606>>600入りでやってみた)
617root▲ ★
垢版 |
04/11/26 00:17:02ID:???
[Thu Nov 25 07:14:22 2004] [error] [client 219.197.196.67] Premature end of script headers: bbs.cgi, referer: http://ex7.2ch.net/test/read.cgi/morningcoffee/1101308600/l50

って言うなぁ。< speedyに食わせると
618root▲ ★
垢版 |
04/11/26 00:18:37ID:???
ちょっと、簡単なスクリプトで試してみるです。
619root▲ ★
垢版 |
04/11/26 00:21:09ID:???
http://ex7.2ch.net/test/mod_speedycgi/mod_perl_test.cgi

動くみたいだなぁ。
(mod_perl_testとなってますが、speedycgiで実行してます)
04/11/26 00:21:17ID:76OGEP8i
>>617
use CGI::Carp qw(fatalsToBrowser);

を入れると、エラーの実態が表示されるので参考になるかと。
ただし、その部分のソースコードも表示されるのでゴニョゴニョ
621root▲ ★
垢版 |
04/11/26 00:24:01ID:???
>>620
うーむ、それわ、、、。
04/11/26 00:26:42ID:76OGEP8i
>>621
とりあえず、正しいhttpdレスポンスを吐き出していないかと思いますです(苦笑)>ぷりめちゃーなんたら
04/11/26 00:29:44ID:XVDEKJVQ
#!/usr/bin/speedy -r10000

use strict;

use warnings;

use sigtrap;


...
624root▲ ★
垢版 |
04/11/26 00:32:32ID:???
<IfModule mod_speedycgi.c>
<IfModule>

で囲んじゃ、だめとわかたです。
囲まなければ、1行目を変えなくてもspeedyで起動する(で、500エラー)。
625root▲ ★
垢版 |
04/11/26 00:37:08ID:???
MaxRuns 0
ではなくて、
SpeedyMaxRuns 0
だったとわかったです。

ちなみに上記でも500エラー。

あとは、500エラーの原因は何か、と。
04/11/26 00:38:13ID:76OGEP8i
んぢゃ、cp bbs.cgi ナンタラbbs.cgi で複製を作って、 use CGI::Carp qw(fatalsToBrowser); 入れちゃうとか(^-^;)

でもってそろそろ眠m(_ _)m
627root▲ ★
垢版 |
04/11/26 00:40:49ID:???
で、さらに、
<IfModule mod_speedycgi.c>
ではなくて、
<IfModule mod_speedycgi2.c>
だとわかった。

あとは、500エラーの原因さえわかれば。
04/11/26 00:43:25ID:XVDEKJVQ
exit使ったらだめとか
04/11/26 01:03:27ID:QmFQtdHo
順番にやっていけばいいかと
前提:perlccによる実行形式を削除
1) 1行目を変えるのみ&MaxRunsを1にする(-- -r1)
2) MaxRunsを指定しない
3) mod_speedycgiを使ってみる
630root▲ ★
垢版 |
04/11/26 01:08:35ID:???
-- -r1 があたりのもより。
631root▲ ★
垢版 |
04/11/26 01:10:42ID:???
動いたもより。
632root▲ ★
垢版 |
04/11/26 01:12:38ID:???
今の設定

LoadModule speedycgi_module libexec/apache2/mod_speedycgi.so
<IfModule mod_speedycgi2.c>
SpeedyMaxRuns 1
</IfModule>

で、
<IfModule mod_speedycgi2.c>
<Files bbs.cgi>
SetHandler speedycgi-script
</Files>
</IfModule>

に設定。

これで、元bbs.cgiをいじることなく、bbs.cgiだけspeedycgi配下に。
633root▲ ★
垢版 |
04/11/26 01:13:01ID:???
みるみるLAがさかってゆく、、、。< ex7
634root▲ ★
垢版 |
04/11/26 01:16:05ID:???
うそみたいに軽くなった。

これで、しばらくようすをみてみよう。
635root▲ ★
垢版 |
04/11/26 01:25:18ID:???
でもこれだと、毎回起動はしてる、、、だよなぁ、たぶん。

どのくらい効果があるかは、しばらく観察ということで、

ごはんたべてきます。

从o^ー^从御飯喰
http://ex7.2ch.net/test/read.cgi/morningcoffee/1101210350/
04/11/26 01:26:30ID:+llSYnHe
たとえ-r1だとしても、バイトコンパイルのキャッシュが効くとか?
04/11/26 01:29:05ID:760svNOj
>>635
静かに楽しそうでなんかうれしいよ
04/11/26 01:30:58ID:+llSYnHe
もしかして$ENV{'QUERY_STRING'}でパラメータを渡しているところが初期化ルーチンの最初だけとかじゃ無い?

環境変数を渡すタイミングが初期化時だけだとハマりどころかも。
04/11/26 01:34:09ID:+llSYnHe
あとexit前に
%Hoge = ();
みたいな感じで消去しとかないと-r1じゃないと動かないスクリプトになるという肝。
640root▲ ★
垢版 |
04/11/26 01:57:00ID:???
>>638-639
たぶん、備後の予感。
しかしわたしわ、Perlかけないし。
04/11/26 02:05:26ID:QmFQtdHo
よかったよかった
04/11/26 02:07:05ID:ww4C5adr
>>640
ガンガレー。
643root▲ ★
垢版 |
04/11/26 02:38:22ID:???
speedy_backendのゴミプロセスが残っていたようなので、それらをkillして、

SpeedyTimeout 60

を追加して、httpdを立ち上げなおした。
644root▲ ★
垢版 |
04/11/26 12:43:04ID:???
emの問題の続き

stable(RELENG_5)には、対応するするbugfix入りました。
Tue Nov 23 22:28:40 2004 UTC (2 days, 5 hours ago) by rwatson
http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/dev/em/if_em.c?rev=1.44.2.4&content-type=text/x-cvsweb-markup

今度の RELENG_5_3 candidate は反映されるのかな。
645root▲ ★
垢版 |
04/11/26 12:43:33ID:???
お、するするって。
ま、いっか。
646root▲ ★
垢版 |
04/11/26 16:11:18ID:???
>>632 の設定する場合、
いうまでもなく、SuExecをやめないとだめでした。

つまり、

User ch2live16
Group ch2

とかにしないとだめ。

# いきなり(たぶん)ファイルロックかからなくって、ぐわわと重くなり、リブート、、、。
647root▲ ★
垢版 |
04/11/26 16:12:12ID:???
で、1行目を変える方法(#!/usr/bin/perl → #!/usr/local/bin/speedy -- -r1 -t60)なら、
SuExec配下になるので、従来どおりで問題ないと。
648root▲ ★
垢版 |
04/11/26 16:17:34ID:???
あ、もちろんその場合は、

#SuexecUserGroup ch2live16 ch2

は、上記のようにコメントアウトで。
649root▲ ★
垢版 |
04/11/26 16:43:40ID:???
ex7見ると、、、。

56485 ch2ex7 131 0 4320K 3680K RUN 0 69:32 68.70% 68.70% speedy_back
96829 ch2ex7 131 0 4316K 3680K RUN 2 184:26 67.48% 67.48% speedy_back
59449 ch2ex7 131 0 4320K 3684K RUN 0 64:19 66.99% 66.99% speedy_back

なんか、ぼそってるすね。例のbbs.cgiぼそり現象がそのままきてるのか。
うーん。

そっか、RLimitCPUとか、moduleにすると効かなくなるのね。

Apache側でlimitかけてやらんと、だめなわけね。
設定しよう。

しかし、実際に動かしてみないと、わからんことばかり。
650root▲ ★
垢版 |
04/11/26 17:00:10ID:???
apache2limits_enable="YES"
apache2limits_args="-e -t 60"

を/etc/rc.confに入れて、Apache再起動でいいのかな。
とりあえず、ex7にて。
651root▲ ★
垢版 |
04/11/26 17:50:27ID:???
>>650 を ex7 live16 live17 に入れた。
652root▲ ★
垢版 |
04/11/26 19:31:55ID:???
やっぱ、ぼそるすね。

16551 ch2ex7 127 0 4320K 3688K CPU2 1 9:37 96.14% 96.14% speedy_back

しかたないすね、、、。/etc/login.conf をいじろう。
653root▲ ★
垢版 |
04/11/26 19:34:51ID:???
~/.login_conf でいいのかな。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況