關於設置http響應頭connection的做用

   有的網站會在服務器運行一段時間後down掉,有不少緣由可能形成這種現象:好比tomcat堆和非堆內存設置不足,程序沒能釋放內存空間形成內存溢出,或者某些進程一直運行沒能釋放,形成cup資源大量消耗。 tomcat

      但除了程序自己的緣由,還有多是客服端訪問形成(固然這個客戶端也包含如蜘蛛軟件等搜索引擎),若是服務器和客戶端創建的是長連接(能夠用"netstat -a"命令查看網絡訪問信息),這就須要對http響應頭的connection作必定的設置。 服務器

      介紹以下: 網絡

 

1. 解釋一下:tcp

 

    在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鏈接。 spa

 

2.如何在程序中設置:orm

 

    能夠在過濾器中加入:response.setHeader("connection", "close");server

 

 

 

與之相關:解決服務器產生大量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鏈接。

相關文章
相關標籤/搜索