Linux核心優化實戰(sysctl.conf和ulimits)
阿新 • • 發佈:2020-12-09
一、sysctl.conf優化
簡介:Linux系統核心引數的配置檔案為/etc/sysctl.conf和/etc/sysctl.d/目錄。其讀取順序為:/etc/sysctl.d/下面的檔案按照字母排序;然後讀取/etc/sysctl.conf。
一般所有對系統對修改引數放在/etc/sysctl.d/目錄,系統原有對sysctl.conf檔案儲存一些更加基礎對配置。
sysctl.conf可優化引數如下:
fs.file-max = 65535 # 減少交換記憶體使用,預設60,建議10-30 vm.swappiness = 30 # 髒資料的比例和處理,根據場景不同設定 # 參考 https://lonesysadmin.net/2013/12/22/better-linux-disk-caching-performance-vm-dirty_ratio/ # 如果是資料庫伺服器,希望資料能夠儘快安全寫入,可降低記憶體快取比例 # vm.dirty_background_ratio = 5 # vm.dirty_ratio = 10 # 如果是業務伺服器,對資料安全寫入無要求,可加大記憶體快取比例 # vm.dirty_background_ratio = 50 # vm.dirty_ratio = 80 # 設定為1,核心允許分配所有的實體記憶體,Redis常用 vm.overcommit_momory = 1 # 系統擁有的記憶體數,ElasticSearch啟動必備 vm.max_map_count = 262144 # 設定為1 net.ipv4.tcp_no_metrics_save = 1 # 禁用 sysrq 功能 kernel.sysrq = 0 # 控制 core 檔案的檔名中是否新增 pid 作為擴充套件 kernel.core_uses_pid = 1 # 設定為1, 防止 SYN FlOOD 攻擊 net.ipv4.tcp_syncookies = 1 # 訊息佇列的最大訊息大小,預設8k,建議64kb kernel.msgmax = 65536 # 訊息佇列存放訊息的總位元組數 kernel.msgmnb = 163840 # TIME_WAIT socker的最大數目,不宜太大或者太小,nginx反向代理必備 net.ipv4.tcp_max_tw_buckets = 50000 # 開啟 SACK 選項,設定為1 net.ipv4.tcp_sack = 1 # 啟用視窗擴充因子,支援64kb以上資料傳輸 net.ipv4.tcp_window_scaling = 1 # TCP 緩衝區記憶體,連線數達到非常高時候需要配置好 net.ipv4.tcp_mem = 786432 2097152 3145728 net.ipv4.tcp_rmem = 4096 4096 16777216 net.ipv4.tcp_wmem = 4096 4096 16777216 # socket 緩衝區預設值和最大值 net.core.wmem_default = 8388608 net.core.rmem_default = 8388608 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 # ACCEPT 等待佇列長度,適當,太大了堆積也無用 net.core.netdev_max_backlog = 65535 # 允許最大併發連線數,重要 net.core.somaxconn = 65535 # 不屬於任何程序的socket數目,不宜太大,防止攻擊 net.ipv4.tcp_max_orphans = 65535 # SYNC等待佇列長度,適當,太大了排隊也沒用 net.ipv4.tcp_max_syn_backlog = 65535 # 禁用timestamp,重要,高併發下設定為0 net.ipv4.tcp_timestamps = 0 # 傳送SYNC+ACK 的重試次數,不宜太大,5以內 net.ipv4.tcp_synack_retries = 1 # 傳送SYNC的重試次數,不宜太大,5以內 net.ipv4.tcp_syn_retries = 1 # 允許回收TCP連線,重要,必須為1 net.ipv4.tcp_tw_recycle = 1 # 允許重用TCP連線,重要,必須為1 net.ipv4.tcp_tw_reuse = 1 # 服務端主動關閉後,客戶端釋放連線的超時,重要,<30 net.ipv4.tcp_fin_timeout = 5 # 允許TCP連線保持的空閒keepalive時長,不需要太長 net.ipv4.tcp_keepalive_time = 30 # 系統作為TCP客戶端連線自動使用的埠(start,end),可發起併發連線數為end-start net.ipv4.ip_local_port_range = 10240 65535
執行sysctl -p 過載配置。
[tips] 常用指令:sysctl -a | grep <引數名> 可查詢當前引數值
核心優化指令碼
# 禁用大記憶體頁面 Transparent Huge Pages for Redis/MongoDB,預設是always echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
二、ulimits優化
設定開啟檔案的最大數量(檔案描述符),按需修改最大數值。
編輯/etc/security/limits.conf,新增或替換下面幾行程式碼到檔案結尾:
root hard nofile 65535 * soft nofile 65535 * hard nofile 65535 * soft nproc 65535 * hard nproc 65535
斷開SSH並重新SSH連線伺服器,輸入下面的命令檢查是否生效:
ulimit -a
對於程序來說,重啟就能使其生效。