歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> Linux VPS的優化方法收集與整理

Linux VPS的優化方法收集與整理

日期:2017/8/19 9:47:18   编辑:關於Linux

來說說 Linux VPS的一些優化方法。那麼如果你是VPS主機(Linux),可以嘗試一下了,尤其是 Linux 系統的內核參數優化。

一、增加SWAP分區

VPS(Virtual Private Server 虛擬專用服務器)技術,將一部服務器分割成多個虛擬專享服務器的優質服務。每個VPS都可分配獨立公網IP地址、獨立操作系統、獨立超大空間、獨立內存、獨立執行程序和獨立系統配置等。

下面是配置過程中的一些筆記:

VPS只有一個根分區,沒有swap交換分區。VPS內存不大,於是,我為其增加了一個swap交換文件。

1、進入一個目錄

BASIC
cd /var/

2、獲取256M的文件塊:

BASIC
dd if=/dev/zero of=swapfile bs=1024 count=262144

3、創建swap文件

BASIC
/sbin/mkswap swapfile

4、激活swap文件

BASIC
/sbin/swapon swapfile

5、查看一下swap是否正確:

BASIC
/sbin/swapon -s

6、加到fstab文件中讓系統引導時自動啟動

BASIC
vi /etc/fstab

在末尾增加以下內容:

BASIC
/var/swapfile swap swap defaults 0 0

二、修改Linux系統時區

系統默認為美國東部時間,修改Linux時區為東八區(北京時間)

BASIC
cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

三、Linux內核參數優化

Linux內核參數優化可以使用 sysctl 命令完成,但是命令只能臨時生效,若要永久保留配置,我們就得編輯sysctl.conf這個文件了。先附上sysctl.conf詳細參數說明。

sysctl.conf 文件中參數設置及參考推薦值:

proc/sys/net/core/wmem_max

最大socket寫buffer,可參考的優化值:873200

/proc/sys/net/core/rmem_max

最大socket讀buffer,可參考的優化值:873200

/proc/sys/net/ipv4/tcp_wmem

TCP寫buffer,可參考的優化值: 8192 436600 873200

/proc/sys/net/ipv4/tcp_rmem

TCP讀buffer,可參考的優化值: 32768 436600 873200

/proc/sys/net/ipv4/tcp_mem

同樣有3個值,意思是:

net.ipv4.tcp_mem[0]:低於此值,TCP沒有內存壓力.

net.ipv4.tcp_mem[1]:在此值下,進入內存壓力階段.

net.ipv4.tcp_mem[2]:高於此值,TCP拒絕分配socket.

上述內存單位是頁,而不是字節.可參考的優化值是:786432 1048576 1572864

/proc/sys/net/core/netdev_max_backlog

進入包的最大設備隊列.默認是300,對重負載服務器而言,該值太低,可調整到1000

/proc/sys/net/core/somaxconn

listen()的默認參數,掛起請求的最大數量.默認是128.對繁忙的服務器,增加該值有助於網絡性能.可調整到256.

/proc/sys/net/core/optmem_max

socket buffer的最大初始化值,默認10K

/proc/sys/net/ipv4/tcp_max_syn_backlog

進入SYN包的最大請求隊列.默認1024.對重負載服務器,可調整到2048

/proc/sys/net/ipv4/tcp_retries2

TCP失敗重傳次數,默認值15,意味著重傳15次才徹底放棄.可減少到5,盡早釋放內核資源.

/proc/sys/net/ipv4/tcp_keepalive_time

/proc/sys/net/ipv4/tcp_keepalive_intvl

/proc/sys/net/ipv4/tcp_keepalive_probes

這3個參數與TCP KeepAlive有關.默認值是:

tcp_keepalive_time = 7200 seconds (2 hours)

tcp_keepalive_probes = 9

tcp_keepalive_intvl = 75 seconds

意思是如果某個TCP連接在idle 2個小時後,內核才發起probe.如果probe 9次(每次75秒)不成功,內核才徹底放棄,認為該連接已失效.對服務器而言,顯然上述值太大. 可調整到:

/proc/sys/net/ipv4/tcp_keepalive_time 1800

