應用系統跑在操做系統上面,系統的性能也關係到應用程序的性能,這裏講一些Linux性能關鍵的配置信息。linux
selinux提升系統安全性,但會形成不少麻煩,通常關閉vim
[root@localhost ~]# vim /etc/selinux/config
將SELINUX=enforcing改成SELINUX=disabled,保存後退出,重啓生效安全
[root@localhost ~]# reboot
節約系統資源服務器
[root@localhost ~]# grep 3:initdefault /etc/inittab id:3:initdefault: [root@localhost ~]# init 3
vim /etc/security/limits.conf
調整大小cookie
* soft nofile 65536 * hard nofile 65536 * soft nproc 65536 * hard nproc 65536
說明:網絡
配置網絡參數來提升系統負載能力
若是出現服務器丟包的狀況,須要考慮是否是以下配置須要調整併發
vim /etc/syctl.conf
net.ipv4.tcp_syncookies = 1socket
表示開啓SYN Cookies。當出現SYN等待隊列溢出時,啓用cookies來處理,可防範少許SYN攻擊,默認爲0,表示關閉;
net.ipv4.tcp_tw_reuse = 1tcp
表示開啓重用。容許將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_syn_backlog = 8192
表示SYN隊列的長度,默認爲1024,加大隊列長度爲8192,能夠容納更多等待鏈接的網絡鏈接數。
net.nf_conntrack_max = 655360
在內核內存中netfilter能夠同時處理的「任務」(鏈接跟蹤條目)
/etc/syctl 尾部加上以下防火牆相關配置
有多是sysctl.conf.first文件
開啓重用,回收 socket資源用於新的TCP連接
net.ipv4.tcp_tw_reuse=1
開啓回收:
net.ipv4.tcp_tw_recycle=1
網絡連接最大值及超時配置
net.nf_conntrack_max = 25000000 net.netfilter.nf_conntrack_max = 25000000 net.netfilter.nf_conntrack_tcp_timeout_established = 180 net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120 net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60 net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
net.nf_conntrack_max
決定鏈接跟蹤表的大小,默認值是65535,能夠根據系統內存大小計算一個合理值:> CONNTRACK_MAX = RAMSIZE(in bytes)/16384/(ARCH/32),如32G內存能夠設置1048576;
nf_conntrack_buckets
決定存儲conntrack條目的哈希表大小,默認值是nf_conntrack_max的1/4,延續這種計算方式:BUCKETS = > CONNTRACK_MAX/4,如32G內存能夠設置262144;
net.netfilter.nf_conntrack_max
最大鏈接數
net.netfilter.nf_conntrack_tcp_timeout_established
決定ESTABLISHED狀態鏈接的超時時間,默認值是5天,能夠縮短到1小時,即3600。
net.netfilter.nf_conntrack_tcp_timeout_time_wait
決定WAIT狀態鏈接的超時等待時間
net.netfilter.nf_conntrack_tcp_timeout_close_wait
決定關閉狀態鏈接的超時等待時間
net.netfilter.nf_conntrack_tcp_timeout_fin_wait
決定WAIT狀態鏈接的超時等待時間
使以上配置生效
sysctl –p
程序在Linux系統中常見的錯誤,從字面意思上看就是說程序打開的文件數過多,不過這裏的files不單是文件的意思,也包括打開的通信連接(好比socket),正在監聽的端口等等,因此有時候也能夠叫作句柄(handle),這個錯誤一般也能夠叫作句柄數超出系統限制。
在高併發狀況或者程序代碼中沒有正確關閉IO, 並系統限制比較小的狀況下,系統在運行一段時間後,程序打開句柄數超過系統限制的時候拋出該異常
解決方法:加大系統文件描述符最大值
通常TimeWait進程數過多,緣由通常爲應用程序沒有正確關閉鏈接,致使服務器TIME_WAIT進程過多,主動關閉鏈接致使TIME_WAIT產生。先檢查程序及系統以上配置
解決方法:解決程序問題,檢查系統內核網絡及防火牆內核設置
查看機器網絡狀態狀態
netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'LAST_ACK
狀態:描述
CLOSED:無鏈接是活動的或正在進行
LISTEN:服務器在等待進入呼叫
SYN_RECV:一個鏈接請求已經到達,等待確認
SYN_SENT:應用已經開始,打開一個鏈接
ESTABLISHED:正常數據傳輸狀態
FIN_WAIT1:應用說它已經完成
FIN_WAIT2:另外一邊已贊成釋放
ITMED_WAIT:等待全部分組死掉
CLOSING:兩邊同時嘗試關閉
TIME_WAIT:另外一邊已初始化一個釋放
LAST_ACK:等待全部分組死掉
Linux提供了豐富的內核參數供使用者調整,調整得當能夠大幅提升服務器的處理能力