• 締切済み

TCPセッション状態「CLOSE_WAIT」につい

TCPセッション状態「CLOSE_WAIT」について質問です。 ■事象 WEBサーバを運営していて、 画像ファイルのアクセスが10リクエスト/1秒 程度あるのですが、 Apacheの「http://localhost/server-status?refresh=1」で状況を確認すると、 "W" Sending Replyがどんどん増加していき、 準備していた1024スレッドを全て使い果たしてしてサーバダウンとなる事象が発生しています。 サーバダウン時に「netstat -an」でTCPセッションを確認したのですが、 「CLOSE_WAIT」が大量に(950程度)残っていました。 TCP通信が完全に終了していないく、 不完全なTCP通信がプロセスを圧迫して、新しいリクエストを受け付けられない、 という状況です。 ちなみに、 画像ファイルのアクセスは他サイトからの直リンクになります。 他サイトに<img src="http://質問者のサイト.com/image.jpg">という直リンクがあり、 他サイトのPVが10アクセス/1秒あるということです。 ■環境 OS : Windows 7 64bit WEB : Apache/2.2.27 (Win64) PHP/5.4.26 ■質問 なぜ「CLOSE_WAIT」が大量に残ってしまうのか、理由を教えて下さい。 また、具体的な解決方法(オペレーション付きが望ましいです)を教えて下さい。 ■備考 ネットワーク機器が影響かと思い、別の製品にしたのですが、 解決せずでした。 サーバのKeepAlive系の設定かな?と思っています。

みんなの回答

  • celtis
  • ベストアンサー率70% (2271/3210)
回答No.1

あなたの予想通りKeepAliveを調整することで改善すると思います。 理由は推測ですがスマホからのアクセスが増えているのではないでしょうか? スマホ経由の接続は不安定になりがちなので、トラブルのもとになるようです。 http://web-tan.forum.impressrd.jp/e/2014/04/01/17242? 下記の記事に手順まで載っているので参考になると思います。 http://hirofukami.com/2008/08/11/close-wait/ http://log.windows78.net/2014/08/1168/

