天天看點

linux調優

關于 CPU 中央處理器調優

CPU 處理資料的方式:

1. 批處理,順序處理請求.(切換次數少,吞吏量大)

2. 分時處理.(如同"獨占",吞吏量小)(時間片,把請求分為一個一個的時間片,一片一片的分給 CPU 處理)

我們現在使用 x86 就是這種架構

3. 實時處理. 例: 批處理——以前的大型機(Mainframe)上所采用的系統,需要把一批程式事先寫好(打孔紙帶),然 後計算得出結果

分時——現在流行的 PC 機和伺服器都是采用這種運作模式,即把 CPU 的運作分成若幹時間片分别處理不同的運算請求

實時——一般用于單片機上,比如電梯的上下控制,對于按鍵等動作要求進行實時處理

檢視核心一秒鐘中斷 CPU 次數:

[root@silence80 ~]# grep HZ /boot/config-2.6.32-220.el6.x86_64

CONFIG_NO_HZ=y

# CONFIG_HZ_100 is not set

# CONFIG_HZ_250 is not set

# CONFIG_HZ_300 is not set

CONFIG_HZ_1000=y

CONFIG_HZ=1000 #1 秒鐘有 1000 次中斷

注: 此檔案/boot/config-2.6.32-220.el6.x86_64 是編譯核心的參數檔案

調整程序優先級使用更多 CPU

調整程序 nice 值,讓程序使用更多的 CPU

優先級控制:

nice 值 #範圍,   -20 ~ 19   越小優先級越高 普通使用者 0-19 nice

作用:以什舉優先級運作程序 。預設優先級是 0

文法: nice   -n 優先級數字 指令 例:

#nice -n -5 vim a.txt # vim 程序以-5 級别運作 檢視:

ps -axu | grep a.txt

[root@silence80 ~]# ps -axu | grep b.txt

Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ 

root 24318   0.0   0.2 143624   3280 pts/4 S+ 17:00 0:00 vim b.txt 

[root@silence80 ~]# top -p 24318

PID USER PR   NI   VIRT   RES   SHR S %CPU %MEM TIME+   COMMAND

24219 root 15   -5   140m 3336 2200 S   0.0   0.3 0:00.08 vim

renice   #修改正在運作的程序的優先級

#renice -n 5 PID #修改程序優先級 

例:

#renice -n 5 24318

24219 root 15   5   140m 3336 2200 S   0.0   0.3 0:00.08 vim

檢測一下範圍: -20-19

[root@silence80 ~]# renice -n -21 24219

24219: old priority -20, new priority -20 

[root@silence80 ~]# renice -n 20 24219

24219: old priority -20, new priority 19

CPU 親和力

taskset 作用:在多核情況下,可以認為指定一個程序在哪顆 CPU 上執行程式,減少程序在不同 CPU 之 前切換的開銷

安裝:

[root@silence80 ~]# rpm -qf `which taskset `

util-linux-ng-2.17.2-12.4.el6.x86_64

文法: taskset   -c N 指令

例 1:本機是 4 核 CPU ,指定 vim 指令在第一個 CPU 上運作 

[root@silence80 ~]# taskset -c 0 vim a.txt #1 号 CPU ID 是 0 

[root@silence80 ~]# ps -axu | grep vim

root 2614   1.3   0.2 143696   3332 pts/0 S+ 18:39 0:00 vim a.txt 

[root@silence80 ~]# taskset -p   2614 #   -p 要檢視的程序 ID

pid 2614's current affinity mask: 1 #CPU 親和力掩碼,1 代表第一個 CPU 核心

例 2:查 sshd 程序運作在哪幾個 CPU 上

[root@silence80 ~]# ps -axu | grep sshd

root 2030   0.0   0.0   64068   1140 ? Ss 18:26 0:00 /usr/sbin/sshd 

[root@silence80 ~]# taskset -p 2030

pid 2030's current affinity mask: f #說明 sshd 在 4 顆 CPU 上随機進行切換。

說明:

Cpu ID 号碼,對應的 16 進制數為:

8 核 CPU ID:   7 6 5 4 3 2 1 0

對應的 10 十進制數為: 128 64 32 16 8 4 2 1

目前, 我的系統中 cpu ID 的為(0,1,2,3)

