讓Jexus支持高並發請求的優化技巧


Jexus web server 5.1 每個工作進程的最大並發數固定為1萬,最多可以同時開啟4個工作進程,因此,每台Jexus V5.1服務器最多可以到支持4萬個並發連接。但是,按照linux系統的默認設定,linux是不能支持這么高的並發請求的,只有對linux進行一些必要的優化,才能達到讓Jexus支持大並發的目的。
一、調整文件描述符數量限制
linux默認文件描述符只有1024個,對於Jexus 等一些服務來說,在大負載的情況下這點文件描述符是遠遠不夠的,因為Jexus 的工作方式,文件描述符的限制可能會極大的影響性能。當Jexus用完所有的文件描述符后,它不能接收用戶新的連接。也就是說,用完文件描述符導致拒絕服務。直到一部分當前請求完成,相應的文件和socket 被關閉,Jexus 不能接收新請求,這樣就要擴大linux的文件描述符了。

編輯 /etc/security/limits.conf,更改或添加入如下內容:
* soft nofile 20000
* hard nofile 20000

limits.conf 文件實際是 Linux PAM(插入式認證模塊,Pluggable Authentication Modules)中 pam_limits.so 的配置文件,而且只針對於單個會話。

limits.conf的格式如下:

username|@groupname type resource limit

username|@groupname:設置需要被限制的用戶名,組名前面加@和用戶名區別。也可以用通配符*來做所有用戶的限制。

type:有 soft,hard 和 -,soft 指的是當前系統生效的設置值。hard 表明系統中所能設定的最大值。soft 的限制不能比hard 限制高。用 - 就表明同時設置了 soft 和 hard 的值。

resource:

core - 限制內核文件的大小

date - 最大數據大小

fsize - 最大文件大小

memlock - 最大鎖定內存地址空間

nofile - 打開文件的最大數目

rss - 最大持久設置大小

stack - 最大棧大小

cpu - 以分鍾為單位的最多 CPU 時間

noproc - 進程的最大數目

as - 地址空間限制

maxlogins - 此用戶允許登錄的最大數目

要使 limits.conf 文件配置生效,必須要確保 pam_limits.so 文件被加入到啟動文件中。查看 /etc/pam.d/login 文件中有:

session required /lib/security/pam_limits.so
二、調整網絡參數
Sysctl是一個允許您改變正在運行中的Linux系統的接口。它包含一些 TCP/IP 堆棧和虛擬內存系統的高級選項, 這可以讓有經驗的管理員提高系統性能。用sysctl可以讀取設置超過五百個系統變量。

查看所有可讀變量:

% sysctl -a

讀一個指定的變量,例如 kern.maxproc:

% sysctl kern.maxproc kern.maxproc: 1044

要設置一個指定的變量,直接用 variable=value 這樣的語法:

# sysctl kern.maxfiles=5000

kern.maxfiles: 2088 -> 5000

您可以使用sysctl修改系統變量,也可以通過編輯sysctl.conf文件來修改系統變量。sysctl.conf 看起來很像 rc.conf。它用 variable=value 的形式來設定值。指定的值在系統進入多用戶模式之后被設定。並不是所有的變量都可以在這個模式下設定。

sysctl 變量的設置通常是字符串、數字或者布爾型。 (布爾型用 1 來表示’yes’,用 0 來表示’no’)。

編輯“/etc/sysctl.conf”,更改或添加如下內容:
net.core.somaxconn=8192
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_keepalive_time=1200
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_max_syn_backlog=8192
net.ipv4.tcp_max_tw_buckets=10000
如果啟用了iptables防火牆並加載了ip_conntrack模塊,還需加入:
net.ipv4.ip_conntrack_max = 10240
注:ubuntu是“net.ipv4.netfilter.ip_conntrack_max”。
上述參數修改完成后,請用"sysctl -p" 命令使其生效。

幾個解釋:
net.ipv4.tcp_syncookies = 1
#表示開啟SYN Cookies。當出現SYN等待隊列溢出時,啟用cookies來處理,可防范少量SYN攻擊,默認為0,表示關閉;
net.ipv4.tcp_tw_reuse = 1
#表示開啟重用。允許將TIME-WAIT sockets重新用於新的TCP連接,默認為0,表示關閉;
net.ipv4.tcp_tw_recycle = 1
#表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認為0,表示關閉。
net.ipv4.tcp_fin_timeout = 30
#表示如果套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。
net.ipv4.tcp_keepalive_time = 1200
#表示當keepalive起用的時候,TCP發送keepalive消息的頻度。缺省是2小時,改為20分鍾。
net.ipv4.ip_local_port_range = 1024 65000
#表示用於向外連接的端口范圍。缺省情況下很小:32768到61000,改為1024到65000。
net.ipv4.tcp_max_tw_buckets = 10000
#表示系統同時保持TIME_WAIT套接字的最大數量,如果超過這個數字,
#TIME_WAIT套接字將立刻被清除並打印警告信息。默認為180000,改為10000 。
#對於Apache、Nginx、Jexus 等服務器,上幾行的參數可以很好地減少TIME_WAIT套接字數量
三、整調Jexus工作進程數
Jexus默認工作進程數為1,為了支持更大的並發數量,應根據服務器CPU內核數量及內存大小,合理調整工作進程數量。方法是,編輯 jws.conf,去掉“httpd.processes”項前邊的“#”號,把進程數填寫到等號右邊(Jexus v5.1版最大值不超過4)。
注:
1)進程數與cpu的總核數有關,建議8核以內設為2,16核設為3,更多內核數就設為4。
2)進程數還與服務內存及WEB應用所占內存的多少有關,建議每個工作進程平均內存可用量不低於512M。
四、mono版本選擇
建議使用mono最新的成熟版本。

 

原文地址:http://linuxdot.net/bbsfile-3125 

相關文章:

linux文件描述符導致squid拒絕服務

設置Sysctl.conf用以提高Linux的性能(最完整的sysctl.conf優化方案)


免責聲明!

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



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