いつきコンテンツ

ヘルプ

カウンター


2011-04-08 明日・明後日休みだー!

ひゃっほーい♪

[日記] angelbeatsのタグ検索で18844件@pixiv

1日で6件減り。まーた減り始めた。

実際には11件位増え。増え方は普通。

[日記][tDiary][FreeBSD][Ruby] また日記(ここ)がDDoS受けた

「この方法まずいかなー」で対処したら見事にまずかったので、色々引き下げて再起動。

この休み中にパッチ作るか。

→とりあえず、Apacheでいじればいいと思われる箇所は発見したが、リコンパイルめんどくさいのと、特定条件下で無限ループ状態に陥ることが判明した(==;)ので、tDiary側にも変更を加えた。

具体的には、RLimitNProc(RLIMIT_NPROC)で制限かかってる時に、IO.popen使うと無限ループに陥る。

Linuxの場合は分からないが、FreeBSD+Apache+suexecの場合、RLimitNProcで制限加えても、とりあえずスクリプトの実行までは行ってしまうのです(まぁsuexecがrootで実行されるからしゃーないが)。で、その状態でIO.popenで新しいプロセスを立ち上げようとすると、forkが失敗してしまうのです(ちなみにFreeBSDの場合、Apacheから起動されたプロセス数じゃなくて、システム全体のプロセス数とRLIMIT_NPROCが比較されます)

で、fork失敗した時には-1が返り、errnoにはEAGAINが設定されます(On-line Manual of "fork")

で、だ。

なんで戻ってこないねん! って思って、rubyのソースコード見てみたわけですよ。