pid 2030's current affinity mask: f 的值為 cpu ID 16 進制的值的和(1+2+4+8=f),轉換成二進制為:1111

這個說明了(pid=2030)的這個 sshd 程序工作在 cpu ID 分别為 0,1,2,3 這個四個 cpu 上面的切換。 

注: 我們的 CPU 是 4 核心,是以 taskset -c 後可以跟: 0,1,2,3

例:指定 vim c.txt   程式運作在第 2 和第 4 個 CPU 上 

[root@silence80 ~]#   taskset -c 1,3 vim b.txt 

[root@silence80 ~]#   ps -axu | grep vim

root 6314   1.5   0.2 143612   3280 pts/1 S+ 14:41 0:00 vim b.txt 

root 6317   0.0   0.0 103300 848 pts/2 S+ 14:41 0:00 grep vim 

[root@silence80 ~]# taskset -p 6314

pid 6314's current affinity mask: a

# a 為十進制的 10=2+8

注:在哪個 CPU 上運作,那一位就賦為 1 。 二進制表示為: 0101=2+8=10

CPU 使用率比例配置設定:

如果一個 CPU 被充分使用,使用率分類之間均衡的比例應該是

65% - 70% User Time #使用者态

30% - 35% System Time #核心态

0% - 5% Idle Time #空閑

Context Switches - 上下文切換的數目直接關系到 CPU 的使用率,如果 CPU 使用率保持在上述均衡狀态

時,有大量的上下文切換是正常的.

執行個體 1:持續的 CPU 使用率 在這個例子中,這個系統的 CPU 被充分利用

[root@silence80 ~]# vmstat   1 # 本機為單核 CPU,執行 vmstat 顯示以下内容

procs --------memory---------- ---swap--   -----io---- --system--   -----cpu-----

r   b swpd free buff   cache   si so bi bo in cs us sy   id   wa   st

3   0 0 130644   86244 609860 0 0 4 1 531 25 0   0   20   0   0

4   0 0 130620   86244 609860 0 0 0 0 638 62 0   0   14   0   0

2   0 0 130620   86244 609860 0 0 0 0 658 62 0   0   13   0   0

4   0 0 130620   86244 609860 0 0 0 0 688 62 0   0   11   0   0

注: 根據觀察值,我們可以得到以下結論:

1,有大量的中斷(in) 和較少的上下文切換(cs).這意味着一個單一的程序正在快速運作

2,進一步顯示某單個應用,user time(us) 經常在 86%或者更多。 執行 top ->按 P->檢視使用 CPU 最多的程序

3,運作隊列還在可接受的性能範圍内,其中有 2 個地方,是超出了允許限制.

執行個體 2:超負荷排程 在這個例子中,核心排程中的上下文切換處于飽和

# vmstat 1 #本機為單核 CPU,通過檢視 vmstat 輸出結果,分析目前系統中出現的問題

procs memory swap io system cpu

r b swpd free buff cache si so bi bo in cs us sy  wa   id

2 1 207740 98476 81344 180972 0 0 2496 0 900 2883  4 12  57  27

0 1 207740 96448 83304 180984 0 0 1968 328 810 2559 8 9 83 0

0 1 207740 94404 85348 180984 0  0 2044 0 829  2879 9 6 78  7

0 1 207740 92576 87176   180984  0  0   1828 0 689 2088  3 9 78  10

2 0 207740 91300 88452   180984  0  0   1276 0 565 2182  7 6 83  4

3 1 207740 90124 89628   180984  0  0   1176 0 551 2219  2 7 91  0

1,上下文切換數目高于中斷數目,說明目前系統中運作着大量的線程,kernel 中相當數量的時間都開銷線上 程的”上下文切換“。

2,大量的上下文切換将導緻 CPU 使用率不均衡.很明顯實際上等待 io 請求的百分比(wa)非常高,以及

user time 百分比非常低(us).   說明磁盤比較慢,磁盤是瓶頸

3,因為 CPU 都阻塞在 IO 請求上,是以運作隊列裡也有相當數量的可運作狀态線程在等待執行.

總結:說明

記憶體調優相關内容:

執行個體 1:安裝完系統後,測試記憶體

