天天看點

蘭蔻禦用運維總結之一

接下來的篇章我首先是談需求與技術談蘭蔻的客戶要求以及與之對應的運維結構然後談歸納總結反思感悟以及我的導師對我及我兩個大學同學的評價。

首先講述客戶需求

在談客戶需求之前我想談一下感觸就是工期比較緊張的情況下一旦需求确定就不要輕易修改因為這樣才能保證項目的按時完成不然就會出現軟體開發工程師不停的修改程式運維工程師不斷地調整伺服器部署項目經理疲于應付承受來自客戶和項目組成員兩方面的壓力。那這個項目就離見馬克思不遠了。

需求郵件内容如下

1月11日開始推廣蘭蔻年度回饋活動的計劃請根據以下資料推算出大概的“愛蘭蔻”"禮品随你挑“活動的流量并對目前兩台伺服器做相關的壓力測試。 

壓力測試建議使用的工具Microsoft Web Application Stress Tool 

請于12月31日前做好相關的壓力測試看看是否目前兩台伺服器在以下的資源推廣的情況下能否承受相應的流量。是否需要增加伺服器。

短信發送2次

     1月11日-1月13日 發送量165萬 

     1月25日 發送量 53萬

EDM發送1次

大概會在1月20或21日 發送量 20萬 

這是郵件關于需求部分的原内容我直接Copy下來。對這封郵件進行一次解釋

郵件中提到的家有蘭蔻這是一期的活動活動的内容有上傳一張化妝桌上的蘭蔻的圖檔圖檔大小從幾十k到10M以下在網站的頁面上展現的是縮略圖點選縮略圖會看到經過壓制的符合一定比例的圖檔而不是原圖。使用者上傳圖檔後可以在附屬欄中填寫好朋友的郵件位址請好朋友到此網站點選他的圖檔進而進行拉票活動。在此活動進行到第10天包括第十天蘭蔻會根據圖檔的排名在前20名的使用者得到蘭蔻的禮品。原拓撲圖如下

簡單介紹一下軟硬體配置兩台DellR610Intel5504*2/4G/146*3/1000M網卡*4FW是cisco5504并發連接配接數25000 使用者數無限制網絡端口8個快速以太網端口、1個SSC擴充插槽網絡吞吐量(Mbps)150介紹系統軟體作業系統Windows 标準版R2web伺服器Tomcat6.0.20DBServerMSSQL2008.

介紹一下JVM優化

JVM優化 

JVM的server版和client版的差別 

JVM動态庫有client和server兩個版本分别針對桌面應用和伺服器應用做了相應的優化client版本加載速度比較快server版本加載速度比較慢但是運作速度比較快。 

操作手法 

把%JAVA_HOME%\jar\bin中的server的檔案夾拷貝到%JAVA_HOME%同一級目錄的jre中的bin目錄下然後修改C:\Program Files\Java\jre6\lib\i386目錄中的jvm.cfg把-server KNOWN 放在-client KNOWN前面然後儲存。現在可以在dos視窗中寫入指令java -version來檢視是否是server版本 

C:\Documents and Settings\actop>java -version 

java version "1.6.0_17" 

Java(TM) SE Runtime Environment (build 1.6.0_17-b04) 

Java HotSpot(TM) Server VM (build 14.3-b01, mixed mode)

介紹一下web伺服器的參數配置

Server.xml:

<Connector port="80" address="192.168.0.2" protocol="org.apache.coyote.http11.Http11NioProtocol"  

                 maxHttpHeaderSize="8192"  URIEncoding="UTF-8" useBodyEncodingForURI="true" 

                 maxThreads="2000" minSpareThreads="75" maxSpareThreads="300"  

                 enableLookups="false" redirectPort="8443" acceptCount="2000" 

                 compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"   

                 connectionTimeout="50000" disableUploadTimeout="true"/> 

catalina.bat:

set JAVA_OPTS=-server -XX:+UseConcMarkSweepGC -Djava.rmi.server.hostname=XX.XX.XX.XX(your IP address) -Djava.awt.headless=true -Xms1400m -Xmx1400m -XX:NewSize=48m -XX:MaxNewSize=128m -XX:PermSize=128m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true 

set CATALINA_OPTS=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9004 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false 

set CATALINA_OPTS=%CATALINA_OPTS% -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true

對以上參數做如下解釋

首先我們對tomcat6.0.20的新特性進行介紹

首先講協定部分參見網上博文

===========================================================================================================

[轉]Tomcat 6 支援 NIO -- Tomcat的四種基于HTTP協定的Connector性能比較 

Tomcat 6 支援 NIO -- Tomcat的四種基于HTTP協定的Connector性能比較

Tomcat從5.5版本開始支援以下四種Connector的配置分别為

<Connector port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443"/> 

<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000"   redirectPort="8443"/> 

<Connector executor="tomcatThreadPool"  port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 

<Connector executor="tomcatThreadPool" port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" /> 

我們姑且把上面四種Connector按照順序命名為 NIO, HTTP, POOL, NIOP 

NIO    HTTP    POOL    NIOP 

281     65     208     365 

666     66     110     398 

692     65     66     263 

256     63     94     459 

440     67     145     363 

由這五組資料不難看出HTTP的性能是很穩定但是也是最差的而這種方式就是Tomcat的預設配置。NIO方式波動很大但沒有低于280 的NIOP是在NIO的基礎上加入線程池可能是程式處理更複雜了是以性能不見得比NIO強而POOL方式則波動很大測試期間和HTTP方式一樣不時有停滞。 

由于linux的核心預設限制了最大打開檔案數目是1024是以此次并發數控制在900。 

盡管這一個結果在實際的網站中因為各方面因素導緻可能差别沒這麼大例如受限于資料庫的性能等等的問題。但對我們在部署網站應用時還是具有參考價值的。

Connector:用戶端和service之間的連接配接器。 protocol指定了該端口偵聽的協定類型maxHttpHeaderSizeHttp的Header的最大限制 

URIEncodingurl傳參時的編碼格式 

useBodyEncodingForURI根據相應該請求頁面request.CharacterEncoding參數對資料進行重新編碼 

maxThreadsTomcat可建立的最大的線程數 

minSpareThreads初始化建立的線程數 

maxSpareThreads一旦建立的線程超過這個數Tomcat就将關閉不再需要的Socket線程 

enableLookups使用允許DNS查詢通常情況下設定為false設定為false就直接傳回ip位址 

acceptCount當所有可以使用的處理請求的線程樹都被使用時可以放到請求隊列中的請求數超過這個數的請求将不予處理。其實該屬性與ServerSocket(int port,int backlog)中的backlog參數意義相同具體可參考ServerSocket的JDK API 

connectionTimeout網絡連接配接逾時機關毫秒。設定為0表示永不逾時 

compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 在用戶端請求網頁後從伺服器端将網頁檔案壓縮再下載下傳到用戶端由用戶端的浏覽器負責解壓縮并浏覽。相對于普通的浏覽過程HTML ,CSS,Javascript , Text 它可以節省40%左右的流量。更為重要的是它可以對動态生成的包括CGI、PHP , JSP , ASP , Servlet,SHTML等輸出的網頁也能進行壓縮壓縮效率驚人 

1) compression="on" 打開壓縮功能 

2) compressionMinSize="2048" 啟用壓縮的輸出内容大小這裡面預設為2KB 

3) noCompressionUserAgents="gozilla, traviata" 對于以下的浏覽器不啟用壓縮 

4) compressableMimeType="text/html,text/xml" 壓縮類型

disableUploadTimeout設定是否上傳逾時。

開始講解catalina.bat中的參數設定

-XmsJVM初始化堆大小 

-XmxJVM堆最大值 

MaxPermSize為永久對象如jdbc驅動各種随jvm啟動時加載的jar包占用記憶體數。 

Xms 與 Xmx正常情況下應該設定成同樣大小否則會影響jvm性能。一般最大不超過2G。

本文轉自guoli0813 51CTO部落格原文連結http://blog.51cto.com/guoli0813/273230如需轉載請自行聯系原作者