背景: 線上機器,需要過濾access日誌,發送給另外一個api 期初是單進程,效率太低,改為多進程發送後,查看日誌中偶爾會出現異常錯誤(忘記截圖了。。。) 總之就是埠不夠用了報錯 原因: 每一條日誌都是一次請求發送給api,短連接產生大量time_wait狀態,占用了大量埠 這種高併發導致的大 ...
背景:
線上機器,需要過濾access日誌,發送給另外一個api
期初是單進程,效率太低,改為多進程發送後,查看日誌中偶爾會出現異常錯誤(忘記截圖了。。。)
總之就是埠不夠用了報錯
原因:
每一條日誌都是一次請求發送給api,短連接產生大量time_wait狀態,占用了大量埠
這種高併發導致的大量time_wait狀態內核調優基本是沒用的,後來改為長連接解決問題
第一版短連接版本關鍵代碼如下
因涉及具體業務信息,只貼出了關鍵部分代碼
import pycurl
where True:
url=myqueue.get()
send_msg=pycurl.Curl()
send_msg.setopt(pycurl.URL,url)
send_msg.perform()
print send_msg.getinfo(send_msg.HTTP_CODE)
修改後長連接版本如下:
採用requests庫
import requests
client=requests.session()
headers = {'Content-Type': 'application/json', 'Connection': 'keep-alive'}
where True:
url=myqueue.get()
r=client.get(url,headers=headers)
print r.status_code