sysctl.conf工作原理
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
sysctl.conf工作原理
?
sysctl命令被用于在內(nèi)核運(yùn)行時(shí)動(dòng)態(tài)地修改內(nèi)核的運(yùn)行參數(shù),可用的內(nèi)核參數(shù)在目錄/proc/sys中。它包含一些TCP/IP堆棧和虛擬內(nèi)存系統(tǒng)的高級(jí)選項(xiàng), 這可以讓有經(jīng)驗(yàn)的管理員提高引人注目的系統(tǒng)性能。用sysctl可以讀取設(shè)置超過(guò)五百個(gè)系統(tǒng)變量。
limits.conf設(shè)置
1)暫時(shí)生效,適用于通過(guò)?ulimit?命令登錄 shell 會(huì)話期間
ulimit -SHn 655352)永久生效,通過(guò)將一個(gè)相應(yīng)的 ulimit 語(yǔ)句添加到由登錄 shell 讀取的文件之一(例如 ~/.profile),即特定于 shell 的用戶資源文件;或者通過(guò)編輯/etc/security/limits.conf
#比如添加到/etc/profile echo ulimit -SHn 65535 >> /etc/profile source /etc/profile#修改最大進(jìn)程和最大文件打開(kāi)數(shù)限制 vi /etc/security/limits.conf * soft nproc 11000 * hard nproc 11000 * soft nofile 655350 * hard nofile 655350sysctl.conf設(shè)置
?
#優(yōu)化TCP vi /etc/sysctl.conf #禁用包過(guò)濾功能 net.ipv4.ip_forward = 0 #啟用源路由核查功能 net.ipv4.conf.default.rp_filter = 1 #禁用所有IP源路由 net.ipv4.conf.default.accept_source_route = 0 #使用sysrq組合鍵是了解系統(tǒng)目前運(yùn)行情況,為安全起見(jiàn)設(shè)為0關(guān)閉 kernel.sysrq = 0 #控制core文件的文件名是否添加pid作為擴(kuò)展 kernel.core_uses_pid = 1 #開(kāi)啟SYN Cookies,當(dāng)出現(xiàn)SYN等待隊(duì)列溢出時(shí),啟用cookies來(lái)處理 net.ipv4.tcp_syncookies = 1 #每個(gè)消息隊(duì)列的大小(單位:字節(jié))限制 kernel.msgmnb = 65536 #整個(gè)系統(tǒng)最大消息隊(duì)列數(shù)量限制 kernel.msgmax = 65536 #單個(gè)共享內(nèi)存段的大小(單位:字節(jié))限制,計(jì)算公式64G*1024*1024*1024(字節(jié)) kernel.shmmax = 68719476736 #所有內(nèi)存大小(單位:頁(yè),1頁(yè) = 4Kb),計(jì)算公式16G*1024*1024*1024/4KB(頁(yè)) kernel.shmall = 4294967296 #timewait的數(shù)量,默認(rèn)是180000 net.ipv4.tcp_max_tw_buckets = 6000 #開(kāi)啟有選擇的應(yīng)答 net.ipv4.tcp_sack = 1 #支持更大的TCP窗口. 如果TCP窗口最大超過(guò)65535(64K), 必須設(shè)置該數(shù)值為1 net.ipv4.tcp_window_scaling = 1 #TCP讀buffer net.ipv4.tcp_rmem = 4096 131072 1048576 #TCP寫(xiě)buffer net.ipv4.tcp_wmem = 4096 131072 1048576 #為T(mén)CP socket預(yù)留用于發(fā)送緩沖的內(nèi)存默認(rèn)值(單位:字節(jié)) net.core.wmem_default = 8388608 #為T(mén)CP socket預(yù)留用于發(fā)送緩沖的內(nèi)存最大值(單位:字節(jié)) net.core.wmem_max = 16777216 #為T(mén)CP socket預(yù)留用于接收緩沖的內(nèi)存默認(rèn)值(單位:字節(jié)) net.core.rmem_default = 8388608 #為T(mén)CP socket預(yù)留用于接收緩沖的內(nèi)存最大值(單位:字節(jié)) net.core.rmem_max = 16777216 #每個(gè)網(wǎng)絡(luò)接口接收數(shù)據(jù)包的速率比內(nèi)核處理這些包的速率快時(shí),允許送到隊(duì)列的數(shù)據(jù)包的最大數(shù)目 net.core.netdev_max_backlog = 262144 #web應(yīng)用中l(wèi)isten函數(shù)的backlog默認(rèn)會(huì)給我們內(nèi)核參數(shù)的net.core.somaxconn限制到128,而nginx定義的NGX_LISTEN_BACKLOG默認(rèn)為511,所以有必要調(diào)整這個(gè)值 net.core.somaxconn = 262144 #系統(tǒng)中最多有多少個(gè)TCP套接字不被關(guān)聯(lián)到任何一個(gè)用戶文件句柄上。這個(gè)限制僅僅是為了防止簡(jiǎn)單的DoS攻擊,不能過(guò)分依靠它或者人為地減小這個(gè)值,更應(yīng)該增加這個(gè)值(如果增加了內(nèi)存之后) net.ipv4.tcp_max_orphans = 3276800 #記錄的那些尚未收到客戶端確認(rèn)信息的連接請(qǐng)求的最大值。對(duì)于有128M內(nèi)存的系統(tǒng)而言,缺省值是1024,小內(nèi)存的系統(tǒng)則是128 net.ipv4.tcp_max_syn_backlog = 262144 #時(shí)間戳可以避免序列號(hào)的卷繞。一個(gè)1Gbps的鏈路肯定會(huì)遇到以前用過(guò)的序列號(hào)。時(shí)間戳能夠讓內(nèi)核接受這種“異常”的數(shù)據(jù)包。這里需要將其關(guān)掉 net.ipv4.tcp_timestamps = 0 #為了打開(kāi)對(duì)端的連接,內(nèi)核需要發(fā)送一個(gè)SYN并附帶一個(gè)回應(yīng)前面一個(gè)SYN的ACK。也就是所謂三次握手中的第二次握手。這個(gè)設(shè)置決定了內(nèi)核放棄連接之前發(fā)送SYN+ACK包的數(shù)量 net.ipv4.tcp_synack_retries = 1 #在內(nèi)核放棄建立連接之前發(fā)送SYN包的數(shù)量 net.ipv4.tcp_syn_retries = 1 #開(kāi)啟TCP連接中time_wait sockets的快速回收 net.ipv4.tcp_tw_recycle = 1 #開(kāi)啟TCP連接復(fù)用功能,允許將time_wait sockets重新用于新的TCP連接(主要針對(duì)time_wait連接) net.ipv4.tcp_tw_reuse = 1 #1st低于此值,TCP沒(méi)有內(nèi)存壓力,2nd進(jìn)入內(nèi)存壓力階段,3rdTCP拒絕分配socket(單位:內(nèi)存頁(yè)) net.ipv4.tcp_mem = 94500000 915000000 927000000 #如果套接字由本端要求關(guān)閉,這個(gè)參數(shù)決定了它保持在FIN-WAIT-2狀態(tài)的時(shí)間。對(duì)端可以出錯(cuò)并永遠(yuǎn)不關(guān)閉連接,甚至意外當(dāng)機(jī)。缺省值是60 秒。2.2 內(nèi)核的通常值是180秒,你可以按這個(gè)設(shè)置,但要記住的是,即使你的機(jī)器是一個(gè)輕載的WEB服務(wù)器,也有因?yàn)榇罅康乃捞捉幼侄鴥?nèi)存溢出的風(fēng)險(xiǎn),FIN- WAIT-2的危險(xiǎn)性比FIN-WAIT-1要小,因?yàn)樗疃嘀荒艹缘?.5K內(nèi)存,但是它們的生存期長(zhǎng)些。 net.ipv4.tcp_fin_timeout = 15 #表示當(dāng)keepalive起用的時(shí)候,TCP發(fā)送keepalive消息的頻度(單位:秒) net.ipv4.tcp_keepalive_time = 30 #對(duì)外連接端口范圍 net.ipv4.ip_local_port_range = 2048 65000 #表示文件句柄的最大數(shù)量 fs.file-max = 102400?
其他設(shè)置
可以通過(guò)/etc/sysctl.conf控制和配置Linux內(nèi)核及網(wǎng)絡(luò)設(shè)置。
# 避免放大攻擊
net.ipv4.icmp_echo_ignore_broadcasts = 1
# 開(kāi)啟惡意icmp錯(cuò)誤消息保護(hù)
net.ipv4.icmp_ignore_bogus_error_responses = 1
# 開(kāi)啟SYN洪水攻擊保護(hù)
net.ipv4.tcp_syncookies = 1
# 開(kāi)啟并記錄欺騙,源路由和重定向包
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
# 處理無(wú)源路由的包
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# 開(kāi)啟反向路徑過(guò)濾
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# 確保無(wú)人能修改路由表
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
# 不充當(dāng)路由器
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
# 開(kāi)啟execshild
kernel.exec-shield = 1
kernel.randomize_va_space = 1
# IPv6設(shè)置
net.ipv6.conf.default.router_solicitations = 0
net.ipv6.conf.default.accept_ra_rtr_pref = 0
net.ipv6.conf.default.accept_ra_pinfo = 0
net.ipv6.conf.default.accept_ra_defrtr = 0
net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.default.dad_transmits = 0
net.ipv6.conf.default.max_addresses = 1
# 優(yōu)化LB使用的端口
# 增加系統(tǒng)文件描述符限制
fs.file-max = 65535
# 允許更多的PIDs (減少滾動(dòng)翻轉(zhuǎn)問(wèn)題); may break some programs 32768
kernel.pid_max = 65536
# 增加系統(tǒng)IP端口限制
net.ipv4.ip_local_port_range = 2000 65000
# 增加TCP最大緩沖區(qū)大小
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 87380 8388608
# 增加Linux自動(dòng)調(diào)整TCP緩沖區(qū)限制
# 最小,默認(rèn)和最大可使用的字節(jié)數(shù)
# 最大值不低于4MB,如果你使用非常高的BDP路徑可以設(shè)置得更高
# Tcp窗口等
net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_window_scaling = 1
?
?
轉(zhuǎn)載于:https://my.oschina.net/yonghan/blog/856314
總結(jié)
以上是生活随笔為你收集整理的sysctl.conf工作原理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 浅谈进程间的消息传递
- 下一篇: RTP/RTCP/RTSP协议初探