天天看點

Linux系統優化

核心優化

net.ipv4.tcp_max_tw_buckets = 6000

timewait 的數量,預設是180000。

net.ipv4.ip_local_port_range = 1024 65000

允許系統打開的端口範圍。

net.ipv4.tcp_tw_recycle = 1

啟用timewait 快速回收。

net.ipv4.tcp_tw_reuse = 1

開啟重用。允許将TIME-WAIT sockets 重新用于新的TCP 連接配接。

net.ipv4.tcp_syncookies = 1

開啟SYN Cookies,當出現SYN 等待隊列溢出時,啟用cookies 來處理。

net.core.somaxconn = 262144

web 應用中listen 函數的backlog 預設會給我們核心參數的net.core.somaxconn 限制到128,而nginx 定義的NGX_LISTEN_BACKLOG 預設為511,是以有必要調整這個值。

net.core.netdev_max_backlog = 262144

每個網絡接口接收資料包的速率比核心處理這些包的速率快時,允許送到隊列的資料包的最大數目。

net.ipv4.tcp_max_orphans = 262144

系統中最多有多少個TCP 套接字不被關聯到任何一個使用者檔案句柄上。如果超過這個數字,孤兒連接配接将即刻被複位并列印出警告資訊。這個限制僅僅是為了防止簡單的DoS 攻擊,不能過分依靠它或者人為地減小這個值,更應該增加這個值(如果增加了記憶體之後)。

net.ipv4.tcp_max_syn_backlog = 262144

記錄的那些尚未收到用戶端确認資訊的連接配接請求的最大值。對于有128M 記憶體的系統而言,預設值是1024,小記憶體的系統則是128。

net.ipv4.tcp_timestamps = 0

時間戳可以避免序列号的卷繞。一個1Gbps 的鍊路肯定會遇到以前用過的序列号。時間戳能夠讓核心接受這種“異常”的資料包。這裡需要将其關掉。

net.ipv4.tcp_synack_retries = 1

為了打開對端的連接配接,核心需要發送一個SYN 并附帶一個回應前面一個SYN 的ACK。也就是所謂三次握手中的第二次握手。這個設定決定了核心放棄連接配接之前發送SYN+ACK 包的數量。

net.ipv4.tcp_syn_retries = 1

在核心放棄建立連接配接之前發送SYN 包的數量。

net.ipv4.tcp_fin_timeout = 1

如果套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2 狀态的時間。對端可以出錯并永遠不關閉連接配接,甚至意外當機。預設值是60 秒。2.2 核心的通常值是180 秒,3你可以按這個設定,但要記住的是,即使你的機器是一個輕載的WEB 伺服器,也有因為大量的死套接字而記憶體溢出的風險,FIN- WAIT-2 的危險性比FIN-WAIT-1 要小,因為它最多隻能吃掉1.5K 記憶體,但是它們的生存期長些。

net.ipv4.tcp_keepalive_time = 30

當keepalive 起用的時候,TCP 發送keepalive 消息的頻度。預設是2 小時。

使上述修改生效:/sbin/sysctl -p

網絡優化

啟用DNS緩存:NSCD( NSCD,Name Service Cache Daemon,是服務緩存守護程序,它為NIS和LDAP等服務提供更快的驗證。)

啟動DNS緩存後可以本地緩存DNS解析資訊,提高解析速度,但是這樣會造成DNS解析資訊滞後,是以不适合經常切換DNS的服務。如果域名解析需要更改,就需要手動重新整理緩存

配置DNS緩存,編輯

/etc/nscd.conf

檔案,增加如下一行可以開啟本地DNS Cache

enable-cache hosts yes
           

啟動NSCD程序,預設該服務在Redhat或Centos下是關閉的,可以通過以下指令開啟

> service nscd start
           

清除指定類型緩存,NSCD緩存DB檔案在

/var/db/nscd

> nscd -i passwd
> nscd -i group
> nscd -i hosts
           

檔案優化

linux 預設值 open files 和 max user processes 為 1024,當負載較大時,很容易遇到

error: too many open files

,是以需要将該值調大。

使用

ulimit -a

可以檢視目前系統的所有限制值,

使用ulimit -n

可以檢視目前的最大打開檔案數。

有如下四種修改方式:

  1. echo 284289 > /proc/sys/fs/file-max

  2. 在/etc/rc.local 中增加一行

    ulimit -SHn 65535

    (需要機器重新開機才能生效)
  3. 在/etc/profile 中增加一行

    ulimit -SHn 65535

    (執行

    source /etc/profile

    即可生效)
  4. 在/etc/security/limits.conf 最後增加:(重新登入即可生效)
  • soft nofile 65535
  • hard nofile 65535
  • soft nproc 65535
  • hard nproc 65535

線程優化

修改系統線程棧大小。無論是程序棧還是線程棧,當棧被耗盡時,俗稱”爆棧”時,都會觸發段錯誤segment falut。預設情況下,Linux線程棧大小為10240,即10M,可以通過

ulimit -s

檢視預設棧大小。

修改系統線程棧大小為1M,有兩種方式:

  1. /etc/rc.local

    ,加入

    ulimit -s 1024

    ,需要機器重新開機才能生效
  2. 在/etc/security/limits.conf 中 新增

    * soft stack 102400

    ,重新登入即可生效

其它

Nginx啟用gzip壓縮

繼續閱讀