2009年11月10日火曜日

TIME_WAIT にやられた

WAN で連帯するシステムで、動的IPって何だよ!の続きです。
 まぁ、最初の話では、当然固定IPで、サーバOSを入れるに決まってんだろーという話をしていたんです。それが、どこをどう転がれば、動的IPとWinXPにDBサーバとGISのサーバをぶっこんで、そのマシンでクライアント・アプリも動かして、IISが稼働してSoapのISAPIからGISサーバやDBサーバに更新かけて、ペンティアム4のシングル・コア、メモリ2Gで動いてます…って話になるんだよ!という構成のシステムがあってですね。
 負荷をかけると、途中で外部センターからのデータ送信が失敗するという現象が起こる…ってんで、現調してました。どうも、そのマシン内でのTCP接続が途中で失敗しているのが原因みたいでした。ISAPI の DLL から、TCP接続をかけていて、TCPのクライアント側からちゃんと切断しているけども、netstat -a で見ると TIME_WAIT の嵐!
 センターから IIS への Soap 通信は、HTTP/1.1 の接続で、Keep-Alive が効いているので、一度に大量の更新をかけても基本的に接続数が増えない。しかし、Soap の1リクエスト毎に TCP 接続しているので、こちらの後処理がうまく行っていなければ問題である。IIS への Soap 通信も細切れになる可能性は十分にある。自前で書いてる部分は、TIME_WAIT でも SO_REUSEADDR オプションを指定して回避は可能であるけども、IIS 等はアウト・オブ・アンダーコントロールである。TIME_WAIT に絡む設定を調べていくうちに、WinXP では、ポートの最大接続数は 5000で、切断までの最大待ち時間は 120 秒で、サーバ用途では少なくとも、5000, 60秒という設定になるらしい事が判明した。負荷も考えると短時間に大量に接続と切断が繰り返されるのであれば、20000, 30秒ぐらいでも良いと思う。
 参考1参考2
 ちなみに、boost::asio で、コントロールしようと思うと、こんな感じになるのでしょうか…。

 納得が行かないのは、自前で書いたTCPの切断…。CLOSE_WAIT や TIME_WAIT とかが気持ち悪いので、クライアントから切断するようにしたのに、ゴミが残る???見ると、ウィルス・チェッカーがパケットをスニッフしていて同じように TIME_WAIT をしてる…。うーん…クライアントから切断時に FIN が飛んでないのか?ウィルス・チェッカーが行儀悪いのか?何か別の原因か?

 とりあえず、ISAPI.DLL からは、どうせ同一マシン内の接続しか無いようなので、スピード・アップと TIME_WAIT 対策も兼ねて UDP で接続する事にし、レジストリのパラメータを

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\MaxUserPort = 20000
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\TcpTimedWaitDelay = 30

という風にする事で回避する事にした。

2009/11/11 追記: TIME_WAIT は迷子になったパケットが到着するための受け口として存在するようです。よって、正規の動作と考えて良いみたいです。ちなみに非同期IOでコントロールしていれば、迷子もクソも無さそうに思えます。

2009年11月8日日曜日

boost::polygon

 キターッ!!!という気がするのだけども、とりあえず演算してみることに…。やっつけスクラッチです。


//#pragma warning (disable: 4351)
//#pragma warning (disable: 4805)

/*
Copyright 2008 Intel Corporation

Use, modification and distribution are subject to the Boost Software License,
Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt).
*/

#include <boost/polygon/polygon.hpp>
#include <boost/foreach.hpp>
#include <cassert>
#include <iostream>
namespace gtl = boost::polygon;
using namespace boost::polygon::operators;

typedef gtl::polygon_data<int> Polygon;
typedef gtl::polygon_traits<Polygon>::point_type Point;
typedef std::vector<Polygon> PolygonSet;

std::ostream& operator << (std::ostream& os, const Point& p ) {
os << "(" << x(p) << "," << y(p) << ")";
return os;
}

std::ostream& operator << (std::ostream& os, const Polygon& p) {
Polygon::iterator_type s = p.begin();
Polygon::iterator_type e = p.end();
while( s != e ) {
os << *s << ",";
++s;
}
return os;
}
std::ostream& operator << (std::ostream& os, const PolygonSet& s) {
BOOST_FOREACH( const Polygon& p, s ) {
os << p << " : ";
}
return os;
}


int main() {

Point pts1[] = {
gtl::construct<Point>( 0, 5000),
gtl::construct<Point>( -4330, -2500),
gtl::construct<Point>( 4330, -2500)
};
Point pts2[] = {
gtl::construct<Point>( 0, -5000),
gtl::construct<Point>( 4330, 2500),
gtl::construct<Point>( -4330, 2500)
};


Polygon poly1, poly2, poly3, poly4;
gtl::set_points(poly1, pts1, pts1+3);
gtl::set_points(poly2, pts2, pts2+3);

PolygonSet ps1, ps2, ps3, ps4, ps5;
ps1 += poly1;
ps2 += poly2;

ps3 += ps1 & ps2;
ps4 += ps1 | ps2;
ps5 += (ps4 - ps3);

std::cout << ps3 << std::endl;
std::cout << ps4 << std::endl;
std::cout << ps5 << std::endl;


return 0;
}


