【サーバ】2011夏モデルを作ろうpart2 さてチューニング始める?
まぁ いろいろ変なのを直してます
$ perl -wc f22.cgi
f22.cgi syntax OK
なぁんか詰まってたのかな。@こはだ
さっきやった時には治ってた。
犯人はおそらく
>>566
Apr 16 2011 f22.cgi
ちがうますw
このさいSETTING.TXTのSSDへのバックアップを多頻度にしようと
f15にくみこんだ、しかしどうも動きが変だ、いろいろ調べたら
liveplusの圧縮やって以降の圧縮がへんだ
それを直そうと四苦八苦、結局なおらないからliveplus処理したらlast;っていうコードいれたー
そのときf22は止めるのだ
EF2000に置き換えるんですか?
をぅっと、kohadaのf22止めるだすか!?
いやいや 作業中0644にするだけでーす
f15を眺めてみますた。
last; をみつけました。
その7行目前の処理、どう考えてもおかしゅい。(おそらく元からある処理)
意味をなしていないどころか、システムに支障を来すような希ガス。。。
なぁる♪> chmod 0644
なるほど。
だから500返してたわけか。
>>575 $SIG{$_} = sub { push(@sigs, $_[0]); } foreach (qw/HUP INT PIPE ALRM TERM USR1 USR2 IO VTALRM PROF/);
これかしらん?
私もよくわかんないのよね、たぶんSunOSさん作だと思うけど
それそれー♪多分、2002年に描いた人だと思うw
内容は処理中になぁんかシグナル飛んで来てない?っていうのを記録しているだけなんだけれども。。。
ちなみに、%SIG変数(ハシュ:perl固有のグローバルな特殊変数)を書き換えているんだけれども、%SIGって、外部からシグナルを受け取ったときの処理先(要するにサブルーチン[クロージャ])が入っています。
なので、
$SIG{$_} = sub { push(@sigs, $_[0]); }
というかたちで代入されています。
で、その後ろ。
foreach (qw/HUP INT PIPE ALRM TERM USR1 USR2 IO VTALRM PROF/);
見覚えがある文字列が並んでいるます。シグナルの別名っていうかconstantなの。(これ、鯖の環境によって変わるます@危ないよなぁ その1)
でもってこんな書き方だと、perlになれていないと意味不明かもw
foreach ('HUP', 'INT', 'PIPE', 'ALRM', 'TERM', 'USR1', 'USR2', 'IO', 'VTALRM', 'PROF');
こう書くと判りやすいかな?そう、クォーテーションで括るのマンドクセって時に使う書き方なのでした(クォート演算子[qw])
そして描き方が倒置なのでこれまた判りやすくすると、、、
foreach ('HUP', 'INT', 'PIPE', 'ALRM', 'TERM', 'USR1', 'USR2', 'IO', 'VTALRM', 'PROF') {
$SIG{$_} = sub { push(@sigs, $_[0]); }
}
こうなるます。
ようするに、HUPから1つずつ取り出して$_(スカラー変数/foreach文で代入先が省略されるとインプリシットに使われる特殊変数) に代入されるます。
なので、$SIG{HUP} = sub { push(@sigs, $_[0]); }になるんだけれども、後ろにある$_[0]って、本来は@_(配列変数/インプリシットな特殊配列[リスト]変数)の0番目(先頭)の要素なんだけれども、
これって何も代入されていないのです。なので常に未定義な値、、、とも限らない不確定な要素。(だってシグナル飛んで来たときなんてどうなっているか判らないもん@危ないよなぁ その2)
そすて元々何かしらの処理が%SIGには埋め込まれているのを強引に上書きしているので、更におかしくなるんじゃ無いの?となるのですです。
あ、$_[0] って、shiftと同じか。。。
って事で訂正m(_ _)m
@_の0番目にはシグナル名が入ってくるます。
ってことで、デバグ的な操作を放置したままって感じがしますので、放置で構わないかもしれませんw
あ、いや、放置よりも、コメントにしちゃう方が良いかもです。
・・・さっさと眠ろう。
そのうちコメントにしてみまーす
>>564 これってどうやったら見れるの?
だれかおせーて
基本的に温度取得はマザーボードに依存するから、lm_sensorsが鉄板だけどLinuxでしか動かない
FreeBSDにはbsdhwmonというのがあるらしいけど、対応マザボは少ないね
仕組みはMSR registerを読み出すだけだったはずなので、移植は容易なはず
あ、間違えた、MSRじゃなくてSMBusだな。
awabiがまだちょくちょく落ちるなぁ
突然勝手にリセットかかるのよねー、へんねー
awabiも
>>507 の設定にしてもらおう。
StartServers 1024 -> 1022
MinSpareServers 351 -> 1022 ↑あげ
MaxSpareServers 1024
MaxClients 1280 -> 1024 ↓さげ
MaxRequestsPerChild 10000
MaxMemFree 2000
たのんできましたー
じきにapache再起動はいりまーす
作業終わったそうですー
591 :
名無しさん@お腹いっぱい。(聖火リレー):2012/01/14(土) 17:23:28.83 発信元:113.197.137.154 0
sysctl -a | grep "temperature"
でCPUの温度が出ますー。
awabi
ch2awab@banana8308:~$ sysctl -a | grep "temperature"
dev.cpu.0.temperature: 82.0C
dev.cpu.1.temperature: 82.0C
dev.cpu.2.temperature: 83.0C
dev.cpu.3.temperature: 83.0C
dev.cpu.4.temperature: 85.0C
dev.cpu.5.temperature: 85.0C
dev.cpu.6.temperature: 84.0C
dev.cpu.7.temperature: 84.0C
oh
ch2haya2@tiger5501:~$ sysctl -a | grep "temperature"
dev.cpu.0.temperature: 56.0C
dev.cpu.1.temperature: 56.0C
dev.cpu.2.temperature: 56.0C
dev.cpu.3.temperature: 56.0C
dev.cpu.4.temperature: 58.0C
dev.cpu.5.temperature: 58.0C
dev.cpu.6.temperature: 57.0C
dev.cpu.7.temperature: 57.0C
597 :
名無しさん@お腹いっぱい。(関西・東海):2012/01/14(土) 19:32:57.02 発信元:124.146.174.50 (AUy3nfT) O
VIPをν速の鯖に移転させよう(提案
598 :
名無しさん@お腹いっぱい。(関西・東海):2012/01/14(土) 19:36:04.77 発信元:124.146.174.50 (AUy3nfT) O
>>593 awabiは嫌儲民の精神力で動作するサーバーだと聞いておりましたが……
>>593 やっぱり1Uに2台詰め込んだあのブレードではエアフローがろくにないんだろうな
これじゃターボブーストには入りようがない
$ sysctl -a | grep "temperature"
$
(´・ω・`)
( ^ω^)・・・
FreeBSDって、CPUのクロック推移とか見れないんです?
$SIG{$_} = sub { push(@sigs, $_[0]); } foreach (...);
上の方で言われてる↑のシグナルハンドラの件ですが,
FreeBSD のデフォルトではプロセス終了となる
シグナルに対して設定してます.
http://www.freebsd.org/cgi/man.cgi?query=signal F{15,22} の実行中に Apache 側からシグナルが送られるなどして
途中で終了していると思われるケースがたまにあって,
途中で終了するとあまりよろしくない状態になったりするので,
それに対処するために入れていたような記憶があります.
>>600 http://lwn.net/Articles/424496/ >If a core is to run in turbo mode, all other cores on the same die must be in a sleep state.
>The end result is that turbo mode can give good results for single-threaded workloads.
>>605 うぅむ、、、Apache側からシグナルが飛んでくるって云うのは、そもそもの仕組みがおかしいのではないのかなぁと。
(しかもforループの中に描かれているし)
ひとまずコメントとか付いていれば助かるのですが。
あと、これまで以上に2ちゃんねるでの活動は難しいのでしょうか?
いやあのそのこの、未来を担う若者達がうずうずしておりますですw
逮捕されちゃうからねv(*´∀`*)v
若者がんばれ!
って「若者」なのかと無粋なつっこみを入れてみるw
>>607 まぁ普通に考えればおかしいのでしょうが,
高負荷下で動いているとそういうおかしい状況になることも
たまにあるようで......
あと,for ループは当時はなかったと思うので
(他サーバのスクリプトでは今でもなかったりしますし),
後で追加されたのではないかと.
>>607 10年以上前の知識ですみませんが、NCSA httpdだと、CGIの実行中にブラウザ側で通信を切断されると、CGIを止めるためにシグナル飛んできます。タイミングに依存した記憶があります。apacheは実験したことありません_o_
612 :
611(公衆):2012/01/15(日) 17:57:34.15 発信元:220.159.142.28 0
あ、httpdからシグナルが来るというよりは、httpdとCGIの間が切れる結果、OSからSIGPIPEが飛んで来るというのが実際のところなのだと思います。
last pid: 20320; load averages: 4.37, 3.43, 3.12 up 2+01:57:53 06:10:37
1111 processes:2 running, 1108 sleeping, 1 zombie
CPU: 23.5% user, 0.0% nice, 7.1% system, 0.4% interrupt, 69.0% idle
Mem: 3687M Active, 2216M Inact, 1500M Wired, 304M Cache, 816M Buf, 79M Free
Swap: 8192M Total, 2144K Used, 8190M Free
ch2awab@banana8308:~$ sysctl -a | grep "temperature"
dev.cpu.0.temperature: 84.0C
dev.cpu.1.temperature: 84.0C
dev.cpu.2.temperature: 86.0C
dev.cpu.3.temperature: 86.0C
dev.cpu.4.temperature: 86.0C
dev.cpu.5.temperature: 86.0C
dev.cpu.6.temperature: 82.0C
dev.cpu.7.temperature: 82.0C
> 1 zombie
ゾンビって・・・
CがFだったらな
CGIはインターフェイスなんだから、きっかけだけで良いと思うのなの。
ブラウザとかで何もかもやっちゃおうとするから、おかしくなるんじゃないかなぁと。
>>613 この結果を、~/_service/に書き出すのですね♪
>>613 !temperatureで平均温度を表示してあげたいくらい熱いなぁ
#! /bin/sh -
#
# $Id: temperature.sh,v 0.1 2012/01/15 23:45:67 ch2nanashi Exp $
#
TZ=JST-9; export TZ
PATH=/usr/bin:/bin:/usr/local/bin; export PATH
_SERVICE=~/public_html/_service
_FILENAME=temperature_`date +%Y%m%d`.txt
_OUT1=`date +"%Y/%m/%d %H:%M:%S"`
_OUT2=" Temperature="
_OUT3=`sysctl -a | grep "temperature"`
echo ${_OUT1}${_OUT2}${_OUT3} >> ${_SERVICE}/${_FILENAME}
exit 0
-----
_serviceに書き出すシェルスクリプトはこんな感じかねえ
某fakef22.shを適当に改造しただけだから動くかどうかは分からん
リロードバーボンのアイデア
健在は各サーバで10分毎にPerlのcgiを起動している
処理内容はログを読んで過去10分間のアクセスを集計して激しいのを検出したらバーボン送りにする。
問題点
毎回でかいログファイルを読み込み過去10分だけ集計するので無駄な読み込みが多い
で、現stats.2ch.netのようなパイプを作って検出処理をやる
メリット1、無駄にでかいファイルを読まなくて良くなる
メリット2、10分毎というかくかくとした動きじゃなくほぼリアルタイムで検出可能となる。
>>619 リアルタイムなら高速連投スクリプトに対しても防御ができる?
かも、
賢いロジックをみんなで考えれば、
現stats.2ch.netってそもそもどんな方法だっけ。
1秒で同じIPアドレスから1000アクセス以上とかするような奴はすぐに弾けるのはいいね。
>現stats.2ch.netのようなパイプ
つまり専用の処理鯖を立ててそこにログ集めていろいろチェックするってこと?
ログ吐き出すやつを横取りすればいいんじゃねーの
バーボンは各サーバ毎にやるのがしきたりー
引っかかったIPは全サーバに配布するけどネ
ふむ
ファイルのケツから読み出すtailコマンドってファイルの大きさ関係あるのかな?
ないなら
tail -1000 ログ名 > 直近1000アクセスログ
で出力したのをチェックすればかなり負担は軽くなる→実質リアルタイムのチェックが出来るようになるけど
421775482バイト test.txt
*12570454バイト test2.txt
time tail -1000 test.txt |head > /dev/null
real 0m0.003s
user 0m0.002s
sys 0m0.001s
time tail -1000 test2.txt |head > /dev/null
real 0m0.002s
user 0m0.001s
sys 0m0.002s
400Mと12Mのファイルをtail -1000で読みだしてみたけど時間はほとんど変わらなかった
リロードボボンもこの方法でチェック前にケツから一定の行数を出力して、それを今までのチェックしているperlプログラムで読み出す
ってのじゃダメかな? statsの仕組みを理解していないから変なこと言っていたらスマソ
628 :
名無しさん@お腹いっぱい。(たこやき):2012/01/16(月) 03:08:28.52 発信元:58.188.112.77 0
CustomLogで%hだけ書き込むの追加して、
ログファイルは1分ごとに替えてやればいいんでね
11:11頃、11:12頃、...のIPアドレスだけのログが1分ごとに出来るから
cronで回すスクリプトで集計鯖に送って用済み分掃除
送るのはrsyncみたいなの動かしておいて定期的に取りに行かせても可
たまにコード書かないとマジで忘れるな
もったいないもったいない
横取りしてやるならIPの出現数をカウントしてn時間にm回でアウト判定とかにするの?
n時間をあまり長くするとリアルタイムの意味が薄れると思うけど
現在10min毎だから1min毎にはしたいなと、
632 :
名無しさん@お腹いっぱい。(たこやき):2012/01/16(月) 07:55:59.99 発信元:58.188.112.77 0
628のだとログ管理はApache謹製だしsortとuniqだけでIPアドレスと回数が抽出できるから楽だべ
パイプ使う方式だと,そのプログラムを注意深く作らないと
昔の logbuffer のように高アクセス時に Apache が詰まる恐れがあります.
今の logbuffer のように aio を使うなどすればいいんでしょうが.
一方ファイルに書き出す方式でファイル名をローテーションするのなら,
Apache に SIGHUP 送る必要があって,しかもそれが1分おきだと
負荷的にもあまりよくない状態になりそうです.ファイル名は固定して,
データ読んだ後にファイルサイズを 0 に truncate するのなら,
その必要がなくなるのでいいかもですが.
apachetopは重たいコマンドなのかな
データを拾って上位3名様ご招待とか
>>634 どもども、わかりやした
今週はいないので来週にでも実験開始してみまーす