関連するQ&A

  • 大量のTCPセッションについて

    最近パソコンにてブラウザでのウェブ表示がいつまで経っても表示されないという事象が発生しております。パソコンを再起動した際に、表示されたり、同じ状況が繰り返されていたりします。そこで、netstat -n を確認してみたところ、大量の localhost間でのTCPセッションがはられており、TIME_WAITとなっていることがわかりました。 この事象が最近発生したものかは分からないのですが、表示できない問題に関係ありますでしょうか? また、なぜ、localhost間で大量のTCPセッションを貼ろうとするのかお分かりの方がいらっしゃればおしえていただきたいと思います。 なお、Norton Internet Securityでは、ウィルス検知はしていません。 パソコンを起動しただけで、下記のセッションが張られている様です。 OSはWindows8 Fujitsu LIFEBOOK AH45/J を使用しております。 TCP 127.0.0.1:53643 127.0.0.1:59201 TIME_WAIT TCP 127.0.0.1:53650 127.0.0.1:59201 TIME_WAIT TCP 127.0.0.1:53656 127.0.0.1:59201 TIME_WAIT TCP 127.0.0.1:53657 127.0.0.1:59201 TIME_WAIT   ・   ・ TCP 127.0.0.1:53738 127.0.0.1:59201 TIME_WAIT TCP 127.0.0.1:53740 127.0.0.1:59201 TIME_WAIT TCP 127.0.0.1:53741 127.0.0.1:59201 TIME_WAIT

  • Apache→Tomcatでセッション維持されない

    Apache->Tomcatでセッションが維持されない Apacheのproxy_ajp.confの設定を ProxyPass /xxx/ ajp://localhost:8009/ とした時にhttp://サーバー名/xxx/(webapps内フォルダ名)/ でアクセスした場合アクセスする度に新しいセッションIDになってしまします。 Apacheのproxy_ajp.confの設定を ProxyPass / ajp://localhost:8009/ とした時にhttp://サーバー名/(webapps内フォルダ名)/ でアクセスした場合はセッションIDは保持されます。 http://サーバー名/でアクセスした時はTomcatのwebappsとは別の場所に配置したWebサイトを表示させている為、 【ProxyPass / ajp://localhost:8009/】とは設定したくはないんですが・・・ どうしたらよいでしょうか・・・? 今の状況 ■http://サーバー名/xxx/(webapps内フォルダ名)/  でアクセスするとセッションが保持されない。 ■Apache単体でphpを使った時、セッションは保持される。 ■8080ポートを使ってTomcatへ直接アクセスした場合、セッションは保持される。 環境 OS:CentOS 5 Apache:2.2 Tomcat:6.0

    • ベストアンサー
    • Java
  • 【ソケット通信】TIME_WAITを0にする方法

    【現状】 VC#でソケット通信のソフトを作成しています。 【問題】 クライアント―サーバ型のソケット通信をしようとしているのですが、切断後すぐに再接続できないという問題が生じております。 【調査結果】 調べたところ、TCP/IPの状態遷移でアクティブクローズ側がTIME_WAIT状態になることが分かっています。TIME_WAITの設定値には意味合いがあり、漂流中の重複パケットの問題を回避するためや最後のACK再送のためであることは理解しております。 【やりたいこと】 今回は基本的に1:1通信でルータを挟まずにやりとりするネットワークなので、TIME_WAITを0、もしくは数msecにしたいと考えています。 ※ 同じIPアドレス、ポート番号で接続したい為(ポート固定での再接続) 【自分で出した解決案の一つ】 どうもサーバ(Listenする側)からアクティブクローズすると、TIME_WAITは生じるもののクライアントから接続要求を出すと同じポートからでももう一度接続できてしまうというのは判明したので、必ずサーバから切断要求を出す仕様にすればTIME_WAITが0になるように思われます。 ただし、なぜ再接続できるのかは不明のため、すっきりしない(&環境や設定が異なると再接続できない可能性あり) 【質問】 (1) クライアント側からアクティブクローズする場合に、TIME_WAIT状態を1秒未満に設定する方法はありますか?(VC#で) (2) サーバからアクティブクローズした場合に、なぜ再接続できてしまうのでしょうか? 以上の2点の質問に、どうかご回答のほどよろしくお願いいたします。

  • Apacheでセッション管理

    スクリプトなどではなく、Apacheにセッション管理させる方法を探しています。 具体的には、たとえばログインしたユーザーだけアクセス可能なページを作る場合、通常ならスクリプトにてセッションIDをログオン時に発行、その後はセッションIDをチェックしてページを表示させますよね。 ところが、この「アクセス可能なページ」をスクリプトではなく通常のHTMLにしたいのです。 イメージとしては、Apache側でリクエストを受けた際にセッションID(CookieなりURLパラメーターなり)をチェックするような機能または外部プログラムを呼び出し、チェックOKなら何もしない、つまりリクエストどおりのHTMLを返す、チェックNGならログオンページにリダイレクトさせる、というようなものです。 mod_ext_filterを使って「セッションチェックプログラム」を呼び出すようにすればできそうに思うのですが、問題はApacheのバージョンが2.0.46のため、ExtFilterDefineにてmode=inputが使えないのです…。 代わりになるようなモジュール、あるいは代替案、というより一般的にこのようなケースではどういった方法がとられるのでしょう。 御教授のほどよろしくお願いいたします。

  • TCPコネクションについて

    はじめまして 宜しくお願いいたします。 以下ご質問させてください。 TCPコネクションについて クライアント⇔サーバ間通信において、 ポート21からポート80(HTTP)に対してTCPコネクションをオープン することはできるのでしょうか? (クライアントポート21からサーバポート80に対してアクセスする ことってできるのでしょうか?) 自分の認識では・・・ TCPクライアントはダイナミック(OSが割り当てたランダムなポート。しばしば1024から4000の間)にポートを選択すると認識しているので が。 最初にFTP通信をおこなっており、その継続セッションでHTTP通信をおこなうといった場合にそういった使い方をするのでしょうか? 以上 宜しくおねがいいたします。

  • SocketのSend関数でのCLOSEの検知 [Linux]

    Linux環境でSocket(dm:PF_INET,type:SOCK_STREAM)を使用しての、 Client&ServerプログラムをCで作成しているのですが、 そこでのSend関数の使い方についてご助力ください。 Client&Serverプログラムは下記のような動きをします。 [Client] ServerへConnectした後、複数のDataを数秒間隔でServerへ 送信(send関数使用)します。受信(recvやread関数等)は、 一切行いません。 [Server] ClientからのConnectを受け付けた後、Clientから受信(recv関数 使用)したDataを標準出力へ表示する。送信(sendやwrite関数 等)は、一切行いません。 さて、ここでもしClientプログラムがCloseを発行したり、マシン DOWN等の理由でConnectionが切断され、Server側のSocketが CLOSE_WAIT状態になった場合、Bufferに溜まっていたDataを すべて受けきった後、recv関数が0を返してくれるので 相手が終了したことがわかります。 ここからが質問のMainです。 では、もしServerプログラムがCloseを発行したり、マシン DOWN等の理由でConnectionが切断され、Client側のSocketが CLOSE_WAIT状態になっても、CLOSE_WAIT直後のsend関数が なぜか正常に処理されてしまいます。無論このDataは、 Server側は受け取りません。この次のsend関数実行時に EPIPEが返ってくるので、ここでようやくSocketが切断された ことが判ります。 これを何とかCLOSE_WAIT状態になった直後から、send関数で 切断を検知できるようにできないでしょうか。 よろしくお願いします。 以上

  • session_start出来ません。

    FreeBSD 4.11 Apache 1.3.33 PHP 4.3.11 の組合せでWebサーバをセットアップし、phpファイルにアクセスしたところ Fatal error: Call to undefined function: session_start() in /hogehoge/test.php on line 3 となってしまいます。 session.save_pathにはパーミッションを777にしていますが、session_startが出来ません。 どのように対応したらいいでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • HPの素材に直リンクされるとどうなるの?

    初心者です、よろしくお願いします。 自分のHP上の素材に直リンクをされると実際のところどんな状態になるのですか? 直リンクはサーバーがダウンするらしいからされないように断っとかないといけない、らしい、と思って、一応断り書きをしているのですが、そんなにアクセスがあるわけじゃなければ別に大丈夫なようなことなのでしょうか。 サーバーがダウン、というのもわかるようなわからないような・・・単にページが(サイトが?)表示されるのが遅くなる、というだけのことなのでしょうか。 ご存知の方どうか教えてくださいませ。 よろしくお願いします~

  • 存在しないファイルのリクエスト

    FLASHのブログパーツ(期間限定のカウントダウン時計)を作りました。 いろんなサイト・ブログで使っていただけたらなと考えております。 多くのブログパーツ配布サイトでは自分のサイトにあるswfに直リンクさせているようです。 わたしも自分のサイトにあるswfファイルに直リンクさせる方法を採ろうかと思ったのですが、 期間限定のカウントダウンが終了しswfファイルを削除しても、サーバへのリクエストがきてサーバが重くなったりするのでしょうか? たとえばabc.swfに直リンクしてもらっていて、期間が過ぎてabc.swfを削除したとします。 それでもわたしのサーバにabc.swfへのリクエストがきて、サーバダウンしちゃいますか? それとも削除したファイルがなければトラフィックも増えないのでしょうか? 使ってる言葉が間違えているかもしれませんが、ご存じの方ご教授よろしくお願いいたします。 m(_ _)m

  • 自作TCPクライアントでクッキーの処理をするには

    日本語プログラミング言語なでしこを使い 会員制サイトにアクセスするTCPクライアントを作成したいのですが クッキーによるセッション管理などにどう対処して良いのかわかりま せん。 「なでしこ」に限らず、WEBブラウザを通さないTCP/IP通信で クッキーなどの情報はどのように受け渡しされるのでしょうか? なでしこ前提の回答でなくても構いませんので考え方などご教授 頂けませんでしょうか? ■特に理解できていない部分 ・サーバ側にクッキーを発行してもらうためにクライアント側で何か  処理が必要なのか? ・ クライアント側で保存しているセッション管理に使われる   クッキーは、どのように再度サーバ側に送るのか?