net.ipv4.tcp_timestampsによるtcp syn応答なし

947 ワード

私の現在の高同時プロジェクトでは、サーバがTCPのsyn要求に応答しなくなり、新しいクライアントがサービスに介入できなくなったことがあります.この状態が発生する前に、パラレルライトの増加により、主にTIME-WAIT socketsを新しいTCP接続に再利用し、以下のように最適化されたサーバが最適化されたことがある.
1.変更/ect/sysctl.conf
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 5

2.修正/etc/security/limit.conf
* soft nofile 2000000
* hard nofile 2000000

そこで最適化されたこれらのパラメータに問題が発生した疑いがあり、資料を調べることでtcp_が発見された.timestampsのデフォルトはオンで、tcp_をtw_recycleが1に設定されている場合、60 s以内の同じソースipホストのsocket connect要求のtimestampは増加しなければならない.つまりサーバがtcp_を開いたtw_reccycleになると、タイムスタンプがチェックされ、相手から送られてきたパケットのタイムスタンプがジャンプしていたり、タイムスタンプが遅れていたりすると、サーバは返事をしないに違いないので、サーバは「バック」のタイムスタンプをつけたパケットを「recycleのtw接続の再送データであり、新しいリクエストではない」と見なし、パケットを返さないと、言い始めたsynが応答しないことが現れます.
解決方法:/etc/sysctl.confファイルに次の行を追加します.
net.ipv4.tcp_timestamps=0
は、タイムスタンプをチェックせずにsysctl-pを実行して有効にすることを示し、サーバ・リカバリ・サービス