read.cgi再開発スレ Part2
■ このスレッドは過去ログ倉庫に格納されています
◆cZfSunOs.Uさん作成のmod_cgidsoにより、大きな負荷軽減が図られたread.cgi。
このスレでは、そんなread.cgiの(再)開発・実装すべき機能について取り扱います。
前スレより:
574 名前:FOX ★[sage] 投稿日:05/01/05 15:54:28 ID:???
全てのサーバ cobra/toger/banana で read.cgi の dso化が完了。
これから href の置き換え ime.nu 対応を行い
それが終了したら第一ステップは完。
第2ステップは
2-1) bug つぶし
2-2) 仕様の変なところは変更
2-3) 時代背景にあわせたデコレーション
こんなとこかと、
前スレ:
read.cgi再開発スレ
http://qb5.2ch.net/test/read.cgi/operate/1087199303/ >>189
*「あたらしい モジュールを いれますか?
→はい
いいえ >>188
どもです。あのページから最新版とれるんでしたっけ。 read.cgiとかをオープンソース化してほすぃ。。。 >>191 どもです.192 さん仰せのように取れますです. というわけで、memories関連はこちらで。
■ read.cgi@memories のDSO化 (part1)
http://qb5.2ch.net/test/read.cgi/operate/1109427188/ read.cgi@dso を LA(LOad Average)=1.0 以上の場合
read.cgi を「人大杉」表示にした
これでどれくらいの効果があるかわからないがテストしてみよう。
1.0 の値は 10.0 くらいが妥当か? @banana
でも tiger もあるしな・・・
read.cgi 内で Banana/Tiger/Cobra の区別はどうやって見るんだ? Tiger/Banana/Cobra の自動判定は
そのうちということで
今回はソースに埋め込んでみよう
Tiger/Cobra = 20.00
Banana = 5.00
あたりがリミッタかな? , _ ノ)
γ∞γ~ \ ハニャン
| / 从从) )
ヽ | | l l |〃 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
`从ハ~_ーノ) ∬< ピロリさん、rootさん、お茶どぞー♪
つ旦__))つ旦 \_____________ 実験するです
banana = 4.0
tiger/cobra = 10.00
ではじめます >>198
ex7(tiger503)とlive系(oyster901 = live8 / tiger507 = live16は実験中なので、リミッターなしをきぼんぬ。
あとは、そんなところだと思います。 少なくしないと実験にならないです
これでも今の時間だとでれも人大杉にならないような
実際に負荷が上がって
人大杉になって自力で解除になる
というのが実現できたら意味のあることだったと言うことですなぁ >>203
ふむ。
さすがにex7は、人大杉になったようで。 効果絶大ですね。@ ex7
load averages: 11.90, 23.87, 27.27 ほほぅ
ホントに効果絶大だ、、、
私も ex7 観察してたっす NTVのニートの番組が終わったせいかもしれないけど、今10切ったですね。@ ex7
load averages: 8.13, 19.76, 25.39 ってことは、読み手と書き手を分断できるだけで、軽く倍は出るってことすかね。 >>208
さすがに予想は難しいなぁ
Banana 4.0
Tiger 20.0
実験サーバ(live16,ex7,live8) 200.0
にするっす Tiger / Banana / Cobra の自動判定より,httpd.conf か .htaccess で
SetEnv ReadCgiLoadAvgLimit 10
のように設定するのが簡単で,設定変更も柔軟にできるのではないでしょうか.
read.cgi ではこのような感じで.
double loadavg;
const char *loadavglimit;
getloadavg(&loadavg, 1);
loadavglimit = apr_table_get(r->subprocess_env, "ReadCgiLoadAvgLimit");
if (loadavglimit && loadavg >= atof(loadavglimit)) {
apr_table_setn(r->err_headers_out, "X-Load-Avg",
apr_psprintf(r->pool, "%.2f (Limit = %s)", loadavg, loadavglimit));
return HTTP_SERVICE_UNAVAILABLE;
}
あと,read.cgi そのものを軽くするということでは,Last-Modified チェック + mod_mem_cache
http://dso.2ch.net/test/read.cgi/myanmar/1101888913/64-68n
が実運用でどの程度効果があるかも見てみたいところです. >>211
そですねぇ
そんな感じにしますかねぇ
music4 の負荷が順調に上がってきている
発動するかも、 某板がうるさいので
ex7 , live16 も 再導入 誘導されてきました。そういうことでしたか。
新たな試みを実施するため、ex7のread.cgiリミッターを一時的にはずしました。
httpd => speedy => speedy_backendだった起動方法を、
httpd => speedy_backendの直接起動に変更。
こっちでやっています。
スレタイを、ex7総合実験スレ、とでもすればよかったかも。
【実験】ミニ雪だるま作戦―ex7で3/8 3:10あたりから実験はじめます
http://qb5.2ch.net/test/read.cgi/operate/1110218877/ 移転に伴い、read.cgi の自動人大杉装置の閾値を、
live16 live20 ex10 : LA=200 (実験用、事実上ノーリミット)
他のtigerサーバ : LA=20
bananaサーバ : LA=4
に再設定した。 >>217
お疲れさまです・・・
軽いのは嬉しいなぁ、今夜が楽しみです・・・ >LoadAverage = 5.00 (4.00以上は人大杉)
>人大杉
>このスレを見る方法http://www2.2ch.net/live.html
このスレを見る方法の後のリンク先が「もうずっと人大杉」って……(^^;;;)
リンク先はp2.2chかMonazillaがいいと思うのですが。 若槻の2ch発言で自動人大杉発動…とか結構面白いなこのシステム 曜日が表示されるようになったのはここの人達のお陰でつか?
だとしたら乙です 前100をクリックすると前101を表示します。前100・次100で移動するとずれるので不便です(´・ω・`)
書き込み数が1のスレッドを http://鯖/test/read.cgi/板/スレ/1-100 で開くと書き込みが表示されません。2ch検索が/1-100を使っているので、そこから新しく建ったスレを開いて表示されなくて(´・ω・`) 皇紀2665/04/01(金) っての関連は何処スレで決まったの?
専ブラが誤作動する…orz 2chの動作報告はここで。 パート16
http://qb5.2ch.net/test/read.cgi/operate/1103455176/758
758 名前:動け動けウゴウゴ2ちゃんねる[] 投稿日:2005/04/17(日) 22:25:31 ID:Gsk3CeB70
あと人大杉画面の「掲示板へ戻る」のリンクがhttp:///になってる
だそうです。
たしかに、そうなるみたい。 .│
\ │ /
\__..│__./
,:-‐'" ̄ \│ノヽ-、.
/ \
/ \
/ ヽ
/ ヽ
| ヽ
| ,,,,;;::''''' ヽ
| ,,,,;;::::::::::::::: __ │
| " __ :::: '"ゞ'-' │
| - '"-ゞ'-' ::::::... │
| ::::::: │
| ( ,-、 ,:‐、 │
| │
| __,-'ニニニヽ . │
. │ ヾニ二ン" │ <ブーン
│ │
丿 │ /⌒ヽ
⊂二二二( ^ω^)二⊃
| / ブーン
( ヽノ
ノ>ノ
三 レレ /⌒\
∩ / @∀@ \
| |__ / @∀@∀@ ヽ ___
|___( @∀@∀@∀@∀@)__ | コノスレオモスレー
| @∀@∀@∀@ / | |
(  ̄ヽ ノ ∪
ノ ̄\ ノ
三 |_/ |_/ /⌒ヽ ブーン
二( ^ω^)二⊃ /⌒ヽ ブーン
| / /⌒ヽ ブーン 二( ^ω^)二⊃
( ヽノ 二( ^ω^)/⌒ヽブーン /
ノ>ノ ⊂二二二( ^ω^)二⊃ ヽノ /⌒ヽ ブーン
レレ ( ヽノ| / ノ>ノ 二二( ^ω^)二⊃
ノ /⌒ヽ ブーン レレ | /
⊂二二二( ^ω^)二⊃ /⌒ヽ ブーン ( ヽノ
| / レ 二( ^ω^)二⊃ ノ>ノ
( ヽノ | / レレ
ノ>ノ ( ヽノ
三 レレ ノ>ノ ,.-''"¨ ̄¨`' ‐ 、
(,,(,,i,,,i,,,,,,,,i,,,,i,,),,)
) (
∧,.∧゚д゚ )
/・ ・`ヽと )
(。。ノ しヽ
/ヽ / ノ
( へ /|.|
ヽヽ| | U
| | パコパコ
U ∧_∧
⊂二二< `ш´>二⊃
| / ブーン
( ヽノ
ノ>ノ
三 レレ
/⌒ヽ ブーン
二( ^ω^)二⊃ /⌒ヽ ブーン
| / /⌒ヽ ブーン 二( ^ω^)二⊃
( ヽノ 二( ^ω^)/⌒ヽブーン /
ノ>ノ ⊂二二二( ^ω^)二⊃ ヽノ /⌒ヽ ブーン
レレ ( ヽノ| / ノ>ノ 二二( ^ω^)二⊃
ノ /⌒ヽ ブーン レレ | /
⊂二二二( ^ω^)二⊃ /⌒ヽ ブーン ( ヽノ
| / レ 二( ^ω^)二⊃ ノ>ノ
( ヽノ | / レレ
ノ>ノ ( ヽノ
三 レレ ノ>ノ
⊂二二(^ω^)二⊃ブーン
ブ━(^ω^≡^ω^)━ン!!
ブ━(n‘ω‘)η゚・*ン!!
ブ━(^ω^)(ω^*)━ン!!
⊂ つ⊂ つ
(( ⊂、/ \〜つ
ミ ∪ ≡ ∪′彡 ,.-''"¨ ̄¨`' ‐ 、
(,,(,,i,,,i,,,,,,,,i,,,,i,,),,)
) (
∧,.∧^ω^ )
/・ ・`ヽと )
(。。ノ しヽ
/ヽ / ノ
( へ /|.|
ヽヽ| | U
| | パコパコ
U
ちょwwwwwwwwwwwここはヤバスwwwwwwwwwwwwwwwww
/⌒ヽ ブーン
二( ^ω^)二⊃ /⌒ヽ ブーン
| / /⌒ヽ ブーン 二( ^ω^)二⊃
( ヽノ 二( ^ω^)/⌒ヽブーン /
ノ>ノ ⊂二二二( ^ω^)二⊃ ヽノ /⌒ヽ ブーン
レレ ( ヽノ| / ノ>ノ 二二( ^ω^)二⊃
ノ /⌒ヽ ブーン レレ | /
⊂二二二( ^ω^)二⊃ /⌒ヽ ブーン ( ヽノ
| / レ 二( ^ω^)二⊃ ノ>ノ
( ヽノ | / レレ
ノ>ノ ( ヽノ
三 レレ ノ>ノ
怒られちゃいます><
全部ラウンジの仕業なんです><
vipは関係ないです>< ファミレスでよくみかける、頭の弱いお子様のようだな。
店内をブンブン飛んでいるのもそっくり。 これを、あげよう。
read.cgi に、
・ex11 anime を tiger サーバとして、
・ex12 ex13 live21 を cobra サーバとして、
それぞれ登録しました。
これで、LAが banana 並みでも人大杉になってしまう現象は、なおりました。
今、サーバ名できめうちになっていますが、
これをうまく判定するのは、どうしたらよかんべか。
具体的には、CPUの種別(Pen4, Xeon, Opteron)あたりをCな言語からとれると、よかったり。 %sysctl -a | grep Xeon
hw.model: Intel(R) Xeon(TM) CPU 2.80GHz
これ、つかうかぁ。
%./sample
AMD Opteron(tm) Processor 242
とれた、とれた。
これを、組み込むか。
#include <stdio.h>
#include <sys/types.h>
#include <sys/sysctl.h>
int main(void)
{
int mib[2];
char model_name[BUFSIZ];
size_t len;
mib[0] = CTL_HW;
mib[1] = HW_MODEL;
len = sizeof(model_name);
sysctl(mib, 2, &model_name, &len, NULL, 0);
printf("%s\n", model_name);
return 0;
} read.cgi ver 05.0.1.1 2005/06/02
これで、今後新しいCPUがこない限り、埋め込みしなくて済むはず。
/****************************************************************/
/* GetHwModel */
/****************************************************************/
int GetHwModel(char *model_name, size_t len)
{
int mib[2];
mib[0] = CTL_HW;
mib[1] = HW_MODEL;
if (sysctl(mib, 2, model_name, &len, NULL, 0) == -1) return -1;
return 0;
}
/****************************************************************/
/* GetMaxLA */
/****************************************************************/
double GetMaxLA(CH2READ *ch2)
{
char model_name[BUFSIZ];
if(GetHwModel(model_name, sizeof(model_name)) == -1) return maxLAbanana ;
if(strstr(model_name,"Opteron")) return maxLAcobra ;
if(strstr(model_name,"Xeon")) return maxLAtiger ;
if(strstr(model_name,"Pentium")) return maxLAbanana ;
return maxLAbanana ;
} カキコ本文の行末に余計な半角スペースがついてしまっていて
コピペするときに邪魔なんですが。。
全ての行末についてくるので余計なバイトも食うし、なんとかなりませんか? >>254
>コピペするときに邪魔なんですが。。
これが一因 254じゃないけど
>>255
わざとってこと?何の意味があんの?わかんないんだけど。 おしまいの空白は、こわれたSJISを突っ込まれても大丈夫なようにするためですね。
とりあえず、やむを得ないと思われ。 >>258
dso化する前のread.cgiはちゃんとSJISの片割れまで考慮して空白を取ったり
取らなかったりしていました。
ただ、そこまでやると当然コストがかかるわけで(ry
という話は分かります。 不正バイトシーケンスが含まれていないかのチェックは,本来は read.cgi よりも
bbs.cgi がやるべきではあるんですよね.ただ,現状ではただでさえ重い bbs.cgi が
さらに(ryってことになるんで,雪だるま作戦が進展して bbs.cgi の処理が
フロントエンドとバックエンドに分散化され余力が出てきたら,そのチェック処理を
入れるのもいいのかも知れませんね. 心の中で応援してあげて下さい。私も応援しています。 スレッドキーが9桁の過去ログは、html が gzip 圧縮されていないと(key.html.gz がないと)
datが存在しません。削除されたかURL間違ってますよ。
と表示されるようです。
対応よろしくお願いします。 >>1-みたいにレスアンカーの直後にハイフンがつくとリンクが無効になる不具合
前は確か>>1の部分だけは生きてた http://anime.2ch.net/test/read.cgi/anime/11202299148/
2ちゃんねる error 2023
error 2023 番のメッセージはなににすればいい?
だそうです。 if(strlen(ch2->zz_key) > 10)return 2023;
>>274
ソースとdatを嫁、ってゆってるわけね、、、。はぁ。 いやー
単にkeyの桁が多いだけなんじゃないの?
つまり「そんな板orスレッドないよ。」かと、 >>276
ソースちょっと読んで、わかりました。
てへてへ。
て裕香、スレッドキーは10桁までだとゆうことですか。 で、なんでこんなことになったかというと、
機動種士ガンダムSEED DESTINY PHASE-561
http://anime.2ch.net/test/read.cgi/anime/1120319538/
このへんから、先週の盛り上がり加減(というか実況度合い?)はどうだったのかなぁと、
ちと覗いてみたら、1のテンプレのキーが、そうなっていたと。 で、このエラーメッセージは、
スレッドキーの指定が不正です。
あたりが、よさげ。 機動戦士ガンタムSEED DESTINY PHASE-558
http://anime.2ch.net/test/read.cgi/anime/1120299148/
ほんとはこれだったみたい。おさわがせしました。 こちらが適当ではない内容ならすみません、
Over1000したときに出る『Over 1000 Thread』
に、日付と時刻を入れるのがよいかと思ったのですが。
普通のレスと同じ様な要領でも結構ですし。 お手数かけて済みませんでした、ありがとうございます。。 #include "apr_buckets.h"
#include "apr_date.h"
#include "apr_errno.h"
#include "apr_strings.h"
#include "apr_tables.h"
#include "util_filter.h"
#include "http_request.h"
static apr_status_t rdat_filter(ap_filter_t *f, apr_bucket_brigade *b)
{
return ap_save_brigade(f, (apr_bucket_brigade **)&f->ctx, &b, f->r->pool);
}
static apr_status_t read_dat(CH2READ *ch2, request_rec *r)
{
int rv;
ap_filter_rec_t frec = {"READDAT", {rdat_filter}, NULL, AP_FTYPE_RESOURCE, NULL};
ap_filter_t f = {&frec, NULL, NULL, r, r->connection};
char *uri = apr_pstrcat(r->pool, "/", ch2->zz_bbs, "/dat/", ch2->zz_key, ".dat", NULL);
request_rec *rdat = ap_sub_req_lookup_uri(uri, r, &f);
if (!(rv = rdat->status == HTTP_OK ? ap_run_sub_req(rdat) : rdat->status)) {
apr_brigade_pflatten(f.ctx, &ch2->BigBuffer, &ch2->zz_fileSize, r->pool);
apr_brigade_destroy(f.ctx);
ch2->zz_fileLastmod = rdat->mtime ? rdat->mtime
: apr_date_parse_http(apr_table_get(rdat->headers_out, "Last-Modified"));
}
ap_destroy_sub_req(rdat);
return rv ? APR_ENOENT : APR_SUCCESS;
}
----------------------------------------------------------------------
雪だるま版 read.cgi での dat 読み込みは↑な感じかなぁ,というのを何となく.
普通の CGI だと localhost にソケットで接続して(ryってところでしょうけど,
DSO ではサブリクエストを使えばいいんでソケット不要ですね.
ただ,mod_rewrite ではサブリクエストで reverse proxy を使えないという
制限があるんで,ProxyPass ディレクティブで↓のように指定で.
ProxyPass /livejupiter/kako !
ProxyPass /livejupiter/_datArea !
ProxyPass /livejupiter/ http://live22priv.2ch.net/livejupiter/
ProxyPassReverse /livejupiter/ http://live22priv.2ch.net/livejupiter/
CacheDisable /livejupiter/kako
CacheDisable /livejupiter/_datArea
CacheEnable disk /livejupiter/
過去ログ・dat 落ちログに関しては
・ ライブな dat のように転送 (live22 -> live22x) の即時性は要求されない.
・ mod_disk_cache のキャッシュ領域を /md に確保するとして,
即時性が要求されないデータで /md を食い潰すのはもったいない.
ということで,それらは rsync でマターリ転送することにすれば,
offlaw.cgi は無修正で Ok でしょうかね. 既出だったらすまない。メールアドレス入力欄に「sage」って入力
しなくても下げられるようになりませんか?
あれだけでも、かなり転送量減ると思う。
<a href="mailto:sage">sage</a>
今、転送量がどれくらいの位置付けで問題になってるのかは別としても、
メール欄でのsage機能を変えるって事は様々な方面に影響が出ちゃうからなぁ・・・ aタグ外せば?って話かと思ったのだが。mailto:sageは意味無いよね?みたいな ■ このスレッドは過去ログ倉庫に格納されています