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
相關文章: