タグ

linuxとtcpに関するamari3のブックマーク (3)

  • listen()のbacklogが不足した際のTCP_DEFER_ACCEPTの動作について - blog.nomadscafe.jp

    TCP_DEFER_ACCEPTは、LinuxでサポートされているTCPのオプションで、サーバ側で使用した場合にはaccept(2)からのブロック解除をTCP接続が完了したタイミングではなく最初のデータが到着したタイミングで行ってくれるオプションです。 Webサーバ・アプリケーションサーバではリクエストが到着してからaccept(2)のブロックを解除するので、リクエストの到着をWebサーバ・アプリケーションサーバで待つ必要がなくなり、特にprefork型のサーバでは効率的にプロセスを使えるようになるという利点があります。PerlではStarletがこの機能を有効にしています ところが、某サービスでTCP_DEFER_ACCEPTが有効にも関わらず、accept後のreadでデータが読めず、最悪の場合、デフォルトのtimeoutである5分間プロセスがストールすることがありました。strace

  • 見落としがちなLinuxのWEBチューニング | Act as Professional

    WEBコンテンツ配信にLinuxを使うのは一般的になりましたが、CentOSやUbuntuをはじめ、大抵のディストリビューションが低スペックなマシンでも動くような初期設定になっています。 トラフィックの上限でもない CPUリソースの枯渇でもない HDDのIOが遅い問題でもない コンテンツが重くなる(接続できない) というケースで、見落としがちなLinuxのネットワーク周りのチューニングについてです。 iptables関連 iptablesを使用している場合、下記のパラメータを注意して下さい。 /proc/sys/net/ipv4/ip_conntrack_max ip_conntrackに記録できる最大値です。65536あたりが初期設定になっているかと思います。これだとパケットの取りこぼしがすぐに起きてしまいます。1コネクションあたり約350バイト消費するので、実装されているメモリに応じて

    見落としがちなLinuxのWEBチューニング | Act as Professional
  • TCP/IP で TIME_WAIT が残る時間を短くする

    TIME_WAIT 状態の TCP コネクションが多数残る netstat コマンドで TCP コネクションの状態を確認していると、"TIME_WAIT" という状態のコネクションがたくさん確認される場合があります。 "TIME_WAIT" 状態というのは TCP コネクションにおいて、こちら側から通信をした場合に "FIN_WAIT_1" (FIN ACK 受信) から、"FIN_WAIT_2" (ACK 受信) または "CLOSING" (FIN 受信, ACK 送信)を経て、コネクションを閉じられる状態となったことを示すもののようです。 そしてこの "TIME_WAIT" から、実際にそのコネクションが閉じられて "CLOSED" となるまでの間に待ち時間があり、これによって、短時間に通信が集中すると、その分だけ通信終了間際の "TIME_WAIT" 状態のコネクションが多数、ne

  • 1