實戰配置高QPS服務器(Nginx+Tomcat)


實際情況:需要滿足QPS=5000的請求,大部分請求來自於幾個固定IP,即可以利用keep-alive特性來重復利用TCP連接。系統是CentOS 6

一、調整內核參數

net.ipv4.tcp_syncookies = 1 #開啟SYN Cookies,當出現SYN等待隊列溢出時,啟用cookies來處理,主要為防止DoS攻擊 net.core.somaxconn = 2048 #定義了系統中每一個端口最大的監聽隊列的長度,這是個全局的參數,默認的 128 太小了,建議調大 net.ipv4.tcp_tw_reuse = 1 #開啟重用。允許將TIME-WAIT sockets重新用於新的TCP連接 net.ipv4.tcp_tw_recycle = 0 #啟用timewait快速回收,但如果開啟了該值,並同時開啟了tcp_timestamps,會產生時間戳錯亂的現象,建議關閉 net.ipv4.tcp_keepalive_time = 900 #TCP發送keepalive消息的頻度。缺省是2小時。這里設為15分鍾 net.ipv4.tcp_fin_timeout = 15 #保持在FIN-WAIT-2狀態的時間,默認60s net.ipv4.ip_local_port_range = 10240 65535 #允許系統打開的端口范圍,10240以下的保留 net.ipv4.tcp_max_syn_backlog = 8192 #記錄的那些尚未收到客戶端確認信息的連接請求的最大值 net.ipv4.tcp_max_tw_buckets = 5000 #timewait的數量,默認是180000。 net.ipv4.tcp_max_orphans = 131072 #系統中最多有多少個TCP套接字不被關聯到任何一個用戶文件句柄上,即孤兒連接,主要是為了防止DoS攻擊

將以上參數寫入到/etc/sysctl.conf,然后sysctl -p重新加載,加載完立即生效。

其他的參數采用默認值,可參考 http://www.howtocn.org/nginx:%E9%85%8D%E7%BD%AE%E4%B8%80%E4%B8%AA%E9%AB%98%E6%80%A7%E8%83%BD%E7%9A%84nginx_fastcgi%E6%9C%8D%E5%8A%A1%E5%99%A8 查看更多參數

二、調整Nginx參數

main部分

worker_processes  8; #根據CPU核數決定
worker_rlimit_nofile 65536; #一個nginx進程打開的最多文件數,跟ulimit -n保持一致
events {
    use epoll; #優化IO模型
    worker_connections 10240; #不要設置太高,否則線程切換會造成很大負擔
}

keepalive_timeout 15; #如果短連接居多,建議縮短

upstream部分

keepalive 128; #connection數量,用於Nginx跟后端的keep-alive連接,因為upstream后端以長連接為主,該值設定非常有效。設的越大,占用內存越多
proxy_http_version      1.1; #在location內設定
proxy_set_header Connection ""; #在location內設定

該部分可以詳見,http://blog.csdn.net/lizhiqiang50/article/details/7551292

三、Tomcat調整 

maxThreads="300" #默認200,不要設的太高,否則線程切換會造成CPU很大負擔,表現情況就是TOP看sy%比例很高。
minSpareThreads="50"
connectionTimeout="20000" #20秒
keepAliveTimeout="15000" #15秒

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM