一般解決的辦法有:
1、選用好的框架,有緩存機制,這樣節省訪問次數
2、優化代碼,注意編寫訪問資料庫的語句,一些效率低的函數
最好不要或者減少使用
3、把能用存儲過程
觸發器之類資料庫自己能完成的功能
交給資料庫自己來處理,這樣最快
4、提高伺服器的配置,甚至做資料庫集群
❷ 內網訪問WEB伺服器很慢,外網訪問時正常,這是什麼原因
這個可能是內網有洪水包攻擊,訪問量過大伺服器網卡吃不了這么多數據。還有內網ARP病毒攻擊的話也會出現這個情況,不知道你的網路是不是免疫網路,用了免疫網路解決方案沒,沒用趕緊用免疫網路解決方案。 部署免疫網路網路解決方案簡單的很,對網路也不需要做大的改動。
❸ 如何優化web伺服器的訪問速度
網站運營的任何時期,網站訪問速度都是至關重要的部分,它是網站友好體驗中最基本的一項,如果訪問體驗都令人不滿意,那麼後期所做的營銷推廣模式都有可能徒勞無功,因為網路中客戶的選擇成本很低,加上普遍客戶的耐心都不高,頁面訪問超過6秒客戶就會選擇離開,這對於一些流量本來就不高的企業網站來說無疑是雪上加霜。
一、升級正在使用中的伺服器
進行伺服器升級工作之前,要考慮多方面的問題,是升級已有的伺服器還是購置新的伺服器設備須根據實際情況抉擇。首先來說升級現有的伺服器設備,一般來說網站運營到後期隨著業務不斷增加,多平台應用的開發對於伺服器性能的要求也逐步提升,長而久之伺服器遇到性能瓶頸也是情理之中的事情,對於這種情況,我們可以通過升級伺服器(例如增加硬體設備或網路帶寬)等相關配置來滿足不斷擴大的業務需求,那麼伺服器性能瓶頸問題就可以得到解決。
二、優化正在使用的伺服器
不管是完成升級後的伺服器,還是新購置的伺服器,我們都要對其進行優化,從而提升伺服器的性能以及利用率。如何優化伺服器?作為在國互網工作到現在的資深IDC工作人員,小編認為大概分為以下四個方面
要點一:盡可能的減少HTTP請求數
從客戶訪問網站頁面到整個頁面內容完全展現出來,這其中要花費較多的時間來下載各種Scripts、CSS樣式表、Flash以及圖片,而每一類下載都相當於一次HTTP請求,這樣的請求越多網站被完全載入出來所花的時間會越長,意味著客戶端的訪問會很慢,那麼此時就需要盡可能的減少HTTP請求數,通常我們可以直接把css和js寫入到頁面中,避免了外部的調用;或者我們可以把CSS文件和JS文件分來,在後台再進行合並,這樣客戶端瀏覽器相當於一次請求。這是小編在國互網美女前端那學來的。
要點二:降低DNS查詢時間
眾所周知網路伺服器端的域名和IP地址是相互對應的,當客戶端發出請求時,計算機還需要通過域名和IP地址的相互轉換來判斷,而這個轉換工作便是域名解析DNS,通常DNS的查詢需要10~20毫秒時間,客戶端瀏覽器也只會等待DNS查詢結束之後才會載入此域名下的內容。因此,我們要加快頁面的訪問速度,就可以從降低DNS查詢時間方面去做改善。
要點三:啟用伺服器Gzip壓縮功能
對於大中型網站來說,頁面的內容多且比較多樣化,單個頁面的大小可能是幾百K以上了,客戶端訪問的時候下載會比較慢,此時我們可以採用伺服器Gzip頁面壓縮功能,可以將一個大小為100K的頁面文件壓縮成25K以下,這樣就可以減少網路傳輸的數量從而提高客戶端訪問速度。一般伺服器都是可以使用Gzip壓縮功能的,並且能夠針對JS文件、CSS文件和Html進行壓縮,多方面去進行優化網站訪問速度。
要點四:推薦大中型網站使用CDN加速工具
CDN加速是目前大型網站普遍使用的頁面加速方式,它對於網站優化幾乎沒有影響的,基本原理是將網站鏡像備份到很多伺服器節點上,使伺服器節點周圍的用戶訪問速度更快,從而提升客戶端高速訪問網站的體驗;但是並不是所有的網站都適合使用CDN加速,一般對於小規模站點個人站的話,就不需要使用CDN加速,畢竟從長期來看這可是一筆不小的開支;建議圖片站以及多媒體站點可使用CDN加速。
希望以上知識能夠幫到您
❹ WEB伺服器訪問速度慢
你檢查一下你的CPU是不是正常的。CPU是百分百那麼兩可能。硬體故障。或程序有問題造成CPU百分百。如果CPU是正常的。那麼不用說了。帶寬不足了。
❺ web伺服器連上,整個網路就變慢,web伺服器斷開,公司網路就好了,這是則么回事呀
你所說的web伺服器,是內部網路吧,你把它接到路由上去試試,
❻ web伺服器訪問緩慢,作為運維人員,如何定位故障
遇到伺服器故障,問題出現的原因很少可以一下就想到。我們基本上都會從以下步驟入手:
一、盡可能搞清楚問題的前因後果
不要一下子就扎到伺服器前面,你需要先搞明白對這台伺服器有多少已知的情況,還有故障的具體情況。不然你很可能就是在無的放矢。
必須搞清楚的問題有:
故障的表現是什麼?無響應?報錯?
故障是什麼時候發現的?
故障是否可重現?
有沒有出現的規律(比如每小時出現一次)
最後一次對整個平台進行更新的內容是什麼(代碼、伺服器等)?
故障影響的特定用戶群是什麼樣的(已登錄的, 退出的, 某個地域的…)?
基礎架構(物理的、邏輯的)的文檔是否能找到?
是否有監控平台可用? (比如Munin、Zabbix、 Nagios、 New Relic…
什麼都可以)
是否有日誌可以查看?. (比如Loggly、Airbrake、 Graylog…)
最後兩個是最方便的信息來源,不過別抱太大希望,基本上它們都不會有。只能再繼續摸索了。
二、有誰在?
代碼如下:
$ w
$ last
用這兩個命令看看都有誰在線,有哪些用戶訪問過。這不是什麼關鍵步驟,不過最好別在其他用戶正幹活的時候來調試系統。有道是一山不容二虎嘛。(ne cook in
the kitchen is enough.)
三、之前發生了什麼?
$
history查看一下之前伺服器上執行過的命令。看一下總是沒錯的,加上前面看的誰登錄過的信息,應該有點用。另外作為admin要注意,不要利用自己的許可權去侵犯別人的隱私哦。
到這里先提醒一下,等會你可能會需要更新 HISTTIMEFORMAT
環境變數來顯示這些命令被執行的時間。對要不然光看到一堆不知道啥時候執行的命令,同樣會令人抓狂的。
四、現在在運行的進程是啥?
代碼如下:
$ pstree -a
$ ps aux
這都是查看現有進程的。 ps aux 的結果比較雜亂, pstree -a 的結果比較簡單明了,可以看到正在運行的進程及相關用戶。
五、監聽的網路服務
代碼如下:
$ netstat -ntlp
$ netstat -nulp
$
netstat -nxlp
我一般都分開運行這三個命令,不想一下子看到列出一大堆所有的服務。netstat -nalp倒也可以。不過我絕不會用 numeric 選項
(鄙人一點淺薄的看法:IP 地址看起來更方便)。
找到所有正在運行的服務,檢查它們是否應該運行。查看各個監聽埠。在netstat顯示的服務列表中的PID 和 ps aux 進程列表中的是一樣的。
如果伺服器上有好幾個Java或者Erlang什麼的進程在同時運行,能夠按PID分別找到每個進程就很重要了。
通常我們建議每台伺服器上運行的服務少一點,必要時可以增加伺服器。如果你看到一台伺服器上有三四十個監聽埠開著,那還是做個記錄,回頭有空的時候清理一下,重新組織一下伺服器。
六、CPU 和內存
代碼如下:
$ free -m
$ uptime
$ top
$
htop
注意以下問題:
還有空餘的內存嗎? 伺服器是否正在內存和硬碟之間進行swap?
還有剩餘的CPU嗎? 伺服器是幾核的? 是否有某些CPU核負載過多了?
伺服器最大的負載來自什麼地方? 平均負載是多少?
七、硬體
代碼如下:
$ lspci
$ dmidecode
$
ethtool
有很多伺服器還是裸機狀態,可以看一下:
找到RAID 卡 (是否帶BBU備用電池?)、 CPU、空餘的內存插槽。根據這些情況可以大致了解硬體問題的來源和性能改進的辦法。
網卡是否設置好?
是否正運行在半雙工狀態? 速度是10MBps? 有沒有 TX/RX 報錯?
八、IO 性能
代碼如下:
$ iostat -kx 2
$ vmstat 2 10
$ mpstat
2 10
$ dstat --top-io --top-bio
這些命令對於調試後端性能非常有用。
檢查磁碟使用量:伺服器硬碟是否已滿?
是否開啟了swap交換模式 (si/so)?
CPU被誰佔用:系統進程? 用戶進程? 虛擬機?
dstat 是我的最愛。用它可以看到誰在進行 IO: 是不是Mysql吃掉了所有的系統資源? 還是你的PHP進程?
九、掛載點 和 文件系統
代碼如下:
$ mount
$ cat /etc/fstab
$ vgs
$
pvs
$ lvs
$ df -h
$ lsof +D / /* beware not to kill your box
*/
一共掛載了多少文件系統?
有沒有某個服務專用的文件系統? (比如MySQL?)
文件系統的掛載選項是什麼: noatime?
default? 有沒有文件系統被重新掛載為只讀模式了?
磁碟空間是否還有剩餘?
是否有大文件被刪除但沒有清空?
如果磁碟空間有問題,你是否還有空間來擴展一個分區?
十、內核、中斷和網路
代碼如下:
$ sysctl -a | grep ...
$ cat
/proc/interrupts
$ cat /proc/net/ip_conntrack /* may take some time on busy
servers */
$ netstat
$ ss -s
你的中斷請求是否是均衡地分配給CPU處理,還是會有某個CPU的核因為大量的網路中斷請求或者RAID請求而過載了?
SWAP交換的設置是什麼?對於工作站來說swappinness 設為 60 就很好,
不過對於伺服器就太糟了:你最好永遠不要讓伺服器做SWAP交換,不然對磁碟的讀寫會鎖死SWAP進程。
conntrack_max 是否設的足夠大,能應付你伺服器的流量?
在不同狀態下(TIME_WAIT, …)TCP連接時間的設置是怎樣的?
如果要顯示所有存在的連接,netstat 會比較慢, 你可以先用 ss 看一下總體情況。
你還可以看一下 Linux TCP tuning
了解網路性能調優的一些要點。
十一、系統日誌和內核消息
代碼如下:
$ dmesg
$ less /var/log/messages
$
less /var/log/secure
$ less /var/log/auth
查看錯誤和警告消息,比如看看是不是很多關於連接數過多導致?
看看是否有硬體錯誤或文件系統錯誤?
分析是否能將這些錯誤事件和前面發現的疑點進行時間上的比對。
十二、定時任務
代碼如下:
$ ls /etc/cron* + cat
$ for user in
$(cat /etc/passwd | cut -f1 -d:); do crontab -l -u $user; done
是否有某個定時任務運行過於頻繁?
是否有些用戶提交了隱藏的定時任務?
在出現故障的時候,是否正好有某個備份任務在執行?
十三、應用系統日誌
這里邊可分析的東西就多了,
不過恐怕你作為運維人員是沒功夫去仔細研究它的。關注那些明顯的問題,比如在一個典型的LAMP(Linux+Apache+Mysql+Perl)應用環境里:
Apache & Nginx; 查找訪問和錯誤日誌, 直接找 5xx 錯誤, 再看看是否有 limit_zone 錯誤。
MySQL;
在mysql.log找錯誤消息,看看有沒有結構損壞的表, 是否有innodb修復進程在運行,是否有disk/index/query 問題.
PHP-FPM; 如果設定了 php-slow 日誌, 直接找錯誤信息 (php, mysql, memcache, …),如果沒設定,趕緊設定。
Varnish; 在varnishlog 和 varnishstat 里, 檢查 hit/miss比.
看看配置信息里是否遺漏了什麼規則,使最終用戶可以直接攻擊你的後端?
HA-Proxy;
後端的狀況如何?健康狀況檢查是否成功?是前端還是後端的隊列大小達到最大值了?
結論
經過這5分鍾之後,你應該對如下情況比較清楚了:
在伺服器上運行的都是些啥?
這個故障看起來是和 IO/硬體/網路 或者 系統配置 (有問題的代碼、系統內核調優, …)相關。
這個故障是否有你熟悉的一些特徵?比如對資料庫索引使用不當,或者太多的apache後台進程。
你甚至有可能找到真正的故障源頭。就算還沒有找到,搞清楚了上面這些情況之後,你現在也具備了深挖下去的條件。繼續努力吧!
❼ web編程中頁面載入過慢是什麼原因引起的
內容多。
使用了大的控制項。
代碼未優化。
網路問題。
等等。
❽ 為什麼微軟的網站訪問速度都這么慢
聯通、電信、移動,不管哪家寬頻運營商速度都比較的慢是無法控制的。onedrive的伺服器在國外,所以同步過程比較慢是正常的。
要優化Web伺服器的性能,我們先來看看Web伺服器在web頁面處理上的步驟:Web瀏覽器向一個特定的伺服器發出Web頁面請求;Web伺服器接收到web頁面請求後,尋找所請求的web頁面。
並將所請求的Web頁面傳送給Web瀏覽器;Web瀏覽器接收到所請求的web頁面內容,並將它顯示出來。上面三個步驟都關系Web伺服器,但實際Web伺服器性能相關最大的是在第2步,這里Web伺服器需要尋找來自瀏覽器所請求的Web頁面內容。
我們知道,Web頁面內容有靜態的,也有動態的,靜態的內容,web伺服器可以直接將結果發回給瀏覽器,對於動態內容,則通常需要交給應用伺服器先處理,由應用伺服器返回結果。當然,也有Web伺服器本身可以處理動態內容的。
例如IIS就可以自已解釋處理ASP,ASP.NET這兩種微軟的動態網頁腳本語言。從上面簡要的分析里,我們大致可以得到這樣的結論,影響Web頁面訪問的影響因素會有這幾個:Web伺服器從磁碟中讀取靜態頁面內容的速度。
也即時間;Web伺服器判定請求內容是靜態還是動態內容的時間;Web伺服器轉發請求給應用伺服器的時間;應用伺服器處理(解釋)動態內容所需的時間;Web伺服器返回Web內容給瀏覽器的響應時間。
Web伺服器接收來自瀏覽器請求的處理性能;Web訪問請求數據在網路上傳輸的時間:包括從瀏覽器到伺服器,和從伺服器到瀏覽器兩部分;瀏覽器本地計算和渲染Web內容的時間,即接收內容後展現內容的時間。
上面8項很容易理解,也很直接,其實還有以下幾項也是關乎Web頁面訪問速度體驗的因素,你可以思考下是否如此?或者說是否會影響到頁面訪問性能。
❾ 如何提高web系統的訪問速度
在ASP中優化資料庫處理
ASP是一個WEB伺服器端的開發環境,它提供了一種簡單易學的腳本(VBScript或Jscript),並帶有許多內置的對象,從而提供了一條簡捷的編程之路。更為重要的是,ASP中提供了ADO對象,讓程序員可以輕松操作各種資料庫,從而可以產生和運行動態的、交互的WEB服務應用程序。目前,國內很多電子商務站點都採用了ASP技術來與資料庫交互,為用戶提供各類服務。
由於電子商務站點的大部分信息都存放在資料庫中,要提高WEB的響應速度,建立高性能的電子商務站點,很大一部分取決於ASP與資料庫之間的處理性能。因此,在ASP編寫時,要注意資料庫處理方法。
1、 使用Connection pool機制
在資料庫處理中,資源花銷最大的是建立資料庫連接,而且用戶還會有一個較長的連接等待時間。若每一個用戶訪問時,都重新建立連接,不僅用戶要長時間等待,而且系統有可能會由於資源消耗過大而停止響應。如果能夠重用以前建立的資料庫連接,而不是每次訪問時都重新建立連接,則可以很好地解決這些問題,從而提高整個系統的性能。在IIS+ASP處理體系中,採用了Connection pool機制來保證這一點。
Connection pool的原理是,IIS+ASP體系中維持了一個連接緩沖池,建立好的資料庫連接在ASP程序中的斷開都是邏輯斷開,而實際的物理連接被存儲在池中並被維護。這樣,當下一個用戶訪問時,直接從連接緩沖池中取得一個資料庫連接,而不需重新連接資料庫,因此,可以大大地提高系統的響應速度。
為了正確使用Connection pool時,必須注意以下幾點:
a). 在MDAC2.0以前的版本中,必須經過資料庫驅動程序的配置才能使用Connection Pool;在以後的版本中(比如MDAC2.1),預設是使用Connection Pool機制。具體配置情況可以參見微軟公司的站點(http://www.microsoft.com/data/)。
順便提一句,在使用ORACLE資料庫時,最好使用微軟提供的驅動程序。
b). 每次資料庫連接串參數必須相同,否則會被認為是不同的連接而重新去連接資料庫,而不是使用緩沖池中的連接。最好的做法是將連接串存儲在Application變數中,所有的程序在建立連接時使用Application變數的值。
c). 為了更好地使用和維護連接緩沖池,建議在程序中使用以下的方法對資料庫連接進行操作,因為隱式使用資料庫連接時不能利用緩沖池的機制:
¨ 顯示地創建連接對象: Set conn=Server.CreateObject(「Adodb.connection」)
¨ 建立資料庫連接:conn.open Application(「connection_string」),…
¨ 進行資料庫操作:…
¨ 顯式地關閉連接對象:conn.close
2、 利用直接的Ole DB驅動程序
在Asp中,通過ADO可以使用兩種方式連接資料庫,一種是傳統的ODBC方式,一種是Ole DB方式。由於ADO是建立在Ole DB技術上的,為了支持ODBC,必須建立相應的Ole DB 到ODBC的調用轉換(如MS Oledb provider for ODBC)。而使用直接的Ole DB方式(如MS Oledb provider for Sql, Oracle),則不需轉換,從而提高處理速度,同時,還能利用Ole DB的新特性。
3、 在內存中緩存ADO對象或其內容
通常,在ASP程序中,都會涉及到一些存儲在資料庫中的常用信息,如省份列表,商品分類等,這些信息對於每一個訪問用戶都是相同的。若每一個用戶訪問時,都要去資料庫里取出來,然後顯示給用戶,不僅會使資料庫伺服器負載加重,無法快速服務於更重要的事務處理,而且WEB伺服器也必須不停地創建ADO對象,消耗大量資源,導致了當用戶很多時幾乎失去響應。若能把一些常用信息事先存儲在內存中,當用戶訪問時,直接從內存中取出,顯示給用戶,則可以大大減小系統的壓力,提高響應速度。
比如,我們可以把已經取得了數據的RecordSet對象存儲在Application變數中,當用戶訪問時,從Application變數中取得RecordSet對象,而不需再次建立資料庫連接;也可以將RecordSet對象里的數據以其他方式存儲,比如存儲在數組中,然後再將數組存儲在Application變數中,使用時用數組的方式讀取。
需要注意的是,一個對象要存儲在Application變數中,線程模式必須是Both;對於不滿足該條件的對象,必須以其他方式,比如轉換成數組的方式存儲在Application變數中,這也是上面所說的將內容存儲在數組中的原因。
4、 使用數字序列
在Asp程序中,從諸如RecordSet中讀取數據時,為了方便,常使用資料庫列名的方式進行:
Response.write rs(「fieldnameN」)
而很少採用該資料庫列名所在的數字序列來讀取,即:
Response.write rs(N)
其實,為了從RecordSet得到列值,ADO必須將列名轉化為數字序列,因此,若直接使用數字序列,則可以提高讀取速度。若感覺使用數字序列,程序可讀性不直觀,可以採用建立常量的方法,定義:
const FIELDNAME1 1
5、 使用資料庫過程(procere)
在電子商務站點中,尤其是要進行交易的站點,為了完成交易,可能需要多次查詢大量的信息,用於判定是非,然後更新入庫。若在編寫Asp時,直接在一個程序中作多次資料庫操作,不僅IIS要創建很多ADO對象,消耗資源,而且加重了資料庫伺服器的負擔,增大了網路流量。若把多次資料庫操作流程定義為一個資料庫過程,用如下方式調用:
connection.execute 「{call procerename(..)}」
則可以利用資料庫的強大性能,大大減輕Web系統的壓力,而且由於頁面內容與業務分開,管理維護也變得方便。
6、 使用優化過的sql語句
對於電子商務網站,最主要的就是要保證,不論訪問用戶的多少,系統都要有足夠快的響應速度。由於在Asp技術中,ADO對象消耗的資源是非常大的,若一個sql語句要執行很長的一段時間,對整個資源也將一直佔用,使系統沒有足夠的資源服務於其它用戶。因此,盡量使用優化過的sql語句,減少執行時間。比如,不使用在in語句中包含子查詢的語句,充分利用索引。
7、 利用資料庫的特性
ADO是一套通用的對象控制項,本身沒有利用資料庫的任何特性。但若在Asp程序編寫時,有意識地考慮結合資料庫的特性,往往可以有很好的效果。
比如,Oracle資料庫伺服器對於執行過的sql語句,通常都經過了分析優化,並存儲在一個sql內存緩沖區中,當下次同樣的sql語句請求時,直接從內存緩沖區取出執行,不再進行分析優化,從而可以大幅度提高性能。這就要求在Asp程序編寫時,盡量使用相同的Sql語句,或者參數化的Sql語句:
Set cmd=Server.createobject(「adodb.command」)
cmd.CommandText=」select * from proct where proctcode=?」
8、 用時創建,用完釋放
在前面也提到過,ADO對象是非常消耗資源的,因此一定要牢牢記住,只在用到ADO對象時才創建,用完後馬上釋放:
set rs=Server.createobject(「adodb.recordset」)
….
rs.close
set rs=nothing
願您愉快地編程,讓人們享受社會信息化所帶來的好處。http://..com/question/5803448.html?fr=qrl3
❿ Web伺服器網頁打開很慢,該從哪方面查詢伺服器出了問題
首先想到的應該重啟一下服務,如果還是慢就要看一下伺服器CPU和內存的使用情況,再就是部署一個簡單的系統在同一web伺服器上,看運行如何,目的是排除一下是不是伺服器問題還是網站系統代碼問題,還有就是網站連接的資料庫等。