タイムアウト処理追加
atpagesサーバのCGIプログラムlimit制限
以下のスクリプトを動かしてatpagesサーバのlimit値を表示させてみた
#!/usr/local/bin/ruby puts <<EOH Content-type: text/html <html> <head></head> <body> EOH puts Process.getrlimit(Process::RLIMIT_CORE)[0].to_s + '<br>' puts Process.getrlimit(Process::RLIMIT_CPU)[0].to_s + '<br>' puts Process.getrlimit(Process::RLIMIT_DATA)[0].to_s + '<br>' puts Process.getrlimit(Process::RLIMIT_FSIZE)[0].to_s + '<br>' puts Process.getrlimit(Process::RLIMIT_NOFILE)[0].to_s + '<br>' puts Process.getrlimit(Process::RLIMIT_STACK)[0].to_s + '<br>' puts Process.getrlimit(Process::RLIMIT_AS)[0].to_s + '<br>' puts Process.getrlimit(Process::RLIMIT_MEMLOCK)[0].to_s + '<br>' puts Process.getrlimit(Process::RLIMIT_NPROC)[0].to_s + '<br>' puts Process.getrlimit(Process::RLIMIT_RSS)[0].to_s + '<br>' puts Process.getrlimit(Process::RLIMIT_SBSIZE)[0].to_s + '<br>' puts <<EOH </body></html> EOH
結果は
9223372036854775807 10 1073741824 9223372036854775807 14745 134217728 10000000 9223372036854775807 5547 9223372036854775807 9223372036854775807
こんな感じで一プロセスあたり10秒の制限があるようだ
このため多くのURLが貼られると処理が終わらず表示ができずにいた
根本的な解決にはならないが(実際今でも表示できないことがある)1レス当たりの処理時間を最大2秒となるようにタイムアウト処理を追加してみた
タイムアウト処理の書き方はこんな感じ
begin timeout(2) { yourfunc } rescue Timeout::Error rescuefunc end