


apache使用技巧
可以理解為web服務(wù)器是一條高速公路,如果出現(xiàn)讓每一條車道都足夠?qū)挘敲聪牧撕芏嗟穆访尜Y源,能跑的車就少了。同樣web服務(wù)器也是這樣,不是所有的配置調(diào)整的越大越好,一般php+mysql+apache的架構(gòu),因為老碰到mysql連接數(shù)滿的問題,所以把mysql連接數(shù)設(shè)置的非常高,同時加大mysql cache結(jié)果導(dǎo)致負(fù)載很高的時候,內(nèi)存被大量消耗導(dǎo)致服務(wù)器頻繁死機(jī)。
后來檢查了下程序,發(fā)現(xiàn)mysql連接數(shù)過高是由于程序編寫不合理造成了,調(diào)整了下,服務(wù)器連接數(shù)就下來了:很多人可能跟我一樣寫php數(shù)據(jù)庫查詢完以后沒有立即關(guān)閉數(shù)據(jù)庫的習(xí)慣,讓進(jìn)程終止后系統(tǒng)自動回收打開的數(shù)據(jù)連接,但是如果系統(tǒng)非常慢的時候,執(zhí)行一個php需要花費(fèi)非常長是時間,那么導(dǎo)致mysql數(shù)據(jù)庫一直保持著,導(dǎo)致連接數(shù)非常高,這樣數(shù)據(jù)庫消耗大量的內(nèi)存,導(dǎo)致系統(tǒng)頻繁使用swap,導(dǎo)致系統(tǒng)更加慢,然后惡性循環(huán),最終服務(wù)器發(fā)生菪機(jī)。一個原則:在需要數(shù)據(jù)庫的時候才打開數(shù)據(jù)庫連接,一旦數(shù)據(jù)讀取完成,立即關(guān)閉數(shù)據(jù)庫。另外mysql cache的大小也不應(yīng)該設(shè)置太大,應(yīng)該經(jīng)常使用show status命令察看下mysql的情況,按照實際需求配置mysql相關(guān)的chache 和最大連接數(shù)。
檢測Mysql的性能可以通過 select benchmark(100000,sql語句) 來檢查mysql運(yùn)行100000那個sql語句需要的時間。
你可以可以通過 SELECT * FROM 表名 PROCEDURE ANALYSE ( ) 來分析各個子段類型大小是否設(shè)置合適
二、研究是web的限制和系統(tǒng)本身的限制
linux 內(nèi)核對打開的文件數(shù)一些有限制,一般可以通過ulimit -a 察看,/proc目錄下有一些相關(guān)的最大值的控制,當(dāng)服務(wù)器出現(xiàn)菪機(jī)的時候,一定要分析一下/var/log/message目錄下的文件,機(jī)器菪機(jī)前系統(tǒng)報了什么錯誤。如果機(jī)器還能操作你可以使用命令dmesg看看內(nèi)核當(dāng)時出現(xiàn)了那些錯誤
如果是內(nèi)核的限制看下http://shika.aist-nara.ac.jp/member/atsush-m/doc/kernel_tune.html重新編譯下內(nèi)核,看這篇文章的時候注意一點(diǎn)這份文檔居然沒讓你改大include/linux/fs.h NR_FILE,需要將NR_FILE設(shè)置成INR_OPEN的三倍大小,千萬不要小于INR_OPEN,光光打開apache的 HARD_SERVER_LIMIT 是不夠的。
檢測打開的文件數(shù)是否夠用可以運(yùn)行下 more /proc/sys/fs/file-nr ,第一個值是系統(tǒng)已經(jīng)分配的句柄數(shù)(你可以理解為系統(tǒng)打開最大的句柄數(shù)),第二個值是系統(tǒng)當(dāng)前使用句柄數(shù),第三個值是系統(tǒng)允許打開得句柄數(shù),如果第一個值等于第三個值你需要考慮是否需要增加系統(tǒng)打開的句柄數(shù),一方面你可以echo 一個比較大的值到 /proc/sys/fs/file-max,但是內(nèi)核編譯的時候決定了系統(tǒng)最大的文件數(shù),這個值超過內(nèi)核編譯時候設(shè)置的內(nèi)核數(shù)就需要重新編譯內(nèi)核來支持。
如果機(jī)器有一定的內(nèi)存,可以把bdflush的值設(shè)大,類似這樣
echo "100 128 128 512 5000 3000 60 0 0">/proc/sys/vm/bdflush
希望長期有效的話可以配放在rc.local下
這個值具體什么意思可以運(yùn)行 update -d 看下具體的解釋
另外如果你懷疑有Dos攻擊的話,可以運(yùn)行
netstat -an | grep -i "服務(wù)器ip地址:80" | awk ''{print }'' | sort | uniq -c | sort -n
這個命令會自動統(tǒng)計Tcp連接各個狀態(tài)的數(shù)量,如果SYN_RECV很高的話(我的機(jī)器出現(xiàn)過給人建立了4000個SYN_RECV的事情。。。),就不能排除有基于tcp協(xié)議的ddos攻擊的可能
這樣的話,你需要打開tcp_syncookies
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
如果沒有 /proc/sys/net/ipv4/tcp_syncookies說明你的內(nèi)核不支持syncookies,需要重新編譯內(nèi)核
同時
降低syn重試次數(shù)
echo "1" > /proc/sys/net/ipv4/tcp_syn_retries
echo "1" > /proc/sys/net/ipv4/tcp_synack_retries
加大syn_backlog,以保證用戶的訪問(消耗內(nèi)存為代價,設(shè)的太高。。)
echo "2048" > /proc/sys/net/ipv4/tcp_max_syn_backlog
如果還是不行,那么只能交給相應(yīng)的硬件防火墻了
如果機(jī)器是用來做虛擬主機(jī)的話,如果有很多行
。。。。。。
這樣的東東的話(我看見過一個人配了1000個不同的域名在一個機(jī)器里面,佩服他的耐心)可以考慮使用mod_rewrite方式來做,可以通過增加一個rewrite規(guī)則到apache里面,實現(xiàn)域名對應(yīng)自動對應(yīng)某個目錄
三、不要太迷信一些第三方的加速軟件
相信很多人在服務(wù)器負(fù)載較高的時候使用mod_limitipconn,mmcache等做服務(wù)器的加速,但是mod_limitipconn需要打開 ExtendedStatus,反而會導(dǎo)致服務(wù)器性能下降,同樣由于自身程序?qū)懙貌粔蛞?guī)范也可能導(dǎo)致mmcache這樣的php加速軟件使用的時候發(fā)生一些問題。
如果條件許可,盡量建立cms系統(tǒng)讓動態(tài)的葉面以靜態(tài)的葉面顯示
以下是一個web服務(wù)系統(tǒng)檢測的程序,5秒檢查一次服務(wù)器負(fù)載,如果loadavg超過50系統(tǒng)自動重起apache
關(guān)鍵字:apache 使用技巧
新文章:
- CentOS7下圖形配置網(wǎng)絡(luò)的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統(tǒng)后丟失windows啟動項
- CentOS單網(wǎng)卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網(wǎng)打印機(jī)IP講解
- CentOS7使用hostapd實現(xiàn)無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網(wǎng)絡(luò)重啟出錯
- 解決Centos7雙系統(tǒng)后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統(tǒng)有什么不同呢
- Centos 6.6默認(rèn)iptable規(guī)則詳解