有的**會在伺服器執行一段時間後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連線。
關於HTTP請求頭與響應頭
http請求頭格式 get 請求的方式 url 請求的目標資源 http 1.1 請求採用的協議和版本號 首部欄位名 值 accept 客戶端能接收的資源型別 accept language en us 客戶端接收的語言型別 connection keep alive 維護客戶端和服務端的連線關係 ...
關於http請求,請求頭和響應頭
via是http協議裡面的乙個header,記錄了一次http請求所經過的 和閘道器,經過1個 伺服器,就新增乙個 伺服器的資訊,經過2個就新增2個。x cache是squid 的自定義header,用來記錄快取的命中與否 squid 是 linux unix 平台下最為流行的高效能免費應用層 伺服...
http請求頭響應頭
今天的內容首先是http協議其中包括請求頭 request 和響應頭 response 請求頭中包含 accept 告訴伺服器,瀏覽器所支援的資料型別 accept charset 告訴伺服器,瀏覽器支援的字符集 accept encoding 告訴伺服器,瀏覽器所支援的資料解壓演算法 accept...