tomcat優化-有改protocol 和 緩存 集群方案

tomcat優化

?

在線上環境中我們是采用了tomcat作為Web服務器,它的處理性能直接關系到用戶體驗,在平時的工作和學習中,歸納出以下七種調優經驗。

1. 服務器資源

? ? 服務器所能提供CPU、內存、硬盤的性能對處理能力有決定性影響。
? ? (1) 對于高并發情況下會有大量的運算,那么CPU的速度會直接影響到處理速度。
? ? (2) 內存在大量數據處理的情況下,將會有較大的內存容量需求,可以用-Xmx -Xms -XX:MaxPermSize等參數對內存不同功能塊進行劃分。我們之前就遇到過內存分配不足,導致虛擬機一直處于full GC,從而導致處理能力嚴重下降。
? ? (3) 硬盤主要問題就是讀寫性能,當大量文件進行讀寫時,磁盤極容易成為性能瓶頸。最好的辦法還是利用下面提到的緩存。

2. 利用緩存和壓縮

? ? 對于靜態頁面最好是能夠緩存起來,這樣就不必每次從磁盤上讀。這里我們采用了Nginx作為緩存服務器,將圖片、css、js文件都進行了緩存,有效的減少了后端tomcat的訪問。

? ? 另外,為了能加快網絡傳輸速度,開啟gzip壓縮也是必不可少的。但考慮到tomcat已經需要處理很多東西了,所以把這個壓縮的工作就交給前端的Nginx來完成。可以參考之前寫的《利用nginx加速web訪問》。

? ? 除了文本可以用gzip壓縮,其實很多圖片也可以用圖像處理工具預先進行壓縮,找到一個平衡點可以讓畫質損失很小而文件可以減小很多。曾經我就見過一個圖片從300多kb壓縮到幾十kb,自己幾乎看不出來區別。

3. 采用集群

? ? 單個服務器性能總是有限的,最好的辦法自然是實現橫向擴展,那么組建tomcat集群是有效提升性能的手段。我們還是采用了Nginx來作為請求分流的服務器,后端多個tomcat共享session來協同工作。可以參考之前寫的《利用nginx+tomcat+memcached組建web服務器負載均衡》。

4. 優化tomcat參數

? ? 這里以tomcat7的參數配置為例,需要修改conf/server.xml文件,主要是優化連接配置,關閉客戶端dns查詢。

  1. <Connector?port="8080"???
  2. ???????????protocol="org.apache.coyote.http11.Http11NioProtocol"??
  3. ???????????connectionTimeout="20000"??
  4. ???????????redirectPort="8443"???
  5. ???????????maxThreads="500"???
  6. ???????????minSpareThreads="20"??
  7. ???????????acceptCount="100"?
  8. ???????????disableUploadTimeout="true"?
  9. ???????????enableLookups="false"???
  10. ???????????URIEncoding="UTF-8"?/>?

5. 改用APR庫

? ? tomcat默認采用的BIO模型,在幾百并發下性能會有很嚴重的下降。tomcat自帶還有NIO的模型,另外也可以調用APR的庫來實現操作系統級別控制。

? ? NIO模型是內置的,調用很方便,只需要將上面配置文件中protocol修改成org.apache.coyote.http11.Http11NioProtocol,重啟即可生效。上面配置我已經改過了,默認的是HTTP/1.1。

? ? APR則需要安裝第三方庫,在高并發下會讓性能有明顯提升。具體安裝辦法可以參考http://www.cnblogs.com/huangjingzhou/articles/2097241.html。安裝完成后重啟即可生效。如使用默認protocal就是apr,但最好把將protocol修改成org.apache.coyote.http11.Http11AprProtocol,會更加明確。

? ? 在官方找到一個表格詳細說明了這三種方式的區別:

  1. ??????????????????Java?Blocking?Connector???Java?Nio?Blocking?Connector???APR/native?Connector?
  2. ?????????????????????????????BIO?????????????????????????NIO???????????????????????APR?
  3. Classname????????????????AjpProtocol???????????????AjpNioProtocol???????????AjpAprProtocol?
  4. Tomcat?Version???????????3.x?onwards?????????????????7.x?onwards??????????????5.5.x?onwards?
  5. Support?Polling??????????????NO??????????????????????????YES???????????????????????YES?
  6. Polling?Size?????????????????N/A???????????????????maxConnections?????????????maxConnections?
  7. Read?Request?Headers??????Blocking??????????????????Sim?Blocking???????????????????Blocking?
  8. Read?Request?Body?????????Blocking??????????????????Sim?Blocking???????????????????Blocking?
  9. Write?Response????????????Blocking??????????????????Sim?Blocking???????????????????Blocking?
  10. Wait?for?next?Request?????Blocking??????????????????Non?Blocking???????????????Non?Blocking?
  11. Max?Connections????????maxConnections??????????????maxConnections?????????????maxConnections?

6. 優化網絡

