[Ultramonkey-l7-develop 1121] Re: FW: Sorryサーバーへの流入

アーカイブの一覧に戻る

Takeda taked****@lab*****
2015年 10月 2日 (金) 16:00:48 JST


田沼さん

竹田です。

コメントありがとうございます。

> が、ちょっとコメントさせてください。少し修正の方向性が違う気がして…。
> これだと事象が発生したタイミングから正しい接続数にはならないということで
> あっていますよね。
> (実際の接続数が0になるタイミングで正しくなりますが…)
> 
> あくまで暫定対処というのであればよいですが、
> 
> >  減算する関数(virtualservice_tcp::connection_inactive)が2回連続で呼
> > び出されるため、
> 
> これが問題なのであれば、1回になるように修正するべきではないでしょうか。
 こちらについてですが、調査を進めたところ
 仰るとおりconnection_inactiveの呼び出しを1回にすることが可能なように
 思えました。

 ■想定される原因と対処
  connection_inactive関数は以下の3つの関数から呼び出されています。

   (1)tcp_session::up_thread_realserver_disconnect
   (2)tcp_session::up_thread_realserver_check
   (3)up_thread_realserver_disconnect_event

  ここで問題と思われるのが(3)の関数です。
  ※(3)は必ず(1)or(2)の後に呼び出される関数です。

  (1)(2)の関数内でconnection_inactiveが呼び出されるタイミングは
  リアルサーバ用のソケット(realserver_socket)のクローズを行った直後に
  なりますが、(3)ではそういった条件が無く呼び出されています。

  例)up_thread_realserver_disconnectより抜粋
