老生常谈.优化linux内核参数
生活随笔
收集整理的這篇文章主要介紹了
老生常谈.优化linux内核参数
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
在高并發(fā)短連接的server端,當(dāng)server處理完client的請求后立刻closesocket,此時會出現(xiàn)time_wait狀態(tài)。可以通過命令查看系統(tǒng)當(dāng)前的連接數(shù)統(tǒng)計。 命令如下: netstat -n | awk '/^tcp/ { ++s[$NF] } END {for (a in s) print a,s[a]}' TIME_WAIT屬于TCP參數(shù)。現(xiàn)將所調(diào)參數(shù),及參數(shù)說明記錄如下: net.ipv4.netfilter.ip_conntrack_max = 131072 #代表機器跟蹤連接的數(shù)目 net.ipv4.tcp_max_tw_buckets = 5000 #表示系統(tǒng)同時保持TIME_WAIT套接字的最大數(shù)量,如果超過這個數(shù)字,TIME_WAIT套接字將立刻被清除并打印警告信息。默認(rèn)為180000,改為 5000。對于Apache、Nginx等服務(wù)器,參數(shù)可以很好地減少TIME_WAIT套接字?jǐn)?shù)量,但是對于Squid,效果卻不大。此項參數(shù)可以控制TIME_WAIT套接字的最大數(shù)量,避免Squid服務(wù)器被大量的TIME_WAIT套接字拖死 net.ipv4.tcp_sack = 1 #用來查找特定的遺失的數(shù)據(jù)包---因此有助于快速恢復(fù)狀態(tài) net.ipv4.tcp_window_scaling = 1 #設(shè)置tcp/ip會話的滑動窗口大小是否可變。參數(shù)值為布爾值,為1時表示可變,為0時表示不可變。tcp/ip通常使用的窗口最大可達到 65535 字節(jié),對于高速網(wǎng)絡(luò),該值可能太小,這時候如果啟用了該功能,可以使tcp/ip滑動窗口大小增大數(shù)個數(shù)量級,從而提高數(shù)據(jù)傳輸?shù)哪芰?net.ipv4.tcp_rmem = 4096 87380 4194304 #min:為TCP socket預(yù)留用于接收緩沖的內(nèi)存數(shù)量,即使在內(nèi)存出現(xiàn)緊張情況下tcp socket都至少會有這么多數(shù)量的內(nèi)存用于接收緩沖,默認(rèn)值為8K。 #default:為TCP socket預(yù)留用于接收緩沖的內(nèi)存數(shù)量,默認(rèn)情況下該值影響其它協(xié)議使用的net.core.wmem_default 值。該值決定了在tcp_adv_win_scale、tcp_app_win和tcp_app_win=0默認(rèn)值情況下,TCP窗口大小為65535。默認(rèn)值為87380 #max:用于TCP socket接收緩沖的內(nèi)存最大值。該值不會影響 net.core.wmem_max,"靜態(tài)"選擇參數(shù) SO_SNDBUF則不受該值影響。默認(rèn)值為 128K。默認(rèn)值為87380*2 bytes。) #net.ipv4.tcp_wmem = 4096 16384 4194304 #發(fā)送--參考第5條! net.ipv4.tcp_max_syn_backlog = 65536 #記錄的那些尚未收到客戶端確認(rèn)信息的連接請求的最大值。對于有128M內(nèi)存的系統(tǒng)而言,缺省值是1024,小內(nèi)存的系統(tǒng)則是128。 net.core.netdev_max_backlog = 32768 #每個網(wǎng)絡(luò)接口接收數(shù)據(jù)包的速率比內(nèi)核處理這些包的速率快時,允許送到隊列的數(shù)據(jù)包的最大數(shù)目 net.core.somaxconn = 32768 #web應(yīng)用中l(wèi)isten函數(shù)的backlog默認(rèn)會給我們內(nèi)核參數(shù)的net.core.somaxconn限制到128,而nginx定義的NGX_LISTEN_BACKLOG默認(rèn)為511,所以有必要調(diào)整這個值。 net.core.wmem_default = 8388608 #表示發(fā)送套接字緩沖區(qū)大小的缺省值(以字節(jié)為單位) net.core.rmem_default = 8388608 #表示接收套接字緩沖區(qū)大小的缺省值(以字節(jié)為單位) net.core.rmem_max = 16777216 #最大socket讀buffer,可參考的優(yōu)化值:873200 net.core.wmem_max = 16777216 #最大socket寫buffer,可參考的優(yōu)化值:873200 net.ipv4.tcp_timestamps = 0 #時間戳可以避免序列號的卷繞。一個1Gbps的鏈路肯定會遇到以前用過的序列號。時間戳能夠讓內(nèi)核接受這種“異常”的數(shù)據(jù)包。這里需要將其關(guān)掉。 net.ipv4.tcp_synack_retries = 2 #為了打開對端的連接,內(nèi)核需要發(fā)送一個SYN并附帶一個回應(yīng)前面一個SYN的ACK。也就是所謂三次握手中的第二次#握手。這個設(shè)置決定了內(nèi)核放棄連接之前發(fā)送SYN+ACK包的數(shù)量 net.ipv4.tcp_syn_retries = 2 #在內(nèi)核放棄建立連接之前發(fā)送SYN包的數(shù)量 #net.ipv4.tcp_syncookies = 1 #表示開啟SYN Cookies。當(dāng)出現(xiàn)SYN等待隊列溢出時,啟用cookies來處理,可防范少量SYN攻擊,默認(rèn)為0,表示關(guān)閉; net.ipv4.tcp_tw_recycle = 1 #表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認(rèn)為0,表示關(guān)閉 #net.ipv4.tcp_tw_len = 1 net.ipv4.tcp_tw_reuse = 1 #表示開啟重用。允許將TIME-WAIT sockets重新用于新的TCP連接,默認(rèn)為0,表示關(guān)閉; net.ipv4.tcp_mem = 94500000 915000000 927000000 #net.ipv4.tcp_mem[0]:低于此值,TCP沒有內(nèi)存壓力。 #net.ipv4.tcp_mem[1]:在此值下,進入內(nèi)存壓力階段。 #net.ipv4.tcp_mem[2]:高于此值,TCP拒絕分配socket #上述內(nèi)存單位是頁,而不是字節(jié)。可參考的優(yōu)化值是:786432 1048576 1572864 net.ipv4.tcp_max_orphans = 3276800 #系統(tǒng)中最多有多少個TCP套接字不被關(guān)聯(lián)到任何一個用戶文件句柄上。如果超過這個數(shù)字,連接將即刻被復(fù)位并打#印出警告信息。這個限制僅僅是為了防止簡單的DoS攻擊,不能過分依靠它或者人為地減小這個值,更應(yīng)該增加這個值(如果增加了內(nèi)存之后)。 #net.ipv4.tcp_fin_timeout = 30 #修改系統(tǒng)默認(rèn)的 TIMEOUT 時間 #net.ipv4.tcp_keepalive_time = 300 可以主動探測socket是否可用 net.ipv4.ip_local_port_range = 1024 65000 #表示用于向外連接的端口范圍。缺省情況下很小 可將以上參數(shù):cat >>/etc/sysctl.conf<>/etc/security/limits.conf 使用以上永久修改。轉(zhuǎn)載于:https://my.oschina.net/u/728887/blog/178310
總結(jié)
以上是生活随笔為你收集整理的老生常谈.优化linux内核参数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle安装——虚拟机搭建图解
- 下一篇: #linux进阶#wget