內核相關參數(/etc/sysctl.conf)
如下參數能夠直接放到sysctl.conf文件的末尾:
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 65535
加快TCP鏈接的回收:
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1linux
TCP鏈接接收和發送緩衝區大小的默認值和最大值:
net.core.wmem_default = 87380
net.core.wmem_max = 16777216
net.core.rmem_default = 87380
net.core.rmem_max = 16777216數據庫
減小失效鏈接所佔用的TCP資源的數量,加快資源回收的效率
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3服務器
kernel.shmmax = 4294967295
Linux內核參數中最重要的參數之一,用於定義單個共享內存段的最大值。
注意:
1. 這個參數應該設置的足夠大,以便能在一個共享內存段下容納整個的Innodb
緩衝池的大小
2. 這個值的大小對於64位linux系統,可取的最大值爲物理內存值-1byte,建議
值爲大於物理內存的一半,通常取值大於Innodb緩衝池的大小便可,能夠取物理內存-1byteapp
vm.swappiness = 0
這個參數當內存不足時會對性能產生比較明顯的影響。
Linux系統內存交換區:
在Linux系統安裝時都會有一個特殊的磁盤分區,稱之爲系統交換分區。
使用free-m命令能夠看到swap就是內存交換區.
做用:
當操做系統由於沒有足夠的內存時就會將一些虛擬內存寫到磁盤的交換區中
這樣就會發生內存交換。
在MySQL服務器上是否要使用交換分區有一些爭議:
在MySQL服務所在的Linux系統上徹底禁用交換分區。
帶來的風險:
1. 下降操做系統的性能
2. 容易形成內存溢出,崩潰,或都被操做系統kill掉
結論:
在MySQL服務器上保留交換區仍是很必要的,可是要控制什麼時候使用交換分區。
Vm.swappiness = 0
就是告訴Linux內核除非虛擬內存徹底滿了,不然不要使用交換區。tcp
增長資源限制(/etc/security/limit.conf)
這個文件其實是Linux PAM也就是插入式認證模塊的配置文件。
打開文件數的限制:
soft nofile 65535
hard nofile 65535
* 表示對全部用戶有效
soft 指的是當前系統生效的設置
hard 代表系統中所能設定的最大值
nofile 表示所限制的資源是打開文件的最大數目
65535 限制的數量
soft不能大於hard
直接加到limit.conf文件的末尾就能夠了。
結論:把可打開的文件數量增長到65535個以保證能夠打開足夠多的文件句柄。
注意:這個文件的修改須要重啓系統才能生效。oop
磁盤調度策略(/sys/block/devname/queue/scheduler)
cat /sys/block/devname/queue/scheduler
調度策略: noop anticipatory deadline [cfg]性能
noop(電梯式調度策略)
NOOP實現了一個FIFO隊列,它像電梯的工做方法同樣對I/O請求進行組織,當有一個新
的請求到來時,它將請求合併到最近的請求以後,以此來保證請求同一介質。NOOP傾向餓死讀而
利於寫,所以NOOP對於閃存設備、RAM及嵌入式系統是最好的選擇。spa
deadline(截止時間調度策略)
deadline確保了在一個截止時間內服務請求,這個截止時間是可調整的,而默認讀期限
短於寫期限。這樣就防止了寫操做由於不能被讀取而餓死的現象,deadline對數據庫類應用是最
好的選擇。操作系統
anticipatory(預料I/O調度策略)
本質上與deadline同樣,但在最後一次讀操做以後,要等待6ms,才能繼續進行對其它I/O
請求進行調度。它會在每一個6ms中插入新的I/O操做,而會將一些小寫入流合併成一個大寫入流,用
寫入延時換區最大的寫入吞吐量。AS適合於寫入較多的環境,好比文件服務器,AS對數據庫環境表
現不好。.net
修改調度策略: echo <schedulername> > /sys/block/devname/queue/scheduler 如 echo deadline /sys/block/devname/queue/scheduler