HTTP 頭 Connection=close 作用

來源:互聯網
上載者:User

   有的網站會在伺服器運行一段時間後down掉,有很多原因可能造成這種現象:比如tomcat堆和非堆記憶體設定不足,程式沒能釋放記憶體空間造成記憶體溢出,或者某些進程一直運行沒能釋放,造成cup資源大量消耗。

      但除了程式本身的原因,還有可能是客服端訪問造成(當然這個用戶端也包含如蜘蛛軟體等搜尋引擎),如果伺服器和用戶端建立的是長連結(可以用"netstat -a"命令查看網路訪問資訊),這就需要對http回應標頭的connection做一定的設定。

      介紹如下:

 

1. 解釋一下:

 

    在http1.1中request和reponse header中都有可能出現一個connection頭欄位,此header的含義是當client和server通訊時對於長連結如何進行處理。

    在http1.1中,client和server都是預設對方支援長連結的, 如果client使用http1.1協議,但又不希望使用長連結,則需要在header中指明connection的值為close;如果server方也不想支援長連結,則在response中也需要明確說明connection的值為close.

    不論request還是response的header中包含了值為close的connection,都表明當前正在使用的tcp連結在請求處理完畢後會被斷掉。以後client再進行新的請求時就必須建立新的tcp連結了。 HTTP Connection的 close設定允許用戶端或伺服器中任何一方關閉底層的串連雙方都會要求在處理請求後關閉它們的TCP串連。

 

2.如何在程式中設定:

 

    可以在過濾器中加入:response.setHeader("connection", "close");

 

 

 

與之相關:解決伺服器產生大量close_wait問題

 

 

要解決這個問題的可以修改系統的參數(/etc/sysctl.conf檔案),系統預設逾時時間的是7200秒,也就是2小時。

預設如下:

tcp_keepalive_time = 7200 seconds (2 hours)
tcp_keepalive_probes = 9
tcp_keepalive_intvl = 75 seconds


意思是如果某個TCP串連在idle 2個小時後,核心才發起probe.如果probe 9次(每次75秒)不成功,核心才徹底放棄,認為該串連已失效


修改後


sysctl -w net.ipv4.tcp_keepalive_time=30
sysctl -w net.ipv4.tcp_keepalive_probes=2
sysctl -w net.ipv4.tcp_keepalive_intvl=2


經過這個修改後,伺服器會在短時間裡回收沒有關閉的tcp串連。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.