retry:
switch ((pid = fork())) {
(中略)
case -1:/* fork failed */
if (errno == EAGAIN) {
rb_thread_sleep(1);
goto retry;
}
(後略)

fork失敗して、errnoがEAGAINだったら、rb_thread_sleep(1);をコールした後、goto retry。で、retryってforkの前の行にあるので、またforkしに行って……あぁ、名前的にはrb_thread_sleepは1秒現在のスレッドお休みだろうから、1秒ごとにfork失敗して無限ループになってるのね(笑)

そりゃ無限ループするわ(笑)

というわけで、timeoutを使って特定時間反応がなかったら死ぬようにしました。こんな感じ。

class IKTimeoutException < Exception; end
begin
require 'timeout'
cgi_exec_count = 0
begin
timeout(2) do
IO.popen("/bin/pgrep -G グループID -U ユーザID -f -x '/usr/local/bin/ruby 日記のスクリプトファイル名'",'r'){ |io|
io.each_line { |l|
cgi_exec_count += 1
}
}
end
rescue Timeout::Error
raise IKTimeoutException
end
if cgi_exec_count > 最大プロセス数 then
raise IKTimeoutException # めんどくさいので同じロジックへ飛ばす
end
rescue IKTimeoutException
print "Status: 503 Service Unavailable\n"
print "Content-Type: text/text\n\n"
print "503 Service Unavailable\n"
exit
rescue
print "Status: 500 Internal Server Error\n"
print "Content-Type: text/text\n\n"
print "500 Internal Server Error\n"
exit
end

本当は/bin/pgrepが実行できなかったら即ジャンプするようにしたいのだが、rubyのソース読んでる限りなんか無理っぽいので2秒の執行猶予を持たせて、その間に実行終わらなければ終了するように変更。

とりあえずはこれで一旦しのげるかな。

……明日・明後日で時間あれば、Apacheのソースいじって必要数以上のCGIがそもそも起動しないように書き換えます……。パッチは公開予定。

上のソース見れば分かりますが、timeout設定無しだと、Apacheが落としてくれない限りCGIが立ち上がりっぱなしになります(forkから先へ進まない)が、アクセスあるたびにCGIは実行される(プロセス数が減らない)ので、固まってるよーな状態のままになります(^^; てか、なってました(笑)

rubyから別プロセス立ち上げずにシステムの全プロセスデータ抽出する方法が欲しい!

……CでCGIのラッパーを書けば出来ますが(最初にpgrepとおなじよーなコードを実行後、rubyスクリプトをexecすればok)それも微妙なのですよねぇ。あぁ、でもApacheのパッチ作る時にどうせ似たよーなコードが必要になるから、もしかしたら作るかも(笑)

[情報] 日本製に世界がNO! マジでどうなるのニッポン

この辺含めて東電には賠償して欲しいね。

ウチの会社はどうするのかなぁ……放射線測定結果つけることになるんだろうなぁ……。

[情報] 東京電力、計画停電打ち切り 政府、夏も「原則実施しない」方針

突発的な需要の増大でやむを得ず計画停電を実施することもありうる

それが一番困るんじゃぁぁぁぁーーーー!!!!

せめて2時間前には告知してくれ(IT業界の場合)

製造業だと本気で死ねるかも。

[ネタ] これはゾンビですか? 第12話 「はい、まだ続きます」 ‐ ニコニコ動画(原宿)来ました

アフター編かな?(笑)

公式MADです!wwww

[ネタ] 【魔法少女まどか☆マギカ】僕と契約して劇場公開してよ!【劇場予告編】 ‐ ニコニコ動画(原宿)がランキング1位……が、権利者削除。

この動画は株式会社エスエムイーレコーズの申立により、著作権侵害として削除されました。
対象物: コネクト_audio file

あ、ほんとだ。原曲使ってる。

……★「コネクト」歌ってみました Ver-irony ‐ ニコニコ動画(原宿)に置き換えかな?

[ネタ] 更に闘う日常 ‐ ニコニコ動画(原宿)

まだ1話しか来てないのに早いよ!!!www

[ネタ] ニコニコ動画での2011年春の新作アニメ配信に4タイトル追加

「よんでますよ、アザゼルさん。」「まりあ†ほりっく あらいぶ」「星空へ架かる橋」「俺たちに翼はない」

まりほりキタ━━━━(゜∀゜)━━━━!!

……と思ったら

【料金】:第1話無料、2話以降有料

orz

[ネタ] 【放送事故】NHKで絶対に放送してはいけないものが全国放送された件

何かと思えば……。

これくらい普通だってばw

[ネタ][情報] Linux Foundation エグゼクティブ・ディレクターの強気発言、マイクロソフトはもはや敵ではない

うまいこと色んな会社に利益分散できて良いんじゃないでしょうかね。

あと、サーバ分野では、管理コンソールがWindowsで、下についてるサーバ群がLinuxってパターンも結構あったりする。

[情報] 送電線が遮断、北海道から本州への送電ストップ

なにげに昨日の地震の影響が凄いところに……。

そして、なにげに自立できてる北海道。

[情報] 1号機 震災の夜に燃料露出直前

NHKが入手した資料には、地震当日の先月11日に福島第一原発の1号機から3号機で測定された原子炉の「水の高さ」や「圧力」などの値が示されていますが、東京電力などは、これまで地震の翌日以降の値しか公表してきませんでした。

なにこのあからさまな情報隠し……。

関連:震災当日に炉水位急減 福島第一のデータ公表

「報道機関に言われたから出した。隠していたように言われるのは心外」と説明


あほかぁぁぁぁぁぁぁぁーーーーーーー!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

[日記] 今日の作業曲も、遥かに仰ぎ麗しの OP 風のRhythm(フルコーラスバージョン)でした。

通常版買っても(確か)この曲はついてこないので注意。

今日もかにしの~

Last Update: 2015-06-12 10:59:46

カレンダー

2003|04|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|07|08|11|
2013|03|05|08|
2014|01|
2015|04|05|06|07|09|10|12|
2016|01|03|05|06|10|11|
2017|06|
2018|05|08|09|10|11|
2019|04|08|12|
2020|03|08|09|11|
2021|05|
2022|04|
2023|12|
Generated by tDiary version 4.1.2 + amazon(DB Patch 0.2.1) + counter(DB Patch 0.2) + IKPatch version beta 4.0.1.
Powered by Ruby version 2.1.5-p273 with ruby-fcgi