Linux系統配置最佳化:實用技巧大揭秘

應用系統跑在作業系統上面,系統的效能也關係到應用程式的效能,這裡講一些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

說明:
  1. *代表針對所有使用者
  2. noproc 是代表最大程序數
  3. nofile 是代表最大檔案開啟數

調整核心引數檔案 /etc/syctl.conf

配置網路引數來提高系統負載能力

如果出現伺服器丟包的情況,需要考慮是不是如下配置需要調整
vim

/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_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

常見異常

  • too many open files(開啟的檔案過多)
程式在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
(版權歸原作者所有,侵刪)


相關文章