? ? Joel也明確提出了優化網卡驅動可以有效提升性能,這個對于集群環境工作的時候尤為重要。由于我們采用了linux服務器,所以優化內核參數也是一個非常重要的工作。給一個參考的優化參數:

  1. 1.?修改/etc/sysctl.cnf文件,在最后追加如下內容:?
  2. ?
  3. net.core.netdev_max_backlog?=?32768?
  4. net.core.somaxconn?=?32768?
  5. net.core.wmem_default?=?8388608?
  6. net.core.rmem_default?=?8388608?
  7. net.core.rmem_max?=?16777216?
  8. net.core.wmem_max?=?16777216?
  9. net.ipv4.ip_local_port_range?=?1024?65000?
  10. net.ipv4.route.gc_timeout?=?100?
  11. net.ipv4.tcp_fin_timeout?=?30?
  12. net.ipv4.tcp_keepalive_time?=?1200?
  13. net.ipv4.tcp_timestamps?=?0?
  14. net.ipv4.tcp_synack_retries?=?2?
  15. net.ipv4.tcp_syn_retries?=?2?
  16. net.ipv4.tcp_tw_recycle?=?1?
  17. net.ipv4.tcp_tw_reuse?=?1?
  18. net.ipv4.tcp_mem?=?94500000?915000000?927000000?
  19. net.ipv4.tcp_max_orphans?=?3276800?
  20. net.ipv4.tcp_max_syn_backlog?=?65536?
  21. ?
  22. 2.?保存退出,執行sysctl?-p生效?

7. 讓測試說話

? ? 優化系統最忌諱的就是只調優不測試,有時不適當的優化反而會讓性能更低。以上所有的優化方法都要在本地進行性能測試過后再不斷調整參數,這樣最終才能達到最佳的優化效果。

?

補充Bio、Nio、Apr模式的測試結果:

??? 對于這幾種模式,我用ab命令模擬1000并發測試10000詞,測試結果比較意外,為了確認結果,我每種方式反復測試了10多次,并且在兩個服務器上都測試了一遍。結果發現Bio和Nio性能差別非常微弱,難怪默認居然還是Bio。但是采用apr,連接建立的速度會有50%~100%的提升。直接調用操作系統層果然神速啊,這里強烈推薦apr方式!

?

參考資料:
http://16.199.geisvps.com/bbs/2836/24238.html

http://blog.csdn.net/super_marioli/article/details/27240639

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458166.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458166.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458166.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入淺出的講解傅里葉變換(真正的通俗易懂)

原文出處&#xff1a; 韓昊 1 2 3 4 5 6 7 8 9 10 作 者&#xff1a;韓 昊 知 乎&#xff1a;Heinrich 微 博&#xff1a;花生油工人 知乎專欄&#xff1a;與時間無關的故事 謹以此文獻給大連海事大學的吳楠老師&#xff0c;柳曉鳴老師&#xff0c;王新年老師以及張晶泊老…

分布式鎖 基于Redis

分布式鎖的實現(基于Redis)參考:http://www.jb51.net/article/75439.htm http://www.linuxidc.com/Linux/2015-01/111827.htm http://www.tuicool.com/articles/6juqmm7 方式一: 基于第三方類庫 redssion 1.安裝redis安裝redssion的鎖服務隊redis的版本有要求&#xff0c;要求必…

學好Linux決心書

我叫李楊&#xff0c;經過在老男孩教育linux運維班5個月學習后&#xff0c;我一定要達到的的薪水目標是7k,為了達到此目標我將采取如下5大行動或方案&#xff1a;1.每天堅持學習7個小時2.堅持每天跑步1小時3.調整思路 嚴于利己4.讓自己生活更加充實&#xff0c;不在渾渾噩噩5.為…

如何通俗易懂地解釋歐拉公式(e^πi+1=0)?

from&#xff1a;https://www.zhihu.com/question/41134540 http://www.matongxue.com/madocs/8.html

IIS(1)

轉載&#xff1a;http://blog.csdn.net/ce123 IIS音頻總線學習&#xff08;一&#xff09;數字音頻技術 一、聲音的基本概念 聲音是通過一定介質傳播的連續的波。 圖1 聲波重要指標&#xff1a; 振幅&#xff1a;音量的大小周期&#xff1a;重復出現的時間間隔頻率&#xff1a;…

手機屏幕適配原理及實現

為什么80%的碼農都做不了架構師&#xff1f;>>> 手機屏幕是用戶與 App 最直接的交互點 不同的分辨率下用戶對我們的 App 具有明顯的感觀差異&#xff0c;主流分辨率的更新迭代卻又完全獨立于 App 進行。這讓我們想要使 App 在絕大多數主流手機上都保持感觀、體驗的…

【數字圖像處理】傅里葉變換在圖像處理中的應用

from&#xff1a;https://www.cnblogs.com/tenderwx/p/5245859.html 1.理解二維傅里葉變換的定義 1.1二維傅里葉變換 二維Fourier變換: 逆變換&#xff1a; 1.2二維離散傅里葉變換 一個圖像尺寸為MN的 函數的離散傅里葉變換由以下等式給出&#xff1a; 其中 和。其中變量u和…

最好的云備份選項