[root@silence80 ~]# rpm -ivh /mnt/Packages/memtest86+-4.10-2.el6.x86_64.rpm

[root@silence80 ~]# memtest-setup

Setup complete.

[root@silence80 ~]# vim /etc/grub.conf   #多了一個啟動項

重新開機後,在 grub 啟動項中選擇:

Memtest86+ (4.10) 這個項就可以了

linux調優

4. 關于緩存

BUFFER  索引緩存  緩存 寫時用,先寫入到記憶體

CACHE 頁緩存 快取 讀時用,先讀入到記憶體

buffers #緩存從磁盤讀出的内容 ,這種了解是片面的

cached #緩存需要寫入磁盤的内容   ,這種了解是片面的

例 1:

終端 1: free -m

終端 2:find /

終端 1:free   -m   #檢視   buffer 增長

CACHE:頁緩存,  記憶體頁是記憶體中的最小存儲機關,一頁尺寸 4kB

對象檔案系統 塊 block 1kB 2kB 4kB

扇區 sectors 512b

手動清空 buffer+cache :

[root@silence80 ~]# cat /proc/sys/vm/drop_caches #預設是 0

[root@silence80 ~]# free -m

total used free shared buffers cached

Mem: 1137 783 353 0 67 411

-/+ buffers/cache: 303 833

Swap: 999 0 999 

[root@silence80 ~]# sync   # 把記憶體中的資料寫入磁盤 

[root@silence80 ~]# echo 1 > /proc/sys/vm/drop_caches

total used free shared buffers cached

Mem: 1137 367 770 0 0 67

-/+ buffers/cache: 299 838

Swap: 999 0 999

[root@silence80 ~]# ulimit -a

I/O調優 相關内容

1、設定一個程序可以打開的檔案數

[root@silence80 ~]# ulimit -n

1024

測試:

[root@silence80 ~]# service httpd restart

Stopping httpd:  [FAILED] Starting httpd: [   OK   ] 

[root@silence80 ~]# echo 111 > /var/www/html/index.html 

[root@silence80 ~]# ab -n 2000   -c 2000 http://192.168.1.63/index.html 

This is silence80Bench, Version 2.3 <$Revision: 655654 $>

Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ 

Licensed to The silence80 Software Foundation, http://www.silence80.org/

Benchmarking 192.168.1.63 (be patient)

socket: Too many open files (24)

解決: 限制使用者資源配置檔案:/etc/security/limits.conf vim /etc/security/limits.conf #在最添加:

* soft nofile 1024000

* hard nofile 1024000

注:soft 是一個警告值,而 hard 則是一個真正意義的閥值,超過就會報錯。soft 一定要比 hard 小。

2、啟動系統: reboot #永久生效的缺點,必須重新開機系統

3、檢查:

1024000

[root@silence80 ~]# useradd mk #以普通使用者登入,測試

[root@silence80 ~]# su - mk

[silence@silence80 ~]$ ulimit -n

方法二:#臨時修改

[root@silence80 ~]# ulimit -n   10000 

10000

例 2:nproc   #使用者可以打開的最大程序數

[root@silence80 ~]# vim /etc/security/limits.d/90-nproc.conf #RHEL6 必須這個檔案中配 置

改:

* soft nproc 10240

為:

* soft nproc 66666

* hard nproc 66666 

[root@silence80 ~]# reboot #最好重新開機一下 

[root@silence80 ~]# ulimit -u

66666 

或:

 再打一個終端,直接檢視

66666

臨時:

[root@silence80 ~]# ulimit -u 60000 

60000

注:預設使用者可用的最大程序數量1024.這樣以silence80使用者啟動的程序就數就不能大于1024了。

core file size (blocks, -c) 0 kdump 轉儲功能打開後産生的 core file 大小限制

data seg size (kbytes, -d) unlimited 資料段大小限制

scheduling priority (-e) 0

file size (blocks, -f) unlimited 檔案大小限制

pending signals (-i) 27955 max locked memory (kbytes, -l) 32

max memory size (kbytes, -m) unlimited

open files (-n) 1024   打開的檔案個數限制

pipe size (512 bytes, -p) 8 管道大小的限制

POSIX message queues (bytes, -q) 819200 消息隊列大小

