使用apache 的ab做壓力測試時,當壓力過大,例如請求1000000次,在沒有執行完就報apr_poll:The timeout specified has expired錯誤,解決辦法,使用-k(發送keep-alive指令到伺服器端),同時修改web伺服器下的/etc/sysctl.conf,在裡面添加如下內容:

#kernel2.6之前的內核版本添加如下配置:
net.ipv4.netfilter.ip_conntrack_max = 655360
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 1200
 
#kernel2.6之後的內核版本添加如下配置:
net.nf_conntrack_max = 655360
net.netfilter.nf_conntrack_tcp_timeout_established = 1200
 
net.ipv4.tcp_syncookies = 1 #當出現SYN等待佇列溢出時,啟用cookies來處理,可防範少量SYN攻擊,默認為0,表示關閉
net.ipv4.tcp_tw_recycle = 1 #開啟TCP連接中TIME-WAIT sockets的快速回收,默認為0,表示關閉。
net.ipv4.tcp_tw_reuse = 1 #開啟重用,將TIME-WAIT sockets重新用於新的TCP連接,默認為0,表示關閉;
net.ipv4.tcp_fin_timeout = 25 #修改系統默認的 TIMEOUT 時間
net.ipv4.tcp_orphan_retries = 1
net.ipv4.tcp_max_orphans = 8192
net.ipv4.ip_local_port_range = 32768 61000

試著加大net.ipv4.netfilter.ip_conntrack_max的值然後執行以下指令立即生效

sysctl -p /etc/sysctl.conf #不重起伺服器,讓新配置生效

 

By tony

自由軟體愛好者~喜歡不斷的思考各種問題,有新的事物都會想去學習嘗試 做實驗並熱衷研究 沒有所謂頂天的技術 只有謙虛及不斷的學習 精進專業,本站主要以分享系統及網路相關知識、資源而建立。 Github http://stnet253.github.io

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料