一、時間同步
生產環境下的服務器對時間的要求是精準的,編輯
vim /etc/crontab
至今每天跟ntp時間服務器自動對時一次:
30 1 * * * /usr/sbin/ntpdate 192.43.244.18
二、啓用內核中的SYN cookie保護:
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
執行以下命令使內核配置立馬生效:
/sbin/sysctl -p
三、Squid服務器變慢的解決方法
如果自己的生產服務器是squid緩存服務器,當發現系統變慢或打開網頁變慢時可輸入下列命令:
netstat -n | awk '/^tcp/ {++S[$NF]} \ END {for(a in S) print a, S[a]}'
這條命令可以把當前系統的網絡連接狀態分類彙總,由此分析出系統變慢的原因。
Linux下高併發的Squid服務器,TCP TIME_WAIT套接字數量經常達到兩、三萬,服務器很容易被拖死。通過修改Linux內核參數,可以
減少Squid服務器的TIME_WAIT套接字數量。
vim /etc/sysctl.conf
增加以下幾行:
net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 1200 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.ip_local_port_range = 1024 65000 net.ipv4.tcp_max_syn_backlog = 8192 net.ipv4.tcp_max_tw_buckets = 5000
說明:
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 表示用於向外連接的端口範圍。缺省情況下很小,改爲1024到65000。
net.ipv4.tcp_max_syn_backlog = 8192 表示SYN隊列的長度,默認爲1024,加大隊列長度爲8192,可以容納更多等待連接的網絡連接數。
net.ipv4.tcp_max_tw_buckets = 5000表示系統同時保持TIME_WAIT套接字的最大數量,如果超過這個數字,TIME_WAIT套接字將立刻被清除並打印警告信息。默認爲 180000,改爲5000。對於Apache、Nginx等服務器,上幾行的參數可以很好地減少TIME_WAIT套接字數量,但是對於Squid,效果卻不大。此項參數可以控制TIME_WAIT套接字的最大數量,避免Squid服務器被大量的TIME_WAIT套接字拖死。
執行以下命令使內核配置立馬生效:
/sbin/sysctl –p
四、Nginx服務器的情況
如果服務器是Nginx負載均衡器或用於Nginx+PHP5的web服務器,此二項也必須打開:
net.ipv4.tcp_tw_reuse = 1 #允許重新用於新的TCP連接 net.ipv4.tcp_tw_recycle = 1 #開啓TCP連接快速回收
執行以下命令使內核配置立馬生效:
/sbin/sysctl –p
五、調整Linux的最大文件打開數
Linux最大文件打開數的默認值很低,必須修改的高一些,否則squid服務器在高負載時執行性能將很低。
vim /etc/security/limit.conf
,在最後一行添加
* soft nofile 60000 * hard nofile 65535
值得注意的是,通過命令ulimit -SHn是改變不了linux系統的最大文件打開數的,寫進/etc/rc.d/rc.local也是不行的。
六、停止ipv6
線上跑的Linux服務器,絕大多數是64位的CentOS。CentOS默認的狀態下,ipv6是被啓用的狀態。因爲我們不使用ipv6,所以,停止
ipv6能夠以最大限度保證安全和快速。
vim /etc/modprobe.conf
修改此配置文件,添加如下行到文尾:
alias net-pf-10 off alias ipv6 off echo "IPV6INIT=no" >> \ /etc/sysconfig/network-scripts/ifcfg-eth0
完成!