real-time priority (-r) 0

stack size (kbytes, -s) 10240   棧大小

cpu time (seconds, -t) unlimited   CPU 時間使用限制

max user processes (-u) 27955 最大的使用者程序數限制

virtual memory (kbytes, -v) unlimited 虛拟記憶體限制

file locks (-x) unlimited

測試硬碟速度:

測試硬碟寫指令: dd

在使用前首先了解兩個特殊裝置

/dev/null 僞裝置,資源回收筒.寫該檔案不會産生IO開銷

/dev/zero 僞裝置,會産生空字元流,讀該檔案不會産生IO開銷

[root@silence80 ~]# dd if=/dev/zero   of=/test.dbf bs=8K count=30000

3000+0 records in

3000+0 records out

24576000 bytes (25 MB) copied, 5.13755 s, 4.8 MB/s 生成 25M 的一個檔案,IO 寫的速度約為 4.8 MB/s 當然這個速度可以多測試幾遍取一個平均值,符合機率統計.

time   指令: 執行指令并計時

例1: 測試dd 指令使用時間和開銷

[root@xuegod64 ~]# time dd if=/dev/zero of=/test.dbf bs=8k count=3000

24576000 bytes (25 MB) copied, 1.04913 s, 23.4 MB/s real 0m1.061s

user 0m0.002s sys 0m0.770s 注釋:

1)實際時間(real time): 從command指令行開始執行到運作終止的消逝時間;

2)使用者CPU時間(user CPU time): 指令執行完成花費的使用者CPU時間,即指令在使用者态中執行時間總和;

3)系統CPU時間(system CPU time): 指令執行完成花費的系統CPU時間,即指令在核心态中執行時間總 和。 其中,使用者CPU時間和系統CPU時間之和為CPU時間,即指令占用CPU執行的時間總和。實際時間要大于 CPU時間,因為Linux是多任務作業系統,往往在執行一條指令時,系統還要處理其它任務。 另一個需要注意的問題是即使每次執行相同指令,但所花費的時間也是不一樣,其花費時間是不系統運作 相關的。

[root@xuegod64 ~]# hdparm -T -t /dev/sda

/dev/sda:

Timing cached reads: 3850 MB in   2.00 seconds = 1926.60 MB/sec

#2秒中直接從記憶體的 cache讀取資料的速度讀 3850 MB。   平均1926.60 MB/sec

Timing buffered disk reads: 50 MB in seconds =   13.17 MB/sec

參數:

-t perform device read timings #不使用預先的資料緩沖, 标示了Linux下沒有任何檔案系統開 銷時磁盤可以支援多快的連續資料讀取.

-T perform cache read timings   #直接從記憶體的 cache讀取資料的速度。實際上顯示出被測系統的 處理器緩存和記憶體的吞吏量.

網相關調優: 網卡綁定技術:

/雙線備援 功能

\帶寬增備

100M/8 = 12.5MByte/s

Bonding技術 什舉是網卡綁定及簡單原理 網卡綁定也稱作"網卡捆綁",就是使用多塊實體網卡虛拟成為一塊網卡,以提供負載均衡或者備援,增加 帶寬的作用。當一個網卡壞掉時,不會影響業務。這個聚合起來的裝置看起來是一個單獨的以太網接口設 備,也就是這幾塊網卡具有相同的IP位址而并行連結聚合成一個邏輯鍊路工作。這種技術在Cisco等網絡公 司中,被稱為Trunking和Etherchannel 技術,在Linux的核心中把這種技術稱為bonding。 Trunking(鍊路聚集)

二、技術分類

1. 負載均衡

2. 網絡備援 

實戰:配置多網卡綁定技術

配置環境:

silence80 配置兩雙網卡,網卡eth0和eth1都橋接 添加網卡:

linux調優

配置:

檢視是否加載了bond子產品:

[root@silence80 network-scripts]# modinfo bonding| grep .ko filename:

/lib/modules/2.6.32-220.el6.x86_64/kernel/drivers/net/bonding/bonding.ko

[root@silence80 network-scripts]# modprobe bonding #加載子產品

[root@silence80 ~]# lsmod | grep bond bonding 125610   0

ipv6 322029   158 bonding,ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6