能夠實現數據備份的方式有很多。在虛擬化技術最為興盛的時期&#xff0c;首選方式是使用數據保護軟件&#xff0c;在hypervisor層進行備份或者復制整臺虛擬機&#xff0c;比如Veeam Backup以及Zerto提供的同步軟件。 對于使用VMware云的IT部門來說&#xff0c;這種方式現在仍然…

求二叉樹中兩個節點的最遠距離

問題定義如果我們把二叉樹看成一個圖&#xff0c;父子節點之間的連線看成是雙向的&#xff0c;我們姑且定義"距離"為兩節點之間邊的個數。寫一個程序求一棵二叉樹中相距最遠的兩個節點之間的距離。計算一個二叉樹的最大距離有兩個情況:情況A: 路徑經過左子樹的最深節…

halcon學習(算子匯總)

from:https://www.cnblogs.com/hanzhaoxin/archive/2013/01/09/2852213.html dev_clear_obj(Objects : : : ) 刪除一個iconic對象 dev_error_var( : : ErrorVar, Mode : ) 定義或取消定義一個錯誤變量 dev_get_exception_data( : : Exception, Name : Value) 獲取異常數據…

Bing Speech Recognition 標記

Bing Speech Services Bing Bing Speech Services provide speech capabilities for Windows and Windows Phone https://msdn.microsoft.com/en-us/library/dn303461.aspx 已失效。 轉載于:https://www.cnblogs.com/zangdalei/p/5312440.html

Source Insight 4.0 最簡單的破解安裝

from&#xff1a;https://blog.csdn.net/biubiuibiu/article/details/78044232 三步完成Source Insight 4.0 破解安裝 下載地址有更新&#xff0c;之前有朋友因潛在的版權問題封禁沒下到&#xff0c;現在更新后可正常使用了。 文末有完全清除上次安裝殘留的方法&#xff0c;…

【原】Spark中Master源碼分析(一)

Master作為集群的Manager&#xff0c;對于集群的健壯運行發揮著十分重要的作用。下面&#xff0c;我們一起了解一下Master是聽從Client&#xff08;Leader&#xff09;的號召&#xff0c;如何管理好Worker的吧。 1.家當&#xff08;靜態屬性&#xff09; 1.設置一個守護單線程的…

XML——XML介紹和基本語法

from&#xff1a;https://blog.csdn.net/gavin_john/article/details/51511180 1.XML歷史 gml(1969)->sgml(1985)->html(1993)->xml(1998) 1969 gml(通用標記語言)&#xff0c;主要目的是要在不同的機器之間進行通信的數據規范1985 sgml(標準通用標記語言)1993 htm…

Tomcat7.0安裝配置

很久沒有通過博客對學習所得進行記錄了。 現在將使用Tomcat的一些經驗和心得寫到這里&#xff0c;作為記錄和備忘。如果有朋友看到&#xff0c;也請不吝賜教。 首先&#xff0c;我個人使用的是apache-tomcat-7.0.27你可以下載使用&#xff0c;前提條件你需要安裝JDK1.6或者1.7都…

TIFF圖像文件格式詳解

from&#xff1a;https://www.cnblogs.com/gywei/p/3393816.html 1 什么是TIFF&#xff1f; TIFF是Tagged Image File Format的縮寫。在現在的標準中&#xff0c;只有TIFF存在&#xff0c; 其他的提法已經舍棄不用了。做為一種標記語言&#xff0c;TIFF與其他文件格式最大的不…

java 抽象工廠模式簡單實例

抽象工廠模式&#xff1a;提供一個創建一系列的相關的或者依賴的對象的接口&#xff0c;無需指定它們的具體實現類&#xff0c;具體的時間分別在子類工廠中產生。 類似于工廠模式&#xff1a;隔離了具體類的生產實現&#xff0c;使得替換具體的工廠實現類很容易。包含有以下模塊…

圖像處理之積分圖應用三(基于NCC快速相似度匹配算法)

from&#xff1a;https://blog.csdn.net/jia20003/article/details/53021614 圖像處理之積分圖應用三&#xff08;基于NCC快速相似度匹配算法&#xff09; 基于Normalized cross correlation(NCC)用來比較兩幅圖像的相似程度已經是一個常見的圖像處理手段。在工業生產環節檢測…

深入淺出地理解機器人手眼標定

from&#xff1a;https://blog.csdn.net/qq_16481211/article/details/79764730 所謂手眼系統&#xff0c;就是人眼鏡看到一個東西的時候要讓手去抓取&#xff0c;就需要大腦知道眼鏡和手的坐標關系。如果把大腦比作B&#xff0c;把眼睛比作A&#xff0c;把手比作C,如果A和B的…

centos 6.5 安裝 mongodb

官方給出的鏈接地址&#xff1a;https://docs.mongodb.org/manual/tutorial/install-mongodb-on-red-hat/ 安裝后重要的日志 win10 上使用mongochef連接不上數據庫 解決方案&#xff1a; 修改 /etc/mongod.conf 將bindIP 改為0.0.0.0 監聽外網轉載于:https://www.cnblogs.com/l…