2058                 if (realserver_socket->is_open()) {
2059                         realserver_socket->close(error_code);
2060                         parent_service.connection_inactive(realserver_endpoint); ←ココ

  したがって、(1)(2)でconnection_inactiveの実行の有無に関わらず
  結局は(3)で必ず実行されてしまうことになり、
  結果としてconnection_inactive が(1)or(2)→(3)と重複して呼び出されて
  active_countが2重にデクリメントされていたということになります。

  なので、対処としては単に(3)内でconnection_inactiveを
  呼び出している箇所をコメントアウトすればよいものと考えられます。

> 
> また、サーバ側のコネクションがサーバからのクローズで切断されたのであれば
> クローズを受けたタイミングでクライアント側のコネクションも切断するべきだと
> 思うのですが、事象の内容を見る限りそうなっていないということですよね。
> ・・・そうでしたっけ?
 ご認識のとおり、現状ではサーバからのクローズを受けた時点では
 すぐさまクライアント側のコネクションを切断するようにはなっていません。
 
 細かく言うと、サーバからのクローズを受けた時点で
 クライアント側のコネクションもクローズするようなフラグ(exit_flag)を
 立ててはいますが、今回ようにTCPの接続を行った後
 リクエストが到着するまでに時間がかかるようなケース※では、
 クライアントからのリクエストを待っているあいだ
 スレッドループが待ち状態(upthread_status = UPTHREAD_LOCK)になります。
 この状態だと、クライアント側から何かしらアクションを受けないと
 ループが再開されずフラグの判定にも到達しないため、
 引いてはクライアント側のクローズ処理も実行されません。

 ※今回は
    1.telnetで仮想サービスに接続
  2.手入力でリクエスト「GET / HTTP/1.0」を発行
  となっているので、接続→リクエスト到着までに結構な間があります。

 こちらについては改善案を考えておりますので
 別途ご報告したいと思います。


以上、よろしくお願いいたします。



> -----Original Message-----
> From: tanum****@nttda***** [mailto:tanum****@nttda*****]
> Sent: Thursday, October 01, 2015 2:00 PM
> To: taked****@lab*****
> Cc: ultra****@lists*****
> Subject: RE: [Ultramonkey-l7-develop 1117] FW: Sorryサーバーへの流入
> 
> 竹田さん
> 
> 田沼です。
> ご対応ありがとうございます。
> 
> が、ちょっとコメントさせてください。少し修正の方向性が違う気がして…。
> これだと事象が発生したタイミングから正しい接続数にはならないということで
> あっていますよね。
> (実際の接続数が0になるタイミングで正しくなりますが…)
> 
> あくまで暫定対処というのであればよいですが、
> 
> >  減算する関数(virtualservice_tcp::connection_inactive)が2回連続で呼
> > び出されるため、
> 
> これが問題なのであれば、1回になるように修正するべきではないでしょうか。
> 
> また、サーバ側のコネクションがサーバからのクローズで切断されたのであれば
> クローズを受けたタイミングでクライアント側のコネクションも切断するべきだと
> 思うのですが、事象の内容を見る限りそうなっていないということですよね。
> ・・・そうでしたっけ?
> 
> ソースをさっぱり見ずにコメントして申し訳ありませんが
> よろしくお願いします。
> 
> 
> > -----Original Message-----
> > From: ultra****@lists*****
> > [mailto:ultra****@lists*****] On Behalf Of
> > Takeda
> > Sent: Wednesday, September 30, 2015 2:55 PM
> > To: ultra****@lists*****
> > Subject: [Ultramonkey-l7-develop 1117] FW: Sorryサーバーへの流入
> >
> > developの皆様
> >
> > 竹田です。
> >
> > 昨日usersに寄せられた問合せについてですが、
> > 調査をしたところコードレベルで修正が必要なように思えました。
> >
> > 以下、原因と対処案です。
> > また、原因について認識違いがなければ
> > 以下の内容でそのままチケットを発行したいと思いますので、
> > ご確認をお願いします。
> >
> > 想定される原因:
> >  仮想サービスへの同時接続数を示す内部の変数active_count(unsigned long
> > long型)が
> >  0の時に減算がかかってラップアラウンドしてしまい
> >  unsigned long longの最大値(18446744073709551615)になってしまうことが
> >  原因と考えられます。
> >
> >  その結果として 同時接続数(active_count) > "maxconn" となってしまい、
> >  Sorry状態へ移行したままになると思われます。
> >
> >  具体的には、active_countが0の状態において、
> >  質問文中の以下の手順を実行するとactive_countを
> >  加算する関数(virtualservice_tcp::connection_active)が1回、
> >  減算する関数(virtualservice_tcp::connection_inactive)が2回連続で呼
> > び出されるため、
> >  結果としてラップアラウンドが発生しているようでした。
> >
> > >> 2). 上の構成でultramonkeyl7のvipにtelnetコマンドで接続、後続の
> > apacheが
> > >> timeoutする60秒以上放置
> >  →接続時にconnection_activeが1回, timeoutでconnection_inactiveが1
> > 回
> >
> > >> 3). 2)の状態からtelnet側で操作を行うと後続がtimeoutしているので何
> > も返っ
> > >> てきません
> >  →操作を行った時点でconnection_inactiveが1回
> >
> > 対処案:
> >  active_countがラップアラウンドしないようにチェックを加える。
> >
> >  パッチを作成してみましたのでご確認をお願いします。
> >  動作検証をしたところひとまず問題は解決されているようでした。
> >  ただ、active_countの加減算ごとにロックをかけることになるので
> >  性能に結構影響が出るかもしれません。
> >
> >
> > 以上、よろしくお願いします。
> >
> >
> > -----Original Message-----
> > From: 小林 年伸 [mailto:toshi****@jig-s*****]
> > Sent: Wednesday, September 30, 2015 11:35 AM
> > To: ultra****@lists*****
> > Cc: taked****@lab*****
> > Subject: Re: Sorryサーバーへの流入
> >
> > 竹田様
> >
> > ジグソー小林です。
> >
> > 早速のご確認ありがとうございます。
> > まずは教えていただきました対処方法を
> > 試してみます。
> >
> > どうぞよろしくお願いいたします。
> >
> >
> > On 2015/09/30 10:54, Takeda wrote:
> > > 小林様
> > >
> > > コミュニティメンバの竹田と申します。
> > >
> > > ご質問いただいていたSorryサーバの件です。
> > >
> > > 手順およびログを提示いただきありがとうございます。
> > > こちらでも試したところ、事象を再現することができました。
> > >
> > > 詳しい原因は調査中ですが、根本的な解決にあたっては
> > > コードを修正しなくてはいけない可能性もあるため、
> > > 当面の対処として以下の実施を検討いただけますでしょうか。
> > >
> > > ○"maxconn"の設定をしない/もしくは"0"(無制限)にする
> > >  この設定により、指定数以上の同時接続があった場合に
> > >  Sorryサーバに接続するという動作を行わなくします。
> > >
> > >  なお、接続先のリアルサーバがすべてダウンした場合に関しては
> > >  自動的にSorryサーバへの振り分けが行われます。
> > >
> > >  また、以下のコマンドで手動によりSorryサーバへの
> > >  振り分けのオン/オフを切り替えることは可能です。
> > >
> > >  例)
> > >   # l7vsadm -E -t <仮想サービス> -m <プロトコルモジュール> -s <スケ
> > ジューラ>
> > >  -f <1:Sorryオン/0:Sorryオフ>
> > >
> > > ○Sorryサーバを使用せず"fallback"を使用する
> > >  本設定は仮想サービスに属するリアルサーバが全て異常となり、
> > >  どのリアルサーバにも振り分けられなくなった場合に、
> > >  自動的に追加される代替リアルサーバの設定です。
> > >  (仮想サーバ毎に設定可能です)
> > >
> > >  設定方法については管理者マニュアルをご覧ください。
> > >
> > https://osdn.jp/projects/ultramonkey-l7/docs/uml7-administration_manua
> > l_v3.3_ja/ja/6/uml7-administration_manual_v3.3_ja.txt
> > >    4.2.1.3 RealServer 異常時の設定
> > >   (2) fallback
> > >
> > > いずれに関してもmaxconnの使用を避けるような
> > > 形になってしまいますが、ご検討ください。
> > >
> > >
> > > 以上、よろしくお願いいたします。
> > >
> > >
> > >> -----Original Message-----
> > >> From: ultra****@lists*****
> > >> [mailto:ultra****@lists*****] On Behalf Of 小
> > >> 林 年伸
> > >> Sent: Tuesday, September 29, 2015 10:02 AM
> > >> To: ultra****@lists*****
> > >> Subject: [Ultramonkey-l7-users 601] Sorryサーバーへの流入
> > >>
> > >> 開発者の皆様
> > >>
> > >> jig-sawの小林と申します。
> > >>
> > >> ultramonkeyl7-3.1.1、 ultramonkeyl7-3.1.2
> > >> であるきっかけで内部的にactive_countが膨大な数になり
> > >> 突然Sorryサーバーに流れる事象がありましたので
> > >> ご質問させていただいてよろしいでしょうか。
> > >>
> > >> 以下私の方で確認できた部分です。
> > >>
> > >> =================================================
> > >> ①構成
> > >> =================================================
> > >> エッジルーター
> > >> ↓
> > >> ultramonkeyl7-3.1.1 or ultramonkeyl7-3.1.2
> > >> OS:CentOS 6.6 64bit
> > >> pacemaker, corosyncの冗長構成
> > >> ↓
> > >> httpリアルサーバー × 2 (apache)
> > >> OS:CentOS 5.5 64bit
> > >>
> > >> ・l7vsd設定 ※ログ部分は省略させていただきます。
> > >> ------------------------------------------
> > >> #
> > >> # l7vsadm setting
> > >> #
> > >> [l7vsadm]
> > >> cmd_interval = 1
> > >> cmd_count = 10
> > >> con_interval = 1
> > >> con_count = 1
> > >>
> > >> #
> > >> # l7vsd setting
> > >> #
> > >> [l7vsd]
> > >> maxfileno = 65535
> > >>
> > >> #
> > >> # virtualservice setting
> > >> #
> > >> [virtualservice]
> > >> session_thread_pool_size    = 32
> > >> throughput_calc_interval    = 500
> > >> #num_of_core_uses            = 0
> > >>
> > >> #
> > >> # Session Settings
> > >> #
> > >> [session]
> > >> upstream_buffer_size = 8192
> > >> downstream_buffer_size = 8192
> > >> server_connect_timeout = 5
> > >>
> > >> [replication]
> > >> 使用していません
> > >>
> > >> [snmpagent]
> > >> enable = "false"
> > >> ------------------------------------------
> > >>
> > >> ・l7director設定
> > >> ------------------------------------------
> > >> # - Monitor Settings
> > >> checktimeout     = 5
> > >> negotiatetimeout = 5
> > >> checkinterval    = 10
> > >> retryinterval    = 5
> > >> checkcount       = 3
> > >>
> > >> # - Real Server Operation
> > >> quiescent        = yes
> > >> #fallback         = 127.0.0.1:80
> > >>
> > >> # - Monitor Configuration File
> > >> configinterval   = 10
> > >> autoreload       = yes
> > >>
> > >> # HTTP
> > >> virtual  = 〓vip〓:80
> > >>           real=172.20.0.251:80 masq 10
> > >>           real=172.20.0.253:80 masq 10
> > >>           module      = sessionless --forwarded-for
> > >>           sorryserver = 〓sorry srver〓
> > >>           scheduler   = lc
> > >>           qosup       = 125M
> > >>           qosdown     = 125M
> > >>           checktype   = connect
> > >>           service     = http
> > >>           quiescent   = no
> > >>           checkcount  = 2
> > >>           session_thread_pool_size = 50
> > >>           maxconn     = 1000
> > >> ------------------------------------------
> > >>
> > >> ・apache設定 ※timeout値とpreforkモジュール部分のみ抜粋です
> > >> ------------------------------------------
> > >> Timeout 60
> > >> KeepAlive On
> > >> MaxKeepAliveRequests 100
> > >> KeepAliveTimeout 2
> > >>
> > >> <IfModule prefork.c>
> > >> StartServers       8
> > >> MinSpareServers    5
> > >> MaxSpareServers   20
> > >> ServerLimit      256
> > >> MaxClients       256
> > >> MaxRequestsPerChild  4000
> > >> </IfModule>
> > >> ------------------------------------------
> > >>
> > >> =================================================
> > >> ②事象
> > >> =================================================
> > >> 1). 上の構成でultramonkeyl7のvipにtelnetコマンドで接続
> > >> $ telnet 〓vip〓 80
> > >> Trying 〓vip〓
> > >> Connected to 〓vip〓
> > >> Escape character is '^]'.
> > >> GET / HTTP/1.0
> > >>
> > >> 通常通り操作を行えばリアルサーバーのコンテンツが返ってきます。
> > >> 以下はl7vsd_virtualserviceのデバッグログです
> > >> ----------------------------------------
> > >> 2015/09/28 19:03:12 [DEBUG] l7vsd_virtualservice VSD10700031 active
> > >> session thread id = 0x16003f0 〓ホスト名〓 0x7ffd78fc7700
> > >> virtualservice_tcp.cpp:457
> > >> 2015/09/28 19:03:12 [DEBUG] l7vsd_virtualservice VSD10700032
> > >> pool_session.size = 49 〓ホスト名〓 0x7ffd78fc7700
> > >> virtualservice_tcp.cpp:460
> > >> 2015/09/28 19:03:12 [DEBUG] l7vsd_virtualservice VSD10700033
> > >> active_session.size = 1 〓ホスト名〓 0x7ffd78fc7700
> > >> virtualservice_tcp.cpp:463
> > >> 2015/09/28 19:03:12 [DEBUG] l7vsd_virtualservice VSD10700034
> > >> active_count = 0 〓ホスト名〓 0x7ffd78fc7700
> > virtualservice_tcp.cpp:466
> > >> 2015/09/28 19:03:12 [DEBUG] l7vsd_virtualservice VSD10700007
> > in_function
> > >> : void session_thread_control::startupstream() 〓ホスト名〓
> > >> 0x7ffd78fc7700 session_thread_control.cpp:211
> > >> 2015/09/28 19:03:12 [DEBUG] l7vsd_virtualservice VSD10700008
> > >> out_function : void session_thread_control::startupstream() :status =
> > 1
> > >> 〓ホスト名〓 0x7ffd78fc7700 session_thread_control.cpp:219
> > >> 2015/09/28 19:03:12 [DEBUG] l7vsd_virtualservice VSD10700011
> > in_function
> > >> : void session_thread_control::startdownstream() 〓ホスト名〓
> > >> 0x7ffd78fc7700 session_thread_control.cpp:246
> > >> 2015/09/28 19:03:12 [DEBUG] l7vsd_virtualservice VSD10700012
> > >> out_function : void session_thread_control::startdownstream() : status
> > =
> > >> 1 〓ホスト名〓 0x7ffd78fc7700 session_thread_control.cpp:254
> > >> 2015/09/28 19:03:12 [DEBUG] l7vsd_virtualservice VSD10700035 active
> > >> session thread id = 0x1610400 〓ホスト名〓 0x7ffd78fc7700
> > >> virtualservice_tcp.cpp:512
> > >> 2015/09/28 19:03:12 [DEBUG] l7vsd_virtualservice VSD10700036
> > >> pool_session.size = 48 〓ホスト名〓 0x7ffd78fc7700
> > >> virtualservice_tcp.cpp:515
> > >> 2015/09/28 19:03:12 [DEBUG] l7vsd_virtualservice VSD10700037
> > >> active_session.size = 1 〓ホスト名〓 0x7ffd78fc7700
> > >> virtualservice_tcp.cpp:518
> > >> 2015/09/28 19:03:12 [DEBUG] l7vsd_virtualservice VSD10700038
> > >> active_count = 0 〓ホスト名〓 0x7ffd78fc7700
> > virtualservice_tcp.cpp:521
> > >> 2015/09/28 19:03:12 [DEBUG] l7vsd_virtualservice VSD10700039
> > >> out_function: void virtualservice_tcp::handle_accept( const
> > >> boost::shared_ptr<session_thread_control> , const
> > >> boost::system::error_code& err ) 〓ホスト名〓 0x7ffd78fc7700
> > >> virtualservice_tcp.cpp:544
> > >> 2015/09/28 19:03:12 [DEBUG] l7vsd_virtualservice VSD10700082
> > >> in_function: void virtualservice_tcp::connection_active( const
> > >> boost::asio::ip::tcp::endpoint& in ): in = 172.20.0.251:80 〓ホスト
> > 名〓
> > >> 0x7ffceef02700 virtualservice_tcp.cpp:1706
> > >> 2015/09/28 19:03:12 [DEBUG] l7vsd_virtualservice VSD10700083
> > >> out_function: void virtualservice_tcp::connection_active() 〓ホスト
> > 名〓
> > >> 0x7ffceef02700 virtualservice_tcp.cpp:1722
> > >> 2015/09/28 19:03:22 [DEBUG] l7vsd_virtualservice VSD10700084
> > >> in_function: void virtualservice_tcp::connection_inactive( const
> > >> boost::asio::ip::tcp::endpoint& in ): in = 172.20.0.251:80 〓ホスト
> > 名〓
> > >> 0x7ffceef02700 virtualservice_tcp.cpp:1738
> > >> 2015/09/28 19:03:22 [DEBUG] l7vsd_virtualservice VSD10700085
> > >> out_function: void virtualservice_tcp::connection_inactive() 〓ホス
> > ト名
> > >> 〓 0x7ffceef02700 virtualservice_tcp.cpp:1774
> > >> 2015/09/28 19:03:22 [DEBUG] l7vsd_virtualservice VSD10700013
> > in_function
> > >> : void session_thread_control::stopdownstream() 〓ホスト名〓
> > >> 0x7ffcee501700 session_thread_control.cpp:264
> > >> 2015/09/28 19:03:22 [DEBUG] l7vsd_virtualservice VSD10700014
> > >> out_function : void session_thread_control::stopdownstream() : status
> > =
> > >> 0 〓ホスト名〓 0x7ffcee501700 session_thread_control.cpp:271
> > >> 2015/09/28 19:03:22 [DEBUG] l7vsd_virtualservice VSD10700086
> > >> in_function: void virtualservice_tcp::release_session( const
> > >> tcp_session* session_ptr ): session_ptr = 0x16ea650 〓ホスト名〓
> > >> 0x7ffceef02700 virtualservice_tcp.cpp:1790
> > >> 2015/09/28 19:03:22 [DEBUG] l7vsd_virtualservice VSD10700089
> > >> pool_session.size = 48 〓ホスト名〓 0x7ffceef02700
> > >> virtualservice_tcp.cpp:1810
> > >> 2015/09/28 19:03:22 [DEBUG] l7vsd_virtualservice VSD10700090
> > >> active_session.size = 1 〓ホスト名〓 0x7ffceef02700
> > >> virtualservice_tcp.cpp:1813
> > >> 2015/09/28 19:03:22 [DEBUG] l7vsd_virtualservice VSD10700091
> > >> active_count = 0 〓ホスト名〓 0x7ffceef02700
> > virtualservice_tcp.cpp:1816
> > >> 2015/09/28 19:03:22 [DEBUG] l7vsd_virtualservice VSD10700092
> > >> pool_session.size = 49 〓ホスト名〓 0x7ffceef02700
> > >> virtualservice_tcp.cpp:1825
> > >> 2015/09/28 19:03:22 [DEBUG] l7vsd_virtualservice VSD10700093
> > >> active_session.size = 0 〓ホスト名〓 0x7ffceef02700
> > >> virtualservice_tcp.cpp:1828
> > >> 2015/09/28 19:03:22 [DEBUG] l7vsd_virtualservice VSD10700094
> > >> active_count = 0 〓ホスト名〓 0x7ffceef02700
> > virtualservice_tcp.cpp:1831
> > >> 2015/09/28 19:03:22 [DEBUG] l7vsd_virtualservice VSD10700095
> > >> out_function: void virtualservice_tcp::release_session( const
> > >> tcp_session* session_ptr ): session_ptr = 0x16ea650 〓ホスト名〓
> > >> 0x7ffceef02700 virtualservice_tcp.cpp:1836
> > >> 2015/09/28 19:03:22 [DEBUG] l7vsd_virtualservice VSD10700009
> > in_function
> > >> : void session_thread_control::stopupstream() 〓ホスト名〓
> > >> 0x7ffceef02700 session_thread_control.cpp:229
> > >> 2015/09/28 19:03:22 [DEBUG] l7vsd_virtualservice VSD10700010
> > >> out_function : void session_thread_control::stopupstream() : status =
> > 0
> > >> 〓ホスト名〓 0x7ffceef02700 session_thread_control.cpp:236
> > >>
> > >>
> > >> 2). 上の構成でultramonkeyl7のvipにtelnetコマンドで接続、後続の
> > apacheが
> > >> timeoutする60秒以上放置
> > >> $ telnet 〓vip〓 80
> > >> Trying 〓vip〓
> > >> Connected to 〓vip〓
> > >> Escape character is '^]'.
> > >>
> > >> リアルサーバがtimeoutすると以下のログが出力されました
> > >> ----------------------------------------
> > >> 2015/09/28 19:14:10 [DEBUG] l7vsd_virtualservice VSD10700027
> > >> in_function: void virtualservice_tcp::handle_accept( const
> > >> boost::shared_ptr<session_thread_control> , const
> > >> boost::system::error_code& err ): err = false, err.message = Success
> > 〓
> > >> ホスト名〓 0x7fcc5ea5d700 virtualservice_tcp.cpp:349
> > >> 2015/09/28 19:14:10 [DEBUG] l7vsd_virtualservice VSD10700031 active
> > >> session thread id = 0x1e0dd70 〓ホスト名〓 0x7fcc5ea5d700
> > >> virtualservice_tcp.cpp:457
> > >> 2015/09/28 19:14:10 [DEBUG] l7vsd_virtualservice VSD10700032
> > >> pool_session.size = 49 〓ホスト名〓 0x7fcc5ea5d700
> > >> virtualservice_tcp.cpp:460
> > >> 2015/09/28 19:14:10 [DEBUG] l7vsd_virtualservice VSD10700033
> > >> active_session.size = 1 〓ホスト名〓 0x7fcc5ea5d700
> > >> virtualservice_tcp.cpp:463
> > >> 2015/09/28 19:14:10 [DEBUG] l7vsd_virtualservice VSD10700034
> > >> active_count = 0 〓ホスト名〓 0x7fcc5ea5d700
> > virtualservice_tcp.cpp:466
> > >> 2015/09/28 19:14:10 [DEBUG] l7vsd_virtualservice VSD10700007
> > in_function
> > >> : void session_thread_control::startupstream() 〓ホスト名〓
> > >> 0x7fcc5ea5d700 session_thread_control.cpp:211
> > >> 2015/09/28 19:14:10 [DEBUG] l7vsd_virtualservice VSD10700008
> > >> out_function : void session_thread_control::startupstream() :status =
> > 1
> > >> 〓ホスト名〓 0x7fcc5ea5d700 session_thread_control.cpp:219
> > >> 2015/09/28 19:14:10 [DEBUG] l7vsd_virtualservice VSD10700011
> > in_function
> > >> : void session_thread_control::startdownstream() 〓ホスト名〓
> > >> 0x7fcc5ea5d700 session_thread_control.cpp:246
> > >> 2015/09/28 19:14:10 [DEBUG] l7vsd_virtualservice VSD10700012
> > >> out_function : void session_thread_control::startdownstream() : status
> > =
> > >> 1 〓ホスト名〓 0x7fcc5ea5d700 session_thread_control.cpp:254
> > >> 2015/09/28 19:14:10 [DEBUG] l7vsd_virtualservice VSD10700035 active
> > >> session thread id = 0x1e1f890 〓ホスト名〓 0x7fcc5ea5d700
> > >> virtualservice_tcp.cpp:512
> > >> 2015/09/28 19:14:10 [DEBUG] l7vsd_virtualservice VSD10700036
> > >> pool_session.size = 48 〓ホスト名〓 0x7fcc5ea5d700
> > >> virtualservice_tcp.cpp:515
> > >> 2015/09/28 19:14:10 [DEBUG] l7vsd_virtualservice VSD10700037
> > >> active_session.size = 1 〓ホスト名〓 0x7fcc5ea5d700
> > >> virtualservice_tcp.cpp:518
> > >> 2015/09/28 19:14:10 [DEBUG] l7vsd_virtualservice VSD10700038
> > >> active_count = 0 〓ホスト名〓 0x7fcc5ea5d700
> > virtualservice_tcp.cpp:521
> > >> 2015/09/28 19:14:10 [DEBUG] l7vsd_virtualservice VSD10700039
> > >> out_function: void virtualservice_tcp::handle_accept( const
> > >> boost::shared_ptr<session_thread_control> , const
> > >> boost::system::error_code& err ) 〓ホスト名〓 0x7fcc5ea5d700
> > >> virtualservice_tcp.cpp:544
> > >> 2015/09/28 19:14:10 [DEBUG] l7vsd_virtualservice VSD10700082
> > >> in_function: void virtualservice_tcp::connection_active( const
> > >> boost::asio::ip::tcp::endpoint& in ): in = 172.20.0.251:80 〓ホスト
> > 名〓
> > >> 0x7fccba1fc700 virtualservice_tcp.cpp:1706
> > >> 2015/09/28 19:14:10 [DEBUG] l7vsd_virtualservice VSD10700083
> > >> out_function: void virtualservice_tcp::connection_active() 〓ホスト
> > 名〓
> > >> 0x7fccba1fc700 virtualservice_tcp.cpp:1722
> > >>
> > >>
> > >> 3). 2)の状態からtelnet側で操作を行うと後続がtimeoutしているので何
> > も返っ
> > >> てきません
> > >> $ telnet 〓vip〓 80
> > >> Trying 〓vip〓
> > >> Connected to 〓vip〓
> > >> Escape character is '^]'.
> > >> GET / HTTP/1.0
> > >>
> > >> Connection closed.
> > >>
> > >> この時以下のログが出力されました
> > >> ----------------------------------------
> > >> 2015/09/28 19:15:37 [DEBUG] l7vsd_virtualservice VSD10700084
> > >> in_function: void virtualservice_tcp::connection_inactive( const
> > >> boost::asio::ip::tcp::endpoint& in ): in = 172.20.0.251:80 〓ホスト
> > 名〓
> > >> 0x7fccba1fc700 virtualservice_tcp.cpp:1738
> > >> 2015/09/28 19:15:37 [DEBUG] l7vsd_virtualservice VSD10700085
> > >> out_function: void virtualservice_tcp::connection_inactive() 〓ホス
> > ト名
> > >> 〓 0x7fccba1fc700 virtualservice_tcp.cpp:1774
> > >> 2015/09/28 19:15:37 [DEBUG] l7vsd_virtualservice VSD10700086
> > >> in_function: void virtualservice_tcp::release_session( const
> > >> tcp_session* session_ptr ): session_ptr = 0x1dfc850 〓ホスト名〓
> > >> 0x7fccba1fc700 virtualservice_tcp.cpp:1790
> > >> 2015/09/28 19:15:37 [DEBUG] l7vsd_virtualservice VSD10700089
> > >> pool_session.size = 48 〓ホスト名〓 0x7fccba1fc700
> > >> virtualservice_tcp.cpp:1810
> > >> 2015/09/28 19:15:37 [DEBUG] l7vsd_virtualservice VSD10700090
> > >> active_session.size = 1 〓ホスト名〓 0x7fccba1fc700
> > >> virtualservice_tcp.cpp:1813
> > >> 2015/09/28 19:15:37 [DEBUG] l7vsd_virtualservice VSD10700091
> > >> active_count = 18446744073709551615 〓ホスト名〓 0x7fccba1fc700
> > >> virtualservice_tcp.cpp:1816
> > >> 2015/09/28 19:15:37 [DEBUG] l7vsd_virtualservice VSD10700092
> > >> pool_session.size = 49 〓ホスト名〓 0x7fccba1fc700
> > >> virtualservice_tcp.cpp:1825
> > >> 2015/09/28 19:15:37 [DEBUG] l7vsd_virtualservice VSD10700093
> > >> active_session.size = 0 〓ホスト名〓 0x7fccba1fc700
> > >> virtualservice_tcp.cpp:1828
> > >> 2015/09/28 19:15:37 [DEBUG] l7vsd_virtualservice VSD10700094
> > >> active_count = 18446744073709551615 〓ホスト名〓 0x7fccba1fc700
> > >> virtualservice_tcp.cpp:1831
> > >> 2015/09/28 19:15:37 [DEBUG] l7vsd_virtualservice VSD10700095
> > >> out_function: void virtualservice_tcp::release_session( const
> > >> tcp_session* session_ptr ): session_ptr = 0x1dfc850 〓ホスト名〓
> > >> 0x7fccba1fc700 virtualservice_tcp.cpp:1836
> > >> 2015/09/28 19:15:37 [DEBUG] l7vsd_virtualservice VSD10700009
> > in_function
> > >> : void session_thread_control::stopupstream() 〓ホスト名〓
> > >> 0x7fccba1fc700 session_thread_control.cpp:229
> > >> 2015/09/28 19:15:37 [DEBUG] l7vsd_virtualservice VSD10700010
> > >> out_function : void session_thread_control::stopupstream() : status =
> > 0
> > >> 〓ホスト名〓 0x7fccba1fc700 session_thread_control.cpp:236
> > >>
> > >>
> > >> 4).その後もう一度1)の通常操作を行うとactive_countが膨大な数になり以
> > 後
> > >> l7vsdを再起動若しくはバーチャルサービスを消さないかぎりSorryサーバ
> > ーへ流
> > >> され続けます
> > >>
> > >> この時以下のログが出力されました
> > >> ----------------------------------------
> > >> 2015/09/28 19:16:27 [DEBUG] l7vsd_virtualservice VSD10700027
> > >> in_function: void virtualservice_tcp::handle_accept( const
> > >> boost::shared_ptr<session_thread_control> , const
> > >> boost::system::error_code& err ): err = false, err.message = Success
> > 〓
> > >> ホスト名〓 0x7fcc5ea5d700 virtualservice_tcp.cpp:349
> > >> 2015/09/28 19:16:27 [DEBUG] l7vsd_virtualservice VSD10700030
> > Connection
> > >> switch Sorry mode. active_session.size = 1, active_count.get =
> > >> 18446744073709551615 〓ホスト名〓 0x7fcc5ea5d700
> > >> virtualservice_tcp.cpp:448
> > >> 2015/09/28 19:16:27 [DEBUG] l7vsd_virtualservice VSD10700031 active
> > >> session thread id = 0x1e1f890 〓ホスト名〓 0x7fcc5ea5d700
> > >> virtualservice_tcp.cpp:457
> > >> 2015/09/28 19:16:27 [DEBUG] l7vsd_virtualservice VSD10700032
> > >> pool_session.size = 49 〓ホスト名〓 0x7fcc5ea5d700
> > >> virtualservice_tcp.cpp:460
> > >> 2015/09/28 19:16:27 [DEBUG] l7vsd_virtualservice VSD10700033
> > >> active_session.size = 1 〓ホスト名〓 0x7fcc5ea5d700
> > >> virtualservice_tcp.cpp:463
> > >> 2015/09/28 19:16:27 [DEBUG] l7vsd_virtualservice VSD10700034
> > >> active_count = 18446744073709551615 〓ホスト名〓 0x7fcc5ea5d700
> > >> virtualservice_tcp.cpp:466
> > >> 2015/09/28 19:16:27 [DEBUG] l7vsd_virtualservice VSD10700007
> > in_function
> > >> : void session_thread_control::startupstream() 〓ホスト名〓
> > >> 0x7fcc5ea5d700 session_thread_control.cpp:211
> > >> 2015/09/28 19:16:27 [DEBUG] l7vsd_virtualservice VSD10700008
> > >> out_function : void session_thread_control::startupstream() :status =
> > 1
> > >> 〓ホスト名〓 0x7fcc5ea5d700 session_thread_control.cpp:219
> > >> 2015/09/28 19:16:27 [DEBUG] l7vsd_virtualservice VSD10700011
> > in_function
> > >> : void session_thread_control::startdownstream() 〓ホスト名〓
> > >> 0x7fcc5ea5d700 session_thread_control.cpp:246
> > >> 2015/09/28 19:16:27 [DEBUG] l7vsd_virtualservice VSD10700012
> > >> out_function : void session_thread_control::startdownstream() : status
> > =
> > >> 1 〓ホスト名〓 0x7fcc5ea5d700 session_thread_control.cpp:254
> > >> 2015/09/28 19:16:27 [DEBUG] l7vsd_virtualservice VSD10700035 active
> > >> session thread id = 0x1e313b0 〓ホスト名〓 0x7fcc5ea5d700
> > >> virtualservice_tcp.cpp:512
> > >> 2015/09/28 19:16:27 [DEBUG] l7vsd_virtualservice VSD10700036
> > >> pool_session.size = 48 〓ホスト名〓 0x7fcc5ea5d700
> > >> virtualservice_tcp.cpp:515
> > >> 2015/09/28 19:16:27 [DEBUG] l7vsd_virtualservice VSD10700037
> > >> active_session.size = 1 〓ホスト名〓 0x7fcc5ea5d700
> > >> virtualservice_tcp.cpp:518
> > >> 2015/09/28 19:16:27 [DEBUG] l7vsd_virtualservice VSD10700038
> > >> active_count = 18446744073709551615 〓ホスト名〓 0x7fcc5ea5d700
> > >> virtualservice_tcp.cpp:521
> > >> 2015/09/28 19:16:27 [DEBUG] l7vsd_virtualservice VSD10700039
> > >> out_function: void virtualservice_tcp::handle_accept( const
> > >> boost::shared_ptr<session_thread_control> , const
> > >> boost::system::error_code& err ) 〓ホスト名〓 0x7fcc5ea5d700
> > >> virtualservice_tcp.cpp:544
> > >> 2015/09/28 19:16:27 [DEBUG] l7vsd_virtualservice VSD10700017
> > in_function
> > >> : l7vs::virtualservice_element& virtualservice_base::get_element() 〓
> > ホ
> > >> スト名〓 0x7fccb8dfa700 virtualservice_base.cpp:577
> > >> 2015/09/28 19:16:27 [DEBUG] l7vsd_virtualservice VSD10700018 element
> > >> struct data, udpmode = TCP, tcp_accept_endpoint = 〓vip〓:80,
> > >> udp_recv_endpoint = 0.0.0.0:0, realserver_vector:size = 2,
> > >> protocol_module_name = sessionless, schedule_module_name = lc,
> > >> protocol_args.size = 1, sorry_maxconnection = 1000, sorry_endpoint =
> > >> 〓sorry サーバー〓, sorry_flag = 0, qos_upstream = 15625000,
> > >> qos_downstream = 15625000, throughput_upstream = 0,
> > >> throughput_downstream = 0, ssl_file_name = , http_total_count = 0,
> > >> http_get_count = 0, http_post_count = 0 〓ホスト名〓 0x7fccb8dfa700
> > >> virtualservice_base.cpp:626
> > >> 2015/09/28 19:16:27 [DEBUG] l7vsd_virtualservice VSD10700019
> > >> out_function : l7vs::virtualservice_element&
> > >> virtualservice_base::get_element() 〓ホスト名〓 0x7fccb8dfa700
> > >> virtualservice_base.cpp:627
> > >> 2015/09/28 19:16:27 [DEBUG] l7vsd_virtualservice VSD10700017
> > in_function
> > >> : l7vs::virtualservice_element& virtualservice_base::get_element() 〓
> > ホ
> > >> スト名〓 0x7fccb8dfa700 virtualservice_base.cpp:577
> > >> 2015/09/28 19:16:27 [DEBUG] l7vsd_virtualservice VSD10700018 element
> > >> struct data, udpmode = TCP, tcp_accept_endpoint = 〓vip〓:80,
> > >> udp_recv_endpoint = 0.0.0.0:0, realserver_vector:size = 2,
> > >> protocol_module_name = sessionless, schedule_module_name = lc,
> > >> protocol_args.size = 1, sorry_maxconnection = 1000, sorry_endpoint =
> > >> 〓sorry サーバー〓, sorry_flag = 0, qos_upstream = 15625000,
> > >> qos_downstream = 15625000, throughput_upstream = 0,
> > >> throughput_downstream = 0, ssl_file_name = , http_total_count = 0,
> > >> http_get_count = 0, http_post_count = 0 〓ホスト名〓 0x7fccb8dfa700
> > >> virtualservice_base.cpp:626
> > >> 2015/09/28 19:16:27 [DEBUG] l7vsd_virtualservice VSD10700019
> > >> out_function : l7vs::virtualservice_element&
> > >> virtualservice_base::get_element() 〓ホスト名〓 0x7fccb8dfa700
> > >> virtualservice_base.cpp:627
> > >>
> > >> 私の見方が違うかもしれませんが
> > >> active_countをインクリメントしている部分をみるとloopしていれば
> > >> ログも大量に出力されそうなのですがそうはなっておりません。
> > >>
> > https://osdn.jp/projects/ultramonkey-l7/scm/git/ultramonkey-l7-v3/blob
> > s/master/l7vsd/src/virtualservice_tcp.cpp
> > >>
> > >> virtualservice_tcp.cpp 441行目付近のこの部分がおかしくなってますでし
> > ょうか?
> > >> ((0 < element.sorry_maxconnection) && ((active_count.get() >=
> > >> static_cast<size_t>(element.sorry_maxconnection)))
> > >>
> > >>
> > >> 長くなりましたが、可能であれば回避する方法をご教授いただけますでしょ
> > うか。
> > >>
> > >>
> > >> お手数ですが、何卒よろしくお願いいたします。
> > >>
> > >> --
> > >> --------------------------------------------
> > >> ジグソー株式会社
> > >> 小林 年伸
> > >> E-mail:toshi****@jig-s*****
> > >> Tel:011-737-0240  Fax:011-737-0241
> > >> 〒060-0808
> > >> 北海道札幌市北区北8条西3丁目32番
> > >>
> > >> _______________________________________________
> > >> Ultramonkey-l7-users mailing list
> > >> Ultra****@lists*****
> > >> http://lists.osdn.me/mailman/listinfo/ultramonkey-l7-users
> >
> >
> > --
> > --------------------------------------------
> > ジグソー株式会社
> > 小林 年伸
> > E-mail:toshi****@jig-s*****
> > Tel:011-737-0240  Fax:011-737-0241
> > 〒060-0808
> > 北海道札幌市北区北8条西3丁目32番
> 




Ultramonkey-l7-develop メーリングリストの案内
アーカイブの一覧に戻る