當出現網站慢的時候我們腦子中要映出幾點原因:
1.程序代碼執行方面
2.大量數據庫操作
3.域名DNS解析問題
4.服務器環境
我也是這么解決的,下面說下解決中的步驟吧。
1.打開訪問慢的網站觀察下情況,通過火狐的fixfox 插件 或者 IE的元素查看工具,你網站里面加載的信息會一覽無遺的展現出來,并且那些元素加載耗時多少秒等等情況,如何解決能,把遠程耗時久的js下載到本地,或者直接刪除。
2. 我看了下頁面中有多處連接數據庫操作的地方,并且有遠程的數據庫操作,并且還有多余的數據庫連接代碼,話不多說,改之.
解決完了發現的確是快點了,但是還是不理想,于是我把頁面執行數據庫代碼放到了數據庫中執行沒有耗慢的情況。
3. 關于域名DNS的情況只是其中一種情況,不要急著找域名商的問題,你可以寫個沒有數據操作的頁面放在同臺服務器域名下,看看是不是訪問同樣慢,如果是才有可能,你還要讓你周圍的人也看看,最好別是你同公司的人。
4. 我來看看服務器的情況吧,是不是CPU使用率過高造成的呢。
a. top 發現cpu使用也不高啊,30% 左右,但是發現一個問題,sleeping 的進程數比較多。擦,最好別是僵尸進程,現在這樣的東西不多了。
b. 查看了下timewait的量: 發現有mysqld 和 httpd 的,大部分來自于 httpd ; 命令 netstat -ae|grep TIME_WAIT
如何來解決timewait的量問題呢?
TIME_WAIT解決辦法:
vi /etc/sysctl.conf
編輯文件,加入以下內容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 30 保持連接的時間
net.ipv4.tcp_max_tw_buckets = 100 這個是設置服務器同時保持的time_wait的數目
然后執行 /sbin/sysctl -p 讓參數生效。
設置APACHE 的配置文件:
Timeout 10 與客戶端連接超時的時間
KeepAlive On 一次連接可以多次傳輸,使的一次連接中可以傳遞多個HTTP請求
MaxKeepAliveRequests 50 設置一次連接內,可以進行多少次請求
KeepAliveTimeout 15 如果服務器已經完成了一次請求,多長時間一直沒有接受到下一次請求就會斷開連接
保存重啟APACHE
設置完已上的操作后:
netstat -n |awk '/^tcp/{++S[$NF]}END{for (i in S ) print i,S[i]}'
你會發現非常成功。
如果還不夠滿意可以 再設置下Ulimit參數
cat /etc/security/limits.confEOF
* soft nofile 655350
* hard nofile 655350
EOF
然后ulimit -SHn 了 讓生效。
OK,當你再查看的時候 已經發現比較成功了。
如你發現mysqld 比較多的話,你可以優化下mysql的性能: 見 mysql 性能調優
好,已上都做完了,查看了先time_wait 發現有很多 百度機器人作怪挺嚴重的。 netstat -agn
最后只能忍痛割愛,暫時把百度蜘蛛在 robots.txt 屏蔽下,這只是暫時的解決方案。
接下來只能趕緊把首頁做成純靜態的,Mygod。 到這里就完了。
更多信息請查看IT技術專欄