/proc/sys/net/ipv4/tcp_keepalive_intvl 30

/proc/sys/net/ipv4/tcp_keepalive_probes 3

/proc/sys/net/ipv4/ip_local_port_range

指定端口范圍的一個配置,默認是32768 61000,已夠大.

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.ipv4.tcp_max_tw_buckets = 5000

表示系統同時保持TIME_WAIT套接字的最大數量,如果超過這個數字,TIME_WAIT套接字將立刻被清除並打印警告信息。默認為 180000,改為 5000。對於Apache、Nginx等服務器,上幾行的參數可以很好地減少TIME_WAIT套接字數量,但是對於Squid,效果卻不大。此項參數可以控制TIME_WAIT套接字的最大數量,避免Squid服務器被大量的TIME_WAIT套接字拖死。

需要優化的朋友,可以參考上面的參數說明,並根據服務器實際負載來定制你的sysctl.conf文件,下面貼上一個針對nginx內核參數優化的例子,僅供參考(待補充):

net.ipv4.ip_forward = 0

net.ipv4.conf.default.rp_filter = 1

net.ipv4.conf.default.accept_source_route = 0

kernel.sysrq = 0

kernel.core_uses_pid = 1

net.ipv4.tcp_syncookies = 1

kernel.msgmnb = 65536

kernel.msgmax = 65536

kernel.shmmax = 68719476736

kernel.shmall = 4294967296

net.ipv4.tcp_max_tw_buckets = 6000

net.ipv4.tcp_sack = 1

net.ipv4.tcp_window_scaling = 1

net.ipv4.tcp_rmem = 4096 87380 4194304

net.ipv4.tcp_wmem = 4096 16384 4194304

net.core.wmem_default = 8388608

net.core.rmem_default = 8388608

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

net.core.netdev_max_backlog = 262144

net.core.somaxconn = 262144

net.ipv4.tcp_max_orphans = 3276800

net.ipv4.tcp_max_syn_backlog = 262144

net.ipv4.tcp_timestamps = 0

net.ipv4.tcp_synack_retries = 1

net.ipv4.tcp_syn_retries = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_mem = 94500000 915000000 927000000

net.ipv4.tcp_fin_timeout = 1

net.ipv4.tcp_keepalive_time = 30

net.ipv4.ip_local_port_range = 1024 65000

將以上代碼添加到 sysctl.conf 文件的最後,然後執行 /sbin/sysctl -p 即可生效。

三、關閉多余tty,釋放內存

Linux默認會啟動6個TTY控制台,都需要常駐占用內存(1tty占用4M多的樣子),事實上沒必要需要使用這麼多tty,個人vps,僅需1~2個tty即可。

Centos5.* 設置tty數量:

①、編輯 /etc/inittab,找到 tty [1-6] 改成 tty [1-2]

②、編輯 /etc/sysconfig/init,同樣將 tty [1-6] 改成 tty [1-2]

重啟系統即可生效(建議先不重啟,等後續操作完成一起重啟即可);

CentOS 6.* 設置tty數量:

CentOS 6.0 開始 TTY 的配置由 /etc/inittab 更改為 /etc/init/start-ttys.conf,所以上面的第①步變為:

①、編輯 /etc/init/start-ttys.conf,找到 tty [1-6] 改成 tty [1-2]

②同上編輯即可

四、關閉ipv6

ipv6一般都用不到,完全關閉即可。

編輯 /etc/modprobe.d/dist.conf 文件,在最後追加:

BASIC
alias net-pf-10 off
alias ipv6 off

然後重啟系統即可(某些發行版可能是 /etc/modprobe.conf 文件)。

五、關閉多余啟動項

執行 chkconfig --list | grep :on 列出啟動項:

Linuxstartup.png

然後找到不需要啟動的項目,執行 chkconfig 程序名 off 即可。

比如,ip6tables 是 ipv6 防火牆,用不到,執行 chkconfig ip6tables off ,然後執行 service ip6tables stop 即可徹底關閉 ip6tables 這個多余進程。

Copyright © Linux教程網 All Rights Reserved