CentOS5.x系統核心最佳化
主要是針對/etc/sysctl.conf裡的各項進行詳細解析,所有內容經網路搜集並整理,方便大家學習瞭解。
系統最佳化項:
kernel.sysrq = 0
#使用sysrq按鍵組合是瞭解系統目前運行情況,為安全起見設為0關閉
kernel.core_uses_pid = 1
#控制core檔案的檔案名稱是否添加pid作為擴充
kernel.msgmnb = 65536
#每個訊息佇列的大小限制,以位元組為單位
kernel.msgmni = 16
#整個系統最大訊息佇列數量限制,此值可以根據需要增大.
kernel.msgmax = 65536
#每個訊息的最大size
kernel.shmmax = 68719476736
#可用共用記憶體段的大小(單位:位元組)限制
kernel.shmall = 4294967296
#所有記憶體大小(單位:頁,1頁 = 4Kb)
kernel.shmmni = 4096
#控制共用記憶體段總數,目前的參數值是4096
kernel.sem = 250 32000 100 128
或kernel.sem =5010 641280 5010 128
#SEMMSL(每個使用者擁有訊號量最大數量),SEMMNS(系統訊號量最大數量),SEMOPM(每次semop系統叫用作業數),SEMMNI(系統訊號量集最大數量)
fs.aio-max-nr = 65536或取(1048576)(3145728)值
# 在系統級支援非同步I/O,當系統進行大量的連續IO會使用較大的值
fs.aio-max-size = 131072
#非同步IO的最大大小
fs.file-max = 65536
#表示檔案控制代碼的最大數量
net.core.wmem_default = 8388608
#為TCP socket預留用於發送緩衝的記憶體預設值(單位:位元組)
net.core.wmem_max = 16777216
#為TCP socket預留用於發送緩衝的記憶體最大值(單位:位元組)
net.core.rmem_default = 8388608
#為TCP socket預留用於接收緩衝的記憶體預設值(單位:位元組)
net.core.rmem_max = 16777216
#為TCP socket預留用於接收緩衝的記憶體最大值(單位:位元組)
net.core.somaxconn = 262144
#listen(函數)的預設參數,掛起請求的最大數量限制
網路最佳化項:
net.ipv4.ip_forward = 0
#禁用包過濾、轉寄功能
net.ipv4.tcp_syncookies = 1
#開啟SYN COOKIES功能
net.ipv4.conf.default.rp_filter = 1
#啟用源路由核查功能
net.ipv4.conf.default.accept_source_route = 0
#禁用所有IP源路由
net.ipv4.route.gc_timeout = 100
#路由緩衝重新整理頻率, 當一個路由失敗後多長時間跳到另一個預設是300
net.ipv4.ip_local_port_range = 1024 65000
#對外串連連接埠範圍,預設情況下很小:32768到61000,改為1024到65000。
net.ipv4.tcp_max_tw_buckets = 6000
#表示系統同時保持TIME_WAIT通訊端的最大數量,如果超過這個數字,TIME_WAIT通訊端將立刻被清除並列印警告資訊,預設為180000
net.ipv4.tcp_sack = 1
#在高延遲的串連中,SACK 對於有效利用所有可用頻寬尤其重要。高延遲會導致在任何給定時刻都有大量正在傳送的包在等待應答。在 Linux 中,除非得到應答或不再需要,這些包將一直存放在重傳隊列中。這些包按照序列編號排隊,但不存在任何形式的索引。當需要處理一個收到的 SACK 選項時,TCP 協議棧必須在重傳隊列中找到應用了 SACK 的包。重傳隊列越長,找到所需的資料就越困難。一般可關閉這個功能。選擇性應答在高頻寬延遲的網路連接上對效能的影響很大,但也可將其禁用,這不會犧牲互通性。將其值設定為 0 即可禁用 TCP 協議棧中的 SACK 功能。
net.core.netdev_max_backlog = 262144
#每個網路介面接收資料包的速率比核心處理這些包的速率快時,允許送到隊列的資料包的最大數目
net.ipv4.tcp_window_scaling = 1
#TCP視窗擴大因子支援. 如果TCP視窗最大超過65535(64K), 設定該數值為1 。Tcp視窗擴大因子是一個新選項,一些新的實現才會包含該選項,為了是新舊協議相容,做了如下約定:1、只有主動串連方的第一個syn可以發送視窗擴大因子;2、被動串連方接收到帶有視窗擴大因子的選項後,如果支援,則可以發送自己的視窗擴大因子,否則忽略該選項;3、如果雙方支援該選項,那麼後續的資料轉送則使用該視窗擴大因子。如果對方不支援wscale,那麼它不應該響應 wscale 0,而且在收到46的視窗時不應該發送1460的資料;如果對方支援wscale,那麼它應該大量發送資料來增加輸送量,不至於通過關閉wscale來解決問題,如果是使用普遍的協議實現,那麼就需要關閉wscale來提高效能並以防萬一。
net.ipv4.tcp_rmem = 4096 87380 4194304
#TCP讀buffer
net.ipv4.tcp_wmem = 4096 16384 4194304
#TCP寫buffer
net.ipv4.tcp_max_orphans = 3276800
#系統中最多有多少個TCP通訊端不被關聯到任何一個使用者檔案控制代碼上。如果超過這個數字,孤兒串連將即刻被複位並列印出警告資訊。這個限制僅僅是為了防止簡單的DoS攻擊,不能過分依靠它或者人為地減小這個值,更應該增加這個值(如果增加了記憶體之後)。
net.ipv4.tcp_max_syn_backlog = 262144
#表示SYN隊列的長度,預設為1024,加大隊列長度為8192,可以容納更多等待串連的網路連接數
net.ipv4.tcp_timestamps = 0
#時間戳記可以避免序號的卷繞。一個1Gbps 的鏈路肯定會遇到以前用過的序號。時間戳記能夠讓核心接受這種“異常”的資料包。這裡需要將其關掉。
net.ipv4.tcp_synack_retries = 1
#為了開啟對端的串連,核心需要發送一個SYN 並附帶一個回應前面一個SYN 的ACK。也就是所謂三向交握中的第二次握手。這個設定決定了核心放棄串連之前發送SYN+ACK 包的數量。
net.ipv4.tcp_syn_retries = 1
#對於一個建立串連,核心要發送多少個 SYN 串連請求才決定放棄。不應該大於255,預設值是5
net.ipv4.tcp_tw_recycle = 1
#啟用timewait快速回收
net.ipv4.tcp_tw_reuse = 1
#開啟重用。允許將TIME-WAIT sockets重新用於新的TCP串連。
net.ipv4.tcp_mem = 94500000 915000000 927000000
#1st低於此值,TCP沒有記憶體壓力,2nd進入記憶體壓力階段,3rdTCP拒絕分配socket(單位:記憶體頁)
net.ipv4.tcp_fin_timeout = 1
#表示如果通訊端由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間為15秒
net.ipv4.tcp_keepalive_time = 60
#表示當keepalive起用的時候,TCP發送keepalive訊息的頻度。預設是2小時,改為1分鐘。
net.ipv4.tcp_keepalive_probes= 1
net.ipv4.tcp_keepalive_intvl= 2
#意思是如果某個TCP串連在idle 2分鐘後,核心才發起probe.如果probe 1次(每次2秒)不成功,核心才徹底放棄,認為該串連已失效.
最後使配置立即生效,可使用如下命令:
#/sbin/sysctl -p
我們在效能最佳化時,首先要設定效能最佳化需要達到的目標,然後尋找瓶頸,調整參數,達到最佳化目的。尋找效能瓶頸是比較辛苦的,要從大範圍,通過很多用例和測試,不斷的縮小範圍,最終確定瓶頸點, 有很多的參數要邊測試邊調整,這就需要我們更多的耐心和堅持。
執行個體:
temp=`cat /etc/sysctl.conf|grep -c net.ipv4.tcp_max_syn_backlog`
if [ $temp -eq 0 ]
then
echo "# Add" >> /etc/sysctl.conf
echo "net.ipv4.tcp_max_syn_backlog = 65536" >> /etc/sysctl.conf
echo "net.core.netdev_max_backlog = 32768" >> /etc/sysctl.conf
echo "net.core.somaxconn = 32768" >> /etc/sysctl.conf
echo "net.core.wmem_default = 8388608" >> /etc/sysctl.conf
echo "net.core.rmem_default = 8388608" >> /etc/sysctl.conf
echo "net.core.rmem_max = 16777216" >> /etc/sysctl.conf
echo "net.core.wmem_max = 16777216" >> /etc/sysctl.conf
echo "net.ipv4.tcp_timestamps = 0" >> /etc/sysctl.conf
echo "net.ipv4.tcp_synack_retries = 2" >> /etc/sysctl.conf
echo "net.ipv4.tcp_syn_retries = 2" >> /etc/sysctl.conf
echo "net.ipv4.tcp_tw_recycle = 1" >> /etc/sysctl.conf
#net.ipv4.tcp_tw_len = 1
echo "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf
echo "net.ipv4.tcp_mem = 94500000 915000000 927000000" >> /etc/sysctl.conf
echo "net.ipv4.tcp_max_orphans = 3276800" >> /etc/sysctl.conf
#net.ipv4.tcp_fin_timeout = 30
#net.ipv4.tcp_keepalive_time = 120
echo "net.ipv4.ip_local_port_range = 1024 65535" >> /etc/sysctl.conf