當(dāng)出現(xiàn)網(wǎng)站慢的時(shí)候我們腦子中要映出幾點(diǎn)原因:
1.程序代碼執(zhí)行方面
2.大量數(shù)據(jù)庫操作
3.域名dns解析問題
4.服務(wù)器環(huán)境
我也是這么解決的,下面說下解決中的步驟吧。
1.打開訪問慢的網(wǎng)站觀察下情況,通過火狐的fixfox 插件 或者 ie的元素查看工具,你網(wǎng)站里面加載的信息會(huì)一覽無遺的展現(xiàn)出來,并且那些元素加載耗時(shí)多少秒等等情況,如何解決能,把遠(yuǎn)程耗時(shí)久的js下載到本地,或者直接刪除。
2. 我看了下頁面中有多處連接數(shù)據(jù)庫操作的地方,并且有遠(yuǎn)程的數(shù)據(jù)庫操作,并且還有多余的數(shù)據(jù)庫連接代碼,話不多說,改之.
解決完了發(fā)現(xiàn)的確是快點(diǎn)了,但是還是不理想,于是我把頁面執(zhí)行數(shù)據(jù)庫代碼放到了數(shù)據(jù)庫中執(zhí)行沒有耗慢的情況。
3. 關(guān)于域名dns的情況只是其中一種情況,不要急著找域名商的問題,你可以寫個(gè)沒有數(shù)據(jù)操作的頁面放在同臺(tái)服務(wù)器域名下,看看是不是訪問同樣慢,如果是才有可能,你還要讓你周圍的人也看看,最好別是你同公司的人。
4. 我來看看服務(wù)器的情況吧,是不是cpu使用率過高造成的呢。
a. top 發(fā)現(xiàn)cpu使用也不高啊,30% 左右,但是發(fā)現(xiàn)一個(gè)問題,sleeping 的進(jìn)程數(shù)比較多。擦,最好別是僵尸進(jìn)程,現(xiàn)在這樣的東西不多了。
b. 查看了下timewait的量: 發(fā)現(xiàn)有mysqld 和 httpd 的,大部分來自于 httpd ; 命令 netstat -ae|grep time_wait
如何來解決timewait的量問題呢?
time_wait解決辦法:
vi /etc/sysctl.conf
編輯文件,加入以下內(nèi)容:
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 保持連接的時(shí)間
net.ipv4.tcp_max_tw_buckets = 100 這個(gè)是設(shè)置服務(wù)器同時(shí)保持的time_wait的數(shù)目
然后執(zhí)行 /sbin/sysctl -p 讓參數(shù)生效。
設(shè)置apache 的配置文件:
timeout 10 與客戶端連接超時(shí)的時(shí)間
keepalive on 一次連接可以多次傳輸,使的一次連接中可以傳遞多個(gè)http請(qǐng)求
maxkeepaliverequests 50 設(shè)置一次連接內(nèi),可以進(jìn)行多少次請(qǐng)求
keepalivetimeout 15 如果服務(wù)器已經(jīng)完成了一次請(qǐng)求,多長時(shí)間一直沒有接受到下一次請(qǐng)求就會(huì)斷開連接
保存重啟apache
設(shè)置完已上的操作后:
netstat -n |awk '/^tcp/{++s[$nf]}end{for (i in s ) print i,s[i]}'
你會(huì)發(fā)現(xiàn)非常成功。
如果還不夠滿意可以 再設(shè)置下ulimit參數(shù)
cat /etc/security/limits.confeof
* soft nofile 655350
* hard nofile 655350
eof
然后ulimit -shn 了 讓生效。
ok,當(dāng)你再查看的時(shí)候 已經(jīng)發(fā)現(xiàn)比較成功了。
如你發(fā)現(xiàn)mysqld 比較多的話,你可以優(yōu)化下mysql的性能: 見 mysql 性能調(diào)優(yōu)
好,已上都做完了,查看了先time_wait 發(fā)現(xiàn)有很多 百度機(jī)器人作怪挺嚴(yán)重的。 netstat -agn
最后只能忍痛割愛,暫時(shí)把百度蜘蛛在 robots.txt 屏蔽下,這只是暫時(shí)的解決方案。
接下來只能趕緊把首頁做成純靜態(tài)的,mygod。 到這里就完了。
2025國考·省考課程試聽報(bào)名