apache調優詳解

apache調優
    可調整的內核參數
       1、調整下列內核參數解決出現大量的TIME_WAIT
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
參數說明:
然後執行 /sbin/sysctl -p 讓參數生效。
net.ipv4.tcp_syncookies = 1 表示開啓SYN Cookies。當出現SYN等待隊列溢出時,啓用cookies來處理,可防範少量SYN***,默認爲0,表示關閉;

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 修改系統默認的 TIMEOUT 時間
       2、調整內核參數是apache的keepalive開啓佔用更少的資源
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_time = 1800
參數說明:
tcp_keepalive_time  默認值是7200(2小時)
當keepalive打開的情況下,TCP發送keepalive消息的頻率。(由於目前網絡***等因素,造成了利用這個進行的***很頻繁,曾經也有cu的朋友提到過,說如果2邊建立了連接,然後不發送任何數據或者rst/fin消息,那麼持續的時間是不是就是2小時,空連接***?tcp_keepalive_time就是預防此情形的.我個人在做nat服務的時候的修改值爲1800秒)

tcp_keepalive_probes  默認值是9
TCP發送keepalive探測以確定該連接已經斷開的次數。(注意:保持連接僅在SO_KEEPALIVE套接字選項被打開是才發送.次數默認不需要修改,當然根據情形也可以適當地縮短此值.設置爲5比較合適)

tcp_keepalive_intvl  默認值爲75
探測消息發送的頻率,乘以tcp_keepalive_probes就得到對於從開始探測以來沒有響應的連接殺除的時間。默認值爲75秒,也就是沒有活動的連接將在大約11分鐘以後將被丟棄。(對於普通應用來說,這個值有一些偏大,可以根據需要改小.特別是web類服務器需要改小該值,15是個比較合適的值)
        3、調整內核參數,使之可支持更多的listen隊列和syn隊列
net.ipv4.tcp_max_syn_backlog =1024
net.core.somaxconn = 128
參數說明:
net.ipv4.tcp_max_syn_backlog:
    syn的消息隊列長度,使系統可以處理更多的併發連接
當服務器負載繁重或者是有很多客戶端都是超長延時的連接故障,可能會導致half-open連接數量的增加。這對於Web服務器很來講很平常,尤其有很多撥號客戶時.這些half-open連接保存在 backlog connections 隊列中.將這個值最少設置爲8192 (缺省爲1024). 即便是服務器不接收這類連接,設置這個值還能防止受到denial-of-service (syn-flood)的***
net.core.somaxconn:
這個參數會影響到所有AF_INET類型socket的listen隊列,在高突發的請求中可能會導致鏈接超時或者觸發重傳。
  
        4、調整內核參數增大socket的緩衝區,其中有衝突默認值以tcp自己的爲準;最大值衝突時,以net.core.mem_max爲準
net.core.wmem_default = 2097152 #108544,系統套接字緩衝區
net.core.rmem_default = 2097152 #108544,系統套接字緩衝區
net.core.rmem_max=16777216   #131071,系統套接字緩衝區
net.core.wmem_max=16777216 #131071,系統套接字緩衝區
net.ipv4.tcp_rmem=4096 87380 16777216  #4096   87380   174760, TCP接收緩衝區
net.ipv4.tcp_wmem=4096 65536 16777216 #4096  16384   131072, TCP發送緩衝區
net.ipv4.tcp_mem = 786432 1048576 1572864 # Out of socket memory。以page爲單位

    基於cpu的考慮
       1、因爲每個訪問都會產生一個進程,會對cpu的load造成負擔,因此需要調整apache的最大允許的進程數。apache配置文件的prefork。
       2、可以隔離一個cpu處理,將apache進程綁定在單獨的cpu上:
先查看隔離自己的第二顆cpu在 /boot/grup/grup.conf 中添加lsolcpus=1;重啓之後,將apache綁 定在第二顆cpu上taskset2 /etc/init.d /httpd  restart
       3、如果cpu的load一直很高,就應該考慮做分發了。

    基於內存的考慮
       1、apache有很多的模塊,如果這些模塊都加載進來的話,會造成許多內存的浪費,因爲有很多不用的模塊。所以要去掉不用的模塊。
       2、apache的進程數,socket套接字的數量,syn隊列的長度,listen隊列的長度,都會消耗內存,因此這些值的設定,要考慮內存

    基於I/0的考慮
       1、可以將apache服務單獨掛在一個獨立的磁盤系統上,該磁盤系統可以用多個IO同時讀寫,比如lvm -i ,或者是raid 0。
       2、掛在apache時可以取消寫atime的功能。
       3、apache的日誌功能,可以使之寫入獨立的日誌服務器上,減少對本機的io壓力。如果寫入本機,可以參考上面的1,寫入獨立的磁盤系統中。
       4、在BI/O層使用deadline算法,減少相應的速度。
       5、可以在內存中開闢出獨立的空間,當硬盤來使用,以後數據處理時都可以直接寫到這裏來,增加了io速度。最好將靜態頁面放在這裏。
        mkdir -pv /tmp/mm
        mount -o size=500M -t tmpfs none /tmp/mm 
       500M 內存到這個目下,以後在對數據處理時,就相當於往內存中寫,而這些數據不會因清空緩存而數據丟失,而是相當於做了一個預熱(保證數據都在內存中,把內存當作硬盤來用)


    其他的一些考慮
       1、apache要開啓keepalive模式,減少連接的次數。
       2、但是每增加一個連接,就會使用一個文件描述符,因此需要增加文件描述符的數量

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章