應用系統跑在作業系統上面,系統的效能也關係到應用程式的效能,這裡講一些Linux效能關鍵的配置資訊。
永久關閉selinux
selinux提高系統安全性,但會造成很多麻煩,一般關閉
[root
@localhost ~]
# vim /etc/selinux/config
將SELINUX=enforcing改為SELINUX=disabled,儲存後退出,重啟生效
[root
@localhost ~]
# reboot
設定系統runlevel為3
節約系統資源
[root
@localhost ~]
# grep 3:initdefault /etc/inittab
id:3
:initdefault:
[root
@localhost ~]
# init 3
加大系統檔案描述符最大值
vim
/etc/security/limits.conf
調整大小
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
說明:
-
*代表針對所有使用者
-
noproc 是代表最大程序數
-
nofile 是代表最大檔案開啟數
調整核心引數檔案 /etc/syctl.conf
配置網路引數來提高系統負載能力
如果出現伺服器丟包的情況,需要考慮是不是如下配置需要調整
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_syn_backlog = 8192
表示SYN佇列的長度,預設為1024,加大佇列長度為8192,可以容納更多等待連線的網路連線數。
net.nf_conntrack_max = 655360
在核心記憶體中netfilter可以同時處理的“任務”(連線跟蹤條目)
防火牆配置
/etc/syctl 尾部加上如下防火牆相關配置
有可能是sysctl.conf.first檔案
開啟重用,回收 socket資源用於新的TCP連結
開啟回收:
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狀態連線的超時等待時間
使以上配置生效
常見異常
程式在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提供了豐富的核心引數供使用者調整,調整得當可以大幅提高伺服器的處理能力
連結:https://www.cnblogs.com/pgyLang/p/15769748.html
(版權歸原作者所有,侵刪)