使用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 #不重起伺服器,讓新配置生效