1、I/O調優
CentOS下的iostat命令輸出如下:
$iostat -d -k 1 2 # 查看TPS和吞吐量
參數 -d 表示,顯示設備(磁盤)使用狀態;-k某些使用block為單位的列強制使用Kilobytes為單位;1 10表示,數據顯示每隔1秒刷新一次,共顯示2次。
tps:該設備每秒的傳輸次數,也就是一次I/O請求。多個邏輯請求可能會被合並為“一次I/O請求”。“一次傳輸”請求的大小是未知的。
kB_read/s:每秒從設備讀取的數據量;kB_wrtn/s:每秒向設備寫入的數據量;kB_read:讀取的總數據量;kB_wrtn:寫入的總數量數據量;這些單位都為Kilobytes。
常見的用法如下:
iostat -d -x -k 1 2 # 查看設備使用率(%util)、響應時間(r_await/w_await 毫秒)
如果 %util 接近 100%,說明產生的I/O請求太多,I/O系統已經滿負荷,該磁盤可能存在瓶頸.
avgqu-sz 也是個做 IO 調優時需要注意的地方,這個就是直接每次操作的數據的大小,如果次數多,但數據拿的小的話,其實 IO 也會很小.如果數據拿的大,才IO 的數據會高
iostat -c 1 2 # 查看cpu狀態
idle小於70% IO壓力就較大了,一般讀取速度有較多的wait.
vmstat 2 1 # 2秒采樣,次數為1
b表示等待資源的進程數;wa表示IO等待所占用的CPU時間的百分比,高過30%時IO壓力高
提升IO性能:
(1)增加緩存,減少訪問磁盤的次數
(2)為磁盤做RAID提升IO
(3)給數據上索引,或者采用異步和非阻塞方式加快訪問磁盤速度
2、查看CPU
首先了解一下CPU負載,地址如下:
http://blog.csdn.net/tonyxf121/article/details/46637423
3、TCP網絡參數調優
可以使用apache的ab工具來壓測服務器,安裝ab工具:
yum -y install httpd-tools
然後進行測試
ab -c 10 -n 100 192.168.1.127
-c 10 表示並發用戶數為10
-n 100 表示請求總數為100
常見的參數調優如下:
net.core.netdev_max_backlog = 400000
#該參數決定了,網絡設備接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目。
net.core.optmem_max = 10000000
#該參數指定了每個套接字所允許的最大緩沖區的大小
net.core.rmem_default = 10000000
#指定了接收套接字緩沖區大小的缺省值(以字節為單位)。
net.core.rmem_max = 10000000
#指定了接收套接字緩沖區大小的最大值(以字節為單位)。
net.core.somaxconn = 100000
#Linux kernel參數,表示socket監聽的backlog(監聽隊列)上限
net.core.wmem_default = 11059200
#定義默認的發送窗口大小;對於更大的 BDP 來說,這個大小也應該更大。
net.core.wmem_max = 11059200
#定義發送窗口的最大大小;對於更大的 BDP 來說,這個大小也應該更大。
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
#嚴謹模式 1 (推薦)
#松散模式 0
net.ipv4.tcp_congestion_control = bic
#默認推薦設置是 htcp
net.ipv4.tcp_window_scaling = 0
#關閉tcp_window_scaling
#啟用 RFC 1323 定義的 window scaling;要支持超過 64KB 的窗口,必須啟用該值。
net.ipv4.tcp_ecn = 0
#把TCP的直接擁塞通告(tcp_ecn)關掉
net.ipv4.tcp_sack = 1
#關閉tcp_sack
#啟用有選擇的應答(Selective Acknowledgment),
#這可以通過有選擇地應答亂序接收到的報文來提高性能(這樣可以讓發送者只發送丟失的報文段);
#(對於廣域網通信來說)這個選項應該啟用,但是這會增加對 CPU 的占用。
net.ipv4.tcp_max_tw_buckets = 10000
#表示系統同時保持TIME_WAIT套接字的最大數量
net.ipv4.tcp_max_syn_backlog = 8192
#表示SYN隊列長度,默認1024,改成8192,可以容納更多等待連接的網絡連接數。
net.ipv4.tcp_syncookies = 1
#表示開啟SYN Cookies。當出現SYN等待隊列溢出時,啟用cookies來處理,可防范少量SYN攻擊,默認為0,表示關閉;
net.ipv4.tcp_timestamps = 1
#開啟TCP時間戳
#以一種比重發超時更精確的方法(請參閱 RFC 1323)來啟用對 RTT 的計算;為了實現更好的性能應該啟用這個選項。
net.ipv4.tcp_tw_reuse = 1
#表示開啟重用。允許將TIME-WAIT sockets重新用於新的TCP連接,默認為0,表示關閉;
net.ipv4.tcp_tw_recycle = 1
#表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認為0,表示關閉。
net.ipv4.tcp_fin_timeout = 10
#表示如果套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。
net.ipv4.tcp_keepalive_time = 1800
#表示當keepalive起用的時候,TCP發送keepalive消息的頻度。缺省是2小時,改為30分鐘。
net.ipv4.tcp_keepalive_probes = 3
#如果對方不予應答,探測包的發送次數
net.ipv4.tcp_keepalive_intvl = 15
#keepalive探測包的發送間隔
net.ipv4.tcp_mem
#確定 TCP 棧應該如何反映內存使用;每個值的單位都是內存頁(通常是 4KB)。
#第一個值是內存使用的下限。
#第二個值是內存壓力模式開始對緩沖區使用應用壓力的上限。
#第三個值是內存上限。在這個層次上可以將報文丟棄,從而減少對內存的使用。對於較大的 BDP 可以增大這些值(但是要記住,其單位是內存頁,而不是字節)。
net.ipv4.tcp_rmem
#與 tcp_wmem 類似,不過它表示的是為自動調優所使用的接收緩沖區的值。
net.ipv4.tcp_wmem = 30000000 30000000 30000000
#為自動調優定義每個 socket 使用的內存。
#第一個值是為 socket 的發送緩沖區分配的最少字節數。
#第二個值是默認值(該值會被 wmem_default 覆蓋),緩沖區在系統負載不重的情況下可以增長到這個值。
#第三個值是發送緩沖區空間的最大字節數(該值會被 wmem_max 覆蓋)。
net.ipv4.ip_local_port_range = 1024 65000
#表示用於向外連接的端口范圍。缺省情況下很小:32768到61000,改為1024到65000。
net.ipv4.netfilter.ip_conntrack_max=204800
#設置系統對最大跟蹤的TCP連接數的限制
net.ipv4.tcp_slow_start_after_idle = 0
#關閉tcp的連接傳輸的慢啟動,即先休止一段時間,再初始化擁塞窗口。
net.ipv4.route.gc_timeout = 100
#路由緩存刷新頻率,當一個路由失敗後多長時間跳到另一個路由,默認是300。
net.ipv4.tcp_syn_retries = 1
#在內核放棄建立連接之前發送SYN包的數量。
net.ipv4.icmp_echo_ignore_broadcasts = 1
# 避免放大攻擊
net.ipv4.icmp_ignore_bogus_error_responses = 1
# 開啟惡意icmp錯誤消息保護
net.inet.udp.checksum=1
#防止不正確的udp包的攻擊
net.ipv4.conf.default.accept_source_route = 0
#是否接受含有源路由信息的ip包。參數值為布爾值,1表示接受,0表示不接受。
#在充當網關的linux主機上缺省值為1,在一般的linux主機上缺省值為0。
#從安全性角度出發,建議你關閉該功能。
參考文章:
http://www.ha97.com/4546.html http://www.ha97.com/5095.html