Shinya TAKEBAYASHI
sae****@ancie*****
2015年 10月 1日 (木) 09:49:47 JST
竹田さん たけばやしです. 対応ありがとうございます. 現行のソースではロックせずにインクリメント/デクリメント していますが,今回の修正でロックを入れる必要はありそうでしょうか. ロックはここ以外にも考慮が必要な箇所があるかもしれないので, 今回の不具合への対処という意味ではアンダフローの修正だけで良いと思います. いかがでしょうか. > -----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_manual_v3.3_j > a/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/blo > >> bs/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番