2009年11月5日木曜日

ジニ係数に現れないもの

 竹中平蔵先生のおっしゃっていたジニ係数が悪くないという論旨が、どうにも、ひっかかるので、考察してみました。生活をする単位は、家族なわけでして、昔であれば男性一人が働いて家族を養っていたのだと思います。ところが、男性一人の収入では足りなくて、共働きしているというケースが増えているのでは?という気がしてしょうがないのです。こういうものは、ジニ係数では測れないと思います。生活最低水準を維持するために、一方では余裕の時間が減る、または、心身を削る事になると思います。収入という面で換算すれば負荷がかかって折れ曲がる寸前の棒は多少悪化しても、見かけ上は折れていません。ジニ係数で見れば、少し悪くなっているかもしれない程度の現象にしか見えないと感じます。
 

2009年11月4日水曜日

カヤックしてない

 今シーズンは、千歳川に肩慣らしに2回行っただけ…。せめて空知川か幾春別川ぐらいは行きたかった。現在持っている T1 はスピードが遅くて、もうちょい速い艇が欲しいところ。そこで、リバーサーフィンならぬネットサーフィン…。Dragorossi Fish に惹かれるけど、買えないよなぁ…。

2009年11月2日月曜日

仮面ライダー555コレクション

 オークションについて(ニッチ市場の勉強)を長々と書きましたが、コレクションを振り返って見ることに…。現在4歳のうちの息子には、高すぎて見せる事すら出来ない状況です。成長して、いつの日か、このブログを発見して愕然とする日がやってくるのでしょうか?まぁ、スイッチが入ってしまって、嫁さんにも呆れられてしまったと思います。視線が痛々しかったです。何か届く度に「また何か頼んだ?」と…。ファイズ・ショットは箱の状態が悪くてテンションが下がりました。それにカイザ・ショットはファイズ・ショットと違いは微差で、カイザ・ショットは別にいいや…と本体だけの入手です。後でファイズ・ショットの本体抜きが出回ったので箱を入手して取り替えました。ファイズ・アクセルは、まとめて入手した関係でチャイニーズ版と日本版の2つを持ってます。ファイズ・ブラスターは、テレビシリーズでも後半にちょこっと出てきただけ、人工衛星からエネルギーを転送するという設定なので、屋内では使えないだろ…とか、まぁ、思い入れが無いので揃える気がありませんでしたが、多少気になったので欠品ながら入手しました。スマート・パッドも、まとめて入手した関係で、集める意志は無かったけどあります。こうやって、振り返ってみると、結構すごい事に…。つか、やりすぎだろ…orz。












2009年11月1日日曜日

使える!経済学の考え方 感想

 「使える!経済学の考え方」 404 blog not Found で紹介されていて、面白そうなので購入しました。しかし、一部内容が難解です。数学の知識が、そんなに無くても読める感じで紹介されていましたが、途中、独立した事象の総和が1でない確率空間でない確率が登場し、かなり面食らいました。一般的な集合論が成立しないので、論理学も我々が一般的に考える論理学の枠組みでは考えられず、体系自体が無矛盾かどうかを考えなければならない数学の世界が、サラリと語られてます…。ここは、ちょっと理解できませんでした。
 久しぶりに日曜日の朝にテレビを見ていたら、竹中平蔵先生が出演されていて、日本はジニ係数が、そんなに悪くないのに、日本では、あたかも格差が広がっているような言葉だけが一人歩きしていると主張されていて、へー、ジニ係数だ!と、この論点を理解できた事に嬉しくなりました。
 このジニ係数ですが、専業主婦等も含めた試算、年間所得だけを比較した試算、保有資産も含めた試算、などなど、とり方によって傾向が変わってきそうで、ちょっと気になりました。こんな事を思考できるのも本書のおかげです。
 第6章のケインズが何故注目されているかを解説したあたりは、以前に世界危機のセミナーを受けた時に紹介された本が、どうして注目されているのかを伺い知る事ができて、良かったです。もう一度、再読してみようかな?という気になりました。
 若干、難解な部分も含まれていますが、今までの中で一番身になった本でした。理系の人は、この本からスタートしても良いのではないでしょうか?

クラウド版RAID5

パリティ付きストライプ・セットって、あるじゃないですか?あれのクラウド版を思いついてしまいました。ちょうど、W3Cにウェブ・ストレージとかの規格が上がってたんで、無料のディスク・サービスが 500M,500M,500M と三個所以上あれば、これら3つのクラウドを統合して、パリティ付きストライプ・セットとして 1G のディスク・サービスとして利用できちゃうんじゃないですか?
 2つのサービスが同時に崩壊しない限り大丈夫で、1つのサービスが崩壊しても、どこかから新しいサービスなり、スペースなりを追加すれば、クラウド・ホット・スワッピング…なんちゃって…。
 くだらねぇけど、うまく冗長化できれば、パブリック・クラウドでプライベート・クラウドを構築できちゃうとか…?