開機自動加載子產品到核心:

[root@silence80 ~]# echo 'modprobe bonding &> /dev/null' >> /etc/rc.local 

[root@silence80 ~]# vim   /etc/modprobe.conf #建立此配置檔案,并寫入以下内容 編輯子產品載入配置檔案,讓系統支援bonding

alias bond0 bonding

options bonding miimon=100 mode=balance-rr

a. mode=balance-rr 或mode=0 這裡我采用這種rr輪循模式, 此模式提供負載平衡和容錯。 此模式 下是以網卡共用一個MAC位址,後面結果會有驗證!

b. miimon是用來進行鍊路監測的,如:miimon=100,那舉系統每100ms監測一次鍊路連接配接狀态,如果 有一條線路不通就轉入另一條線路;

c. bonding隻能提供鍊路監測,即從主機到交換機的鍊路是否接通。如果隻是交換機對外的鍊路down掉

了,而交換機本身并沒有故障,那舉bonding會認為鍊路沒有問題而繼續使用。

建立bond0設定配置檔案

[root@silence80 ~]# vim /etc/sysconfig/network-scripts/ifcfg-bond0 #寫入以下内容

DEVICE=bond0

IPADDR=192.168.1.63

NETMASK=255.255.255.0

GATEWAY=192.168.1.1

DNS1=192.168.1.1

ONBOOT=yes BOOTPROTO=none USERCTL=no

建立eth0配置檔案:

[root@silence80 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0  #寫入以下内容

DEVICE=eth0

USERCTL=no ONBOOT=yes MASTER=bond0

SLAVE=yes BOOTPROTO=none 建立eth1配置檔案:

[root@silence80 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1 #寫入以下内容

DEVICE=eth1

SLAVE=yes

BOOTPROTO=none

重新開機網卡:

[root@silence80 ~]# service network restart

Shutting down interface eth0: [   OK   ] 

Shutting down loopback interface: [   OK   ] 

Bringing up loopback interface: [   OK   ] 

Bringing up interface bond0: [   OK   ]

檢視:

[root@silence80 ~]# ifconfig #注此時MAC位址都一樣

bond0 Link encap:Ethernet   HWaddr 00:0C:29:12:EC:1E

inet addr:192.168.1.63   Bcast:192.168.1.255  Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe12:ec1e/64 Scope:Link

UP BROADCAST RUNNING MASTER MULTICAST   MTU:1500     Metric:1

RX packets:751 errors:0 dropped:0 overruns:0 frame:0

TX packets:445 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:73353 (71.6 KiB)   TX bytes:59783 (58.3 KiB)

eth0

Link encap:Ethernet   HWaddr 00:0C:29:12:EC:1E

UP BROADCAST RUNNING SLAVE MULTICAST   MTU:1500 Metric:1

RX packets:743 errors:0 dropped:0 overruns:0 frame:0

TX packets:432 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000

RX bytes:72050 (70.3 KiB)   TX bytes:57101 (55.7 KiB)

eth1

Link encap:Ethernet   HWaddr 00:0C:29:12:EC:1E Metric:1

UP BROADCAST RUNNING SLAVE MULTICAST   MTU:1500

[root@silence80 ~]#   ping 192.168.1.1

PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.

64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=2.89 ms

64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=1.82 ms

[root@silence80 network-scripts]# route -n   #檢視網關

linux調優

[root@silence80 network-scripts]# cat /etc/resolv.conf #檢視DNS

# Generated by NetworkManager nameserver 192.168.1.1

search localhost

測試高可用:

1、[root@silence80 ~]# ping 192.168.1.1 #打開終端後,持續ping 網關

2、此時可以斷開虛拟機eth1網絡連接配接,檢視ping是否有丢包:

[root@silence80 ~]#ifdown eth0

3、斷開後,發現通信正常,沒有問題。說明多網卡綁定成功

mode=0 : 可實作網絡負載均衡和網絡備援,采用平衡輪循政策(balance-rr)。

此模式的特點:

a. 是以網卡都工作,傳輸資料包順序是依次傳輸,也就是說第1個包經過eth0,下一個包就經過eth1,一 直循環下去,直到最後一個包傳輸完畢。

b. 此模式對于同一連接配接從不同的接口發出的包,中途傳輸過程中再經過不同的連結,在用戶端很有可能會 出現資料包無序到達的問題,而無序到達的資料包需要重新要求被發送,這樣網絡的吞吏量就會下降。

c. 不網卡相連的交換必須做特殊配置( 這兩個端口應該采取聚合方式),因為做bonding的這兩塊網卡是 使用同一個MAC位址

網絡核心相關參數調優

TCP 連接配接三次握手相關

Client ------------------------- Server

SYN

                        SYN+ACK

ACK

1. 抵禦SYN 洪水攻擊

SYN攻擊是利用TCP/IP協定3次握手的原理,發送大量的建立連接配接的網絡包SYN包,但不實際建立連接配接, 最終導緻被攻擊伺服器的網絡隊列被占滿,無法被正常使用者通路。

原理圖:

linux調優

SYN Flood是目前最流行的DoS(拒絕服務攻擊)不DDoS(分布式拒絕服務攻擊)的方式之一,這是一

種利用TCP協定缺陷,發送大量僞造的TCP連接配接請求,常用假冒的IP或IP号段發來海量的請求連接配接的

第一 個握手包(SYN包),被攻擊伺服器回應第二個握手包(SYN+ACK包),因為對方是假冒IP,對

方永進 收不到包且不會回應第三個握手包。導緻被攻擊伺服器保持大量SYN_RECV狀态的“半連接配接”,

并且會重 試預設5次回應第二個握手包,塞滿TCP等待連接配接隊列,資源耗盡(CPU滿負荷或記憶體不足),

讓正常的 業務請求連接配接不進來。

解決:

[root@xuegod63 ~]# vim /etc/sysctl.conf   #在檔案最後添加以下内容

net.ipv4.tcp_synack_retries = 0 

net.ipv4.tcp_syn_retries = 0 

net.ipv4.tcp_max_syn_backlog = 20480 

net.ipv4.tcp_syncookies = 1 

net.ipv4.tcp_tw_reuse = 1 

net.ipv4.tcp_tw_recycle = 1 

net.ipv4.tcp_fin_timeout = 10

fs.file-max = 819200 

net.core.somaxconn = 65536 

net.core.rmem_max = 1024123000 

net.core.wmem_max = 16777216 

net.core.netdev_max_backlog = 165536 

net.ipv4.ip_local_port_range = 10000 65535 

注:每台伺服器上線之前,都應該配置以上核心參數。

最重要參數: 注釋:

[root@xuegod63 ~]# cat /proc/sys/net/ipv4/tcp_synack_retries #最關鍵參數,預設為5,修 改為0 表示不要重發

net.ipv4.tcp_synack_retries = 0

1

#表示回應第二個握手包(SYN+ACK包)給用戶端IP後,如果收不到第三次握手包(ACK包)後,不進 行重試,加快回收“半連接配接”,不要耗光資源。

#作為服務端。回應時,如果連接配接失敗,達到對應的失敗數後,停止發送synack包

第一個參數tcp_synack_retries = 0是關鍵,表示回應第二個握手包(SYN+ACK包)給用戶端IP後,如 果收不到第三次握手包(ACK包)後,不進行重試,加快回收“半連接配接”,不要耗光資源。 不修改這個參數,模拟攻擊,10秒後被攻擊的80端口即無法服務,機器難以ssh登入; 用指令

netstat -na |grep SYN_RECV檢測“半連接配接”hold住180秒;

修改這個參數為0的副作用:網絡狀況很差時,如果對方沒收到第二個握手包,可能連接配接伺服器失敗,但對 于一般網站,使用者重新整理一次頁面即可。這些可以在高峰期或網絡狀況不好時tcpdump抓包驗證下。 根據以前的抓包經驗,這種情況很少,但為了保險起見,可以隻在被tcp洪水攻擊時臨時啟用這個參數。

tcp_synack_retries預設為5,表示重發5次,每次等待30~40秒,即“半連接配接”預設hold住大約180秒。 我們之是以可以把tcp_synack_retries改為0,因為用戶端還有tcp_syn_retries參數,預設是5,即使服 務器端沒有重發SYN+ACK包,用戶端也會重發SYN握手包。

[root@xuegod63 ~]# cat /proc/sys/net/ipv4/tcp_syn_retries

#tcp_syn_retries參數,預設是5,當沒有收到伺服器端的SYN+ACK包時,用戶端重發SYN握手包的次 數。

[root@xuegod63 ~]# cat /proc/sys/net/ipv4/tcp_max_syn_backlog

20480

#半連接配接隊列長度,增加SYN隊列長度到20480:加大SYN隊列長度可以容納更多等待連接配接的網絡連接配接數, 具體多少數值受限于記憶體。

接下來輔助參數:

#系統允許的檔案句柄的最大數目,因為連接配接需要占用檔案句柄

fs.file-max = 819200

#用來應對突發的大并發connect 請求

net.core.somaxconn = 65536

#最大的TCP 資料發送緩沖(位元組)

net.core.wmem_max = 16777216

#網絡裝置接收資料包的速率比核心處理這些包的速率快時,允許送到隊列的資料包的最大數目

net.core.netdev_max_backlog = 165536

#本機主動連接配接其他機器時的端口配置設定範圍,比如說,在vsftpd主動模式會用到 net.ipv4.ip_local_port_range = 10000 65535 

注:如果隻是開啟22端口,是不會使用到ip_local_port_range這個功能 

[root@xuegod63 ~]# netstat -antup | grep :22

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN

1993/sshd

tcp 0 0 192.168.1.63:22 192.168.1.23:51855

ESTABLISHED 9316/sshd

tcp 0 0 192.168.1.63:22 192.168.1.23:51861

ESTABLISHED 10878/sshd

為了處理大量連接配接,還需改大另外兩個參數: 限制使用者資源配置檔案:/etc/security/limits.conf

[root@xuegod63 ~]#vim /etc/security/limits.conf #在最添加:

[root@xuegod63 ~]# vim /etc/security/limits.d/90-nproc.conf #RHEL6 必須這個檔案中配 置

* hard nproc 66666 [root@xuegod63 ~]# reboot #最好重新開機一下

次要輔助參數,以上還無法解決syn洪水攻擊,把以下核心參數關閉: 注意,以下參數面對外網時,不要打開。因為副作用很明顯。

[root@xuegod63 ~]# cat /proc/sys/net/ipv4/tcp_syncookies

#表示開啟SYN Cookies。當出現SYN等待隊列溢出時,啟用cookies接收溢出的SYN連接配接,可防範少量

SYN攻擊,預設為0,表示關閉;

[root@xuegod63 ~]# cat /proc/sys/net/ipv4/tcp_tw_reuse

#表示開啟tcp連結重用。允許将TIME-WAIT sockets重新用于新的TCP連接配接,預設為0,表示關閉,現 在開啟,改為1

[root@xuegod63 ~]# cat /proc/sys/net/ipv4/tcp_tw_recycle

#表示開啟TCP連接配接中TIME-WAIT sockets的快速回收,預設為0,表示關閉。現在改為1,表示開啟

[root@xuegod63 ~]# cat /proc/sys/net/ipv4/tcp_fin_timeout

30

#預設值是 60,對于本端斷開的socket連接配接,TCP保持在FIN_WAIT_2狀态的時間。

内網提速之巨幀Jumbo Frame

[root@xuegod63 ~]# ifconfig eth0

eth0 Link encap:Ethernet   HWaddr 00:0C:29:12:EC:1E

UP BROADCAST RUNNING MULTICAST   MTU:1500   Metric:1

執行個體:調大MTU

[root@xuegod63 ~]# ifconfig eth0 mtu 9000 

inet addr:192.168.1.63   Bcast:192.168.1.255  Mask:255.255.255.0 

inet6 addr: fe80::20c:29ff:fe12:ec1e/64 Scope:Link

UP BROADCAST RUNNING MULTICAST   MTU:9000   Metric:1 注:MTU,即Maximum Transmission Unit(最大傳輸單元),

此值設定TCP/IP協定傳輸資料報時的最 大傳輸單元。 系統不ISP之間MTU的不符就會直接導緻資料在網絡傳輸過程中不斷地進行分包、組包,

浪費了寶貴的傳 輸時間,也嚴重影響了寬帶的工作效率。

下一篇: memcache

繼續閱讀