一:修改ulimit數
vi /etc/security/limits.conf
添加如下行:
* soft noproc 65535
* hard noproc 65535
* soft nofile 65535
* hard nofile 65535
二:內核優化
vim /etc/sysctl.conf net.ipv4.tcp_syncookies= 1 #表示開啟SYNCookies。當出現SYN等待隊列溢出時,啟用cookies來處理,可防范少量SYN攻擊,默認為0,表示關閉; net.ipv4.tcp_tw_reuse= 1 #表示開啟重用。允許將TIME-WAITsockets重新用於新的TCP連接,默認為0,表示關閉; net.ipv4.tcp_tw_recycle= 1 #表示開啟TCP連接中TIME-WAITsockets的快速回收,默認為0,表示關閉; net.ipv4.tcp_fin_timeout= 30 #修改系統默認的TIMEOUT 時間。 #輸入下面的命令,讓內核參數生效: sysctl-p
在經過這樣的調整之后,除了會進一步提升服務器的負載能力之外,還能夠防御小流量程度的DoS、CC和SYN攻擊。
此外,如果你的連接數本身就很多,我們可以再優化一下TCP的可使用端口范圍,進一步提升服務器的並發能力。依然是往上面的參數文件中,加入下面這些配置:
net.ipv4.tcp_keepalive_time= 1200 #表示當keepalive起用的時候,TCP發送keepalive消息的頻度。缺省是2小時,改為20分鍾。 net.ipv4.ip_local_port_range= 1024 65535 #表示用於向外連接的端口范圍。缺省情況下很小,改為1024到65535。 net.ipv4.tcp_max_syn_backlog= 8192 #表示SYN隊列的長度,默認為1024,加大隊列長度為8192,可以容納更多等待連接的網絡連接數。 net.ipv4.tcp_max_tw_buckets= 5000 #表示系統同時保持TIME_WAIT的最大數量,如果超過這個數字,TIME_WAIT將立刻被清除並打印警告信息。默認為180000,改為5000。此項參數可以控制TIME_WAIT的最大數量,只要超出了。
這幾個參數,建議只在流量非常大的服務器上開啟,會有顯著的效果。一般的流量小的服務器上,沒有必要去設置這幾個參數
三:Tomcat優化
修改bin目錄下catalina.sh文件 在cygwin=false之上 添加以下語句 JAVA_OPTS="-Xms1024m -Xmx4096m -Xss1024K -XX:PermSize=512m -XX:MaxPermSize=2048m" 其中-xms為jvm初始化堆的大小,-xmx為jvm堆的最大值 -server:一定要作為第一個參數,在多個CPU時性能佳 -Xms:java Heap初始大小。 默認是物理內存的1/64。 -Xmx:java heap最大值。建議均設為物理內存的一半。不可超過物理內存。 -XX:PermSize:設定內存的永久保存區初始大小。缺省值為64M。 -XX:MaxPermSize:設定內存的永久保存區最大 大小。缺省值為64M。 -Xmn:young generation(年輕代)的heap大小。一般設置為Xmx的3、4分之一 (Sun官方推薦配置為整個堆的3/8。)