首頁>Club>
想最佳化伺服器效能,怎麼操作?
14
回覆列表
  • 1 # 使用者23765399549

    在大資料雲計算相關領域的一些應用中,Spark可以用來加快資料處理速度。Spark的核心是RDD,RDD最早來源與Berkeley實驗室的一篇論文《Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing》。現有的資料流系統對兩種應用的處理並不高效:一是迭代式演算法,這在圖應用和機器學習領域很常見;二是互動式資料探勘工具。這兩種情況下,將資料儲存在記憶體中能夠極大地提高效能。

  • 2 # 裸奔的小鳥

    1.使用記憶體資料庫

    記憶體資料庫,其實就是將資料放在記憶體中直接操作的資料庫。相對於磁碟,記憶體的資料讀寫速度要高出幾個數量級,將資料儲存在記憶體中相比從磁碟上訪問能夠極大地提高應用的效能。記憶體資料庫拋棄了磁碟資料管理的傳統方式,基於全部資料都在記憶體中重新設計了體系結構,並且在資料快取、快速演算法、並行操作方面也進行了相應的改進,所以資料處理速度比傳統資料庫的資料處理速度要快很多。

    但是安全性的問題可以說是記憶體資料庫最大的硬傷。因為記憶體本身有掉電丟失的天然缺陷,因此我們在使用記憶體資料庫的時候,通常需要,提前對記憶體上的資料採取一些保護機制,比如備份,記錄日誌,熱備或叢集,與磁碟資料庫同步等方式。對於一些重要性不高但是又想要快速響應使用者請求的部分資料可以考慮記憶體資料庫來儲存,同時可以定期把資料固化到磁碟。

    2.使用RDD

    在大資料雲計算相關領域的一些應用中,Spark可以用來加快資料處理速度。Spark的核心是RDD,RDD最早來源與Berkeley實驗室的一篇論文《Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing》。現有的資料流系統對兩種應用的處理並不高效:一是迭代式演算法,這在圖應用和機器學習領域很常見;二是互動式資料探勘工具。這兩種情況下,將資料儲存在記憶體中能夠極大地提高效能。

    3.增加快取

    很多web應用是有大量的靜態內容,這些靜態內容主要都是一些小檔案,並且會被頻繁的讀,採用Apache以及nginx作為web伺服器。在web訪問量不大的時候,這兩個http伺服器可以說是非常的迅速和高效,如果負載量很大的時候,我們可以採用在前端搭建cache伺服器,將伺服器中的靜態資原始檔快取到作業系統記憶體中直接進行讀操作,因為直接從記憶體讀取資料的速度要遠大於從硬碟讀取。這個其實也是增加記憶體的成本來降低訪問磁碟帶來的時間消耗。

    4.使用SSD

    除了對記憶體方面的最佳化,還可以對磁碟這邊進行最佳化。跟傳統機械硬碟相比,固態硬碟具有快速讀寫、質量輕、能耗低以及體積小等特點。但是ssd的價格相比傳統機械硬碟要貴,有條件的可以使用ssd來代替機械硬碟。

    5.最佳化資料庫

    大部分的伺服器請求最終都是要落到資料庫中,隨著資料量的增加,資料庫的訪問速度也會越來越慢。想要提升請求處理速度,必須要對原來的單表進行動刀了。目前主流的Linux伺服器使用的資料庫要屬mysql了,如果我們使用mysql儲存的資料單個表的記錄達到千萬級別的話,查詢速度會很慢的。根據業務上合適的規則對資料庫進行分割槽分表,可以有效提高資料庫的訪問速度,提升伺服器的整體效能。另外對於業務上查詢請求,在建表的時候可以根據相關需求設定索引等,以提高查詢速度。

    6.選擇合適的IO模型

    IO模型又分為:

    (1).阻塞I/O模型:資料沒到達之前,I/O一直阻塞,如果資料到達,則會返回。典型的是recvfrom,一般的預設都是阻塞的。

    (2).非阻塞的I/O模型:和阻塞相反,只要不能得到結果的時候,I/O立刻返回。不會阻塞當前執行緒。

    IO複用模型:也就是自己要學習的部分。多路複用的意思是,將多路訊號合併到一路上進行處理,類似多個管道彙集到一個管道,與之相反的是多路分解。

    IO複用模型主要是select,poll,epoll;對一個IO埠,兩次呼叫,兩次返回,比阻塞IO並沒有什麼優越性;關鍵是能實現同時對多個IO埠進行監聽;函式也會使程序阻塞,但是和阻塞I/O所不同的的,這兩個函式可以同時阻塞多個I/O操作。而且可以同時對多個讀操作,多個寫操作的I/O函式進行檢測,直到有資料可讀或可寫時,才真正呼叫I/O操作函式。

    訊號驅動:首先開啟套介面訊號驅動I/O功能,並透過系統呼叫sigaction安裝一個訊號處理函式。當資料報準備好被讀時,就為該程序生成一個SIGIO訊號。隨即可以在訊號處理程式中呼叫recvfrom來讀資料報,井通知主迴圈資料已準備好被處理中。也可以通知主迴圈,讓它來讀資料報。

    非同步的IO模型:告知核心啟動某個操作,並讓核心在整個操作完成後(包括將資料從核心複製到使用者自己的緩衝區)通知我們。這裡並不是說一定要用某個模型,epoll也並不是在所有情況下都比select效能要好的,在選擇的時候還是要結合業務需求來。

    7.使用多核處理策略

    現在執行伺服器的主流機器配置都是多核CPU的,我們在設計伺服器的時候可以利用多核心的特點,採用多程序或者多執行緒的框架。關於選擇多執行緒還是多程序可以根據實際的需求,結合各自的優缺點進行選擇。對於多執行緒的使用,特別是使用執行緒池的時候可以透過測試不同執行緒池伺服器的效能來設定合適的執行緒池。

    8.分散式部署程式

    當單機伺服器已經找不到合適的最佳化點時,我們可以透過分散式部署來提高伺服器的響應能力。優秀的伺服器開發都會為自己的伺服器的擴容,容災提出一些解決方案。個人覺得伺服器設計的時候簡單點比較好,這樣後期擴容的時候會很方便。

  • 3 # Java猿

    最佳化哪種伺服器的效能,是應用伺服器,還是資料庫。可以從一下幾個方面

    1,執行緒數,連線數,開啟檔案數

    2,最佳化記憶體分配,cpu分配

    3,網路最佳化

  • 4 # 壓力很大同志

    首先是要做好待最佳化專案的profile,先對各方面效能做好基準評估,找到瓶頸,才能對症下藥。

    伺服器效能包括四個基本指標,cpu佔用,記憶體佔用,網路效能,磁碟效能。相互之間又有牽制

    cpu的效能最佳化很簡單,首先是提升利用率,用多程序把每個核充分利用起來。在此基礎上,如果cpu佔用升高了,只需要擴充套件cpu核數(雲主機)或者更換新的cpu(物理主機)即可。

    記憶體最佳化最簡單,韓信點兵多多益善,但是相對來說記憶體比較貴,看錢包來最佳化,比如發現記憶體只佔了一半的話那麼可以先不著急升級。

    網路效能最佳化主要是兩個方面,一是對網路引數的微調,二是儘量用io非同步跑滿頻寬。引數最佳化最常見的就是提高fd的最大開啟數限制,一般系統初始設定都比較保守,比如1024左右,但是作為伺服器來使用是不夠的。 應用設計的時候用非同步io可以最大限度的利用現有頻寬,這個基礎上如果頻寬跑滿了造成瓶頸,要麼升級頻寬,要麼把耗頻寬大戶移除伺服器,比如圖片,檔案服務

    磁碟效能在系統設定上沒啥好動的,軟體上用好非同步io即可。非要覺得慢,要麼換ssd,要麼上raid(多塊磁碟頻寬合併)

    調優是個很細緻的工作,比如fd限制加大了會造成記憶體開銷也會變大,可能最佳化網路後記憶體也會告急,有可能加大了頻寬後,同時處理的請求也多了,原本富裕的cpu也會告急。所以夠寫一本書來慢慢說了

  • 5 # Argon科技

    1.使用記憶體資料庫

    記憶體資料庫,其實就是將資料放在記憶體中直接操作的資料庫。相對於磁碟,記憶體的資料讀寫速度要高出幾個數量級,將資料儲存在記憶體中相比從磁碟上訪問能夠極大地提高應用的效能。

    2.增加快取

    很多web應用是有大量的靜態內容,這些靜態內容主要都是一些小檔案,並且會被頻繁的讀,採用Apache以及nginx作為web伺服器。在web訪問量不大的時候,這兩個http伺服器可以說是非常的迅速和高效,如果負載量很大的時候,我們可以採用在前端搭建cache伺服器,將伺服器中的靜態資原始檔快取到作業系統記憶體中直接進行讀操作,因為直接從記憶體讀取資料的速度要遠大於從硬碟讀取。這個其實也是增加記憶體的成本來降低訪問磁碟帶來的時間消耗。

    3.使用SSD

    除了對記憶體方面的最佳化,還可以對磁碟這邊進行最佳化。跟傳統機械硬碟相比,固態硬碟具有快速讀寫、質量輕、能耗低以及體積小等特點。但是ssd的價格相比傳統機械硬碟要貴,有條件的可以使用ssd來代替機械硬碟。

    4.最佳化資料庫

    大部分的伺服器請求最終都是要落到資料庫中,隨著資料量的增加,資料庫的訪問速度也會越來越慢。想要提升請求處理速度,必須要對原來的單表進行動刀了。目前主流的Linux伺服器使用的資料庫要屬mysql了,如果我們使用mysql儲存的資料單個表的記錄達到千萬級別的話,查詢速度會很慢的。根據業務上合適的規則對資料庫進行分割槽分表,可以有效提高資料庫的訪問速度,提升伺服器的整體效能。另外對於業務上查詢請求,在建表的時候可以根據相關需求設定索引等,以提高查詢速度。

    5.使用多核處理策略

    現在執行伺服器的主流機器配置都是多核CPU的,我們在設計伺服器的時候可以利用多核心的特點,採用多程序或者多執行緒的框架。關於選擇多執行緒還是多程序可以根據實際的需求,結合各自的優缺點進行選擇。對於多執行緒的使用,特別是使用執行緒池的時候可以透過測試不同執行緒池伺服器的效能來設定合適的執行緒池。

    6.分散式部署程式

    當單機伺服器已經找不到合適的最佳化點時,我們可以透過分散式部署來提高伺服器的響應能力。優秀的伺服器開發都會為自己的伺服器的擴容,容災提出一些解決方案。個人覺得伺服器設計的時候簡單點比較好,這樣後期擴容的時候會很方便。

    在以上的分享關於這個問題的解答都是個人的意見與建議,我希望我分享的這個問題的解答能夠幫助到大家。

  • 6 # 網路圈

    我們知道,伺服器是用來提供各類服務的專業計算機,本質上和我們常規的電腦差不多,只不過它的配置更專業一些。不少人誤認為伺服器買來後佈署下伺服器環境就行了,其實不是這樣的,伺服器如果不進行一些最佳化設定,那效能也得不到最大化發揮。

    當你拿到伺服器後要進行哪些最佳化呢?大致可以從:伺服器硬體、系統設定、軟體環境最佳化三方面著手。

    伺服器硬體最佳化方案

    正常情況下伺服器硬體最佳化是在選購伺服器之前就定好,因為硬體最佳化起來是比較麻煩的。

    伺服器記憶體越大越好、CPU核心數越多越好;

    伺服器硬碟不要選擇機械硬碟,固態硬碟效能最好;如果預算有限,那建議是固態+機械硬碟組合使用,系統安裝在固態盤裡;

    關閉不必要的外設,如:光碟機、藍芽等。

    伺服器系統最佳化方案

    系統直接影響伺服器的效能及穩定性,首先要選擇合適的系統,然後再進行系統最佳化。

    Linux類系統性能和穩定性要優於Windows Server;

    系統一定要安裝64位的,不要選擇32位系統;

    Linux系統核心引數的最佳化,如:最大開啟檔案數限制、核心TCP引數等;

    如果使用的是雲伺服器,則可以關閉伺服器上的預設防火牆,改用雲計算平臺提供的線上防火牆;

    關閉不必要的系統服務,如:列印服務;

    精簡開機啟動服務等。

    軟體環境最佳化

    伺服器只是硬體,最終服務的執行時環境還是靠伺服器端軟體來提供的,比如WEB伺服器就離不開:WEB容器(Nginx、Apache、Tomcat、IIS)、資料庫(MySQL、SQL Server)等支撐。下面總結一些軟體環境最佳化方案,可以滿足大多數伺服器的需要。

    合理使用NoSQL等快取,可以很大程度緩解後端資料庫的壓力;

    對於高併發場景,考慮叢集分散式部署;

    資料庫量級很大時,就要考慮SQL最佳化:讀寫分離、慢查詢最佳化、合理索引等;

    訊息系統的合理使用等。

  • 中秋節和大豐收的關聯?
  • 歷年《歌手》、《我是歌手》的舞臺上,哪些聲音驚豔了你?