どんなことでも

この人 blog を書くのだろうか?

TIME_WAIT の時間の変更方法

2005-11-16 21:41:24 | Unix
FreeBSD
???不明???
ab -n 100000 -c 300 http://localhost/ とかでベンチマークを取ってみたところ、「MaxClients 16」と「MaxClients 256」で、あまり大きな差はない。TIME_WAIT 辺りが律速になっているのかな? この間 TIME_WAIT の数は 1206 でほぼ変わらず。
sysctl -a vm.zone にある tcptw の FREE が 0 になる。こいつは何物?(まぁ、TCP_TIMEWAIT の数でしょう)
kernel の options MAXFILES=xxxxx を増やす(maxuser を増やすとこれも勝手に増える)と同時に open できる socket の数が増えるのでちょっとだけ何とかなるかも。
sys/netinet/tcp_input.c を眺めたところ TIME_WAIT = 2MSL らしいので「sysctl の net.inet.tcp.msl」の値をいじることで変更が可能と思われる。
Apache の設定を「MinSpare,MaxSpare,StartServers,MaxClients 32 / KeepAlive Off」で「ab -n 100000 -c 100 http://localhost/
sysctl net.inet.tcp.msl=30000 (デフォルト)とした場合
Request per second: 502.12 [#/sec] (mean)
Connection times Total:
 min 82 max 1830 mean 197 sd 82.0 median 166
sysctl net.inet.tcp.msl=5000 とした場合
Request per second: 493.37 [#/sec] (mean)
Connection times Total(ms):
 min 40 max 5692 mean 201 sd 193.1 median 162
max が伸びてしまいましたねぇ。min,max もですが、σ,2σ,3σの範囲も見たいです。
今は I/O が激しいので後で再テストした方がいいですね。

Linux
「/proc/sys/net/ipv4/tcp_fin_timeout」へTIME_WAIT値を設定

Solaris (ms単位: 1分)
ndd -set /dev/tcp tcp_time_wait_interval 60000

相手が応答しない場合、ESTBLISHEDになっていられる時間の設定。(default:120分)
ndd -set /dev/tcp tcp_keepalive_interval 120000
nsug FAQ

nohup

2005-11-16 07:17:58 | Solaris
“障害防止策”が機能せず
システムに再びトラブル発生(上)

使ったことはないですが、手順書に「nohup <コマンド>」と書いていれば良かったんですねよねぇ、きっと。
Solaris な sh だと必要だというのは覚えているんですが、FreeBSDとか *BSD な sh では必要なんだろうか? csh 使いな私には分からない... たしか SysV系だと要ったような?

それ以前に根本的な問題として『障害は発生するもの』として確認作業を行っている筈なのに、確認作業後リカバリーの時間が全く用意されていないというのはどういう了見だ?こういう状態では、確認作業はただの飾りに過ぎず実質的な効果を見込めない「無駄な作業」だと思うのだが。