Linux下jvm、tomcat、mysql、log4j優化配置筆記


         小菜一直對操作系統心存畏懼,以前也很少接觸,這次創業購買了Linux雲主機,由於木有人幫忙,只能自己動手優化服務器了。。。。

         小菜的雲主機配置大致為:centeos6(32位),4核心cpu,4G內存,5M獨享帶寬。

        

一、jvm內存優化方案。

 

         要優化服務器,首先從jvm入手,分配好jvm內存,配置方案如下:

         declare -x JAVA_OPTS="-server -Xms1280M -Xmx1280M -Xmn512M -Xss1024k -XX:+AggressiveOpts -XX:+UseParallelGC  -XX:+UseBiasedLocking"

         其中,-server是讓jvm在服務模式下運行,可以提高jvm運行效率,其他的就不用多操心了。

         -Xmx是最大內存,如果是32操作系統,2G內存以上,設置為1280G是最優的,設置太大了會造成jvm崩潰,這是32位jvm本身的限制造成的。

         -Xmn是最小內存,官方推薦為最大內存的3/8,這里取下整,就521M了

         -Xms為初始化內存,直接與最大內存一致,這樣可以避免內存重復分配,降低效率,直接上來就是最大的,jvm也不用再擴展內存了,節省時間。

         -Xss是每個線程所占用的內存,也就是每個線程的堆棧大小,太小了容易溢出,太大了會導致創建的線程數量減少,因為最大容量是有限的。這里最大內存為1280M,理論上可以創建1000個左右線程,差不多支持500個並發訪問(是並發訪問哦,也就是500個用戶同一時刻點擊),已經相當可以了。

         -XX:+AggressiveOpts,加快編譯。

         -XX:+UseParallelGC,優化垃圾回收。

         -XX:+UseBiasedLocking,優化鎖機制。

        

         將上邊這條配置,添加到tomcat安裝目錄下的\bin\catalina.sh文件中,放在哪個位置無所謂,只要在cygwin=false這句話之前就可以了。    

 

二、tomcat服務器優化方案

        

          搞定了jvm,接下來就要配置tomcat了,配置如下:

      

1   <Connector port="80" protocol="HTTP/1.1" 
2 
3                maxHttpHeaderSize="8192" 
4 
5                maxThreads="1000" minSpareThreads="100" maxSpareThreads="300" 
6 
7                enableLookups="false" redirectPort="8443" acceptCount="200" 
8 
9                connectionTimeout="50000" disableUploadTimeout="true"/> 

 

 

         這些配置中,我們關心的有:

         maxThreads最大線程數,設為1000可以創建1000個線程,也就是1000個並發事務,大約可以支持500個完全並發訪問,這是一個相當恐怖的數字,可以試想一下,500個用戶同時點擊,是什么概率。

         minSpareThreads最小備用線程數,可以理解為,服務器一旦啟動,馬上創建這么多線程以備使用,因此設置太大了浪費資源,太小了會降低效率,這個就要根據讀者的服務器配置和具體的訪問量來衡量,不能一概而論,我這里的設置僅僅是個參考,本服務器訪問量大約每天幾十萬pv,並且比較集中。

         maxSpareThreads最大備用線程數,創建的線程數量超過這個數量時,如果某些線程空閑,那么這些會被回收,直到線程總數量小於這個值。

         acceptCount當tomcat啟動的線程數達到最大時,等待的線程數量(注意並沒有新線程創建,只是預定了而已)。這個數值也需要根據實際情況設置,如果設置的偏小,會造成很多請求直接被拒絕;如果設置的偏大,會造成很多請求超時,讀者理解一下吧!

         enableLookups關閉tomcat的dns查詢,節省帶寬,無需過多了解。

         disableUploadTimeout這個標志允許servlet container在一個servlet執行的時候,使用一個不同的,更長的連接超時。最終的結果是給servlet更長的時間以便完成其執行,或者在數據上載的時候更長的超時時間,總之,就是為了保證每次請求都能順利完成。

         將這段話復制到tomcat安裝目錄下的\conf\server.xml文件中。

         注意,這個配置在server.xml中本來就存在,可能要和讀者以前的配置融合一下,別直接盲目覆蓋。。。

 

    三、MySQL優化方案

 

         Mysql優化,小菜了解到的就是修改最大連接數,因為mysql默認的最大連接數是100,對於稍微大點的項目,肯定是不夠的。

      項目端配置

         最大連接數,首先要在程序里設定,如果您的項目采用的是JNDI方式配置的數據源,那么就要去tomcat安裝目錄下的\conf\server.xml文件或\conf\context.xml文件里找到如下配置(小菜只是舉個例子,里邊的配置都是隨便寫的,關鍵是找到Resource節點):

 1  <Resource name="demo"
 2    auth="Container"
 3    type="javax.sql.DataSource"
 4    maxActive="500"
 5    maxIdle="30"
 6    maxWait="5000"
 7    username="sa"
 8    password=""
 9    driverClassName="org.hsqldb.jdbcDriver"
10    url="jdbc:hsqldb:hsql://localhost/runqianDB" />

         這里我們需要關注的有:

         maxActive是指最大激活連接數為500,也就是說同時最多只可以有500個數據庫連接。這里也可以理解為並發,小菜覺得500已經不少啦,畢竟數據讀完會自動釋放連接,如果您的主機配置不夠高,這里設置太多,比如什么3000,可能導致MySQL啟動失敗。

         maxIdle是最大空閑連接數,就算沒有使用數據庫,依然保持這么多連接,以便需要時直接用,提高效率。因為數據庫連接的創建過程相當的耗費時間。參考了很多網站,一般都是30左右,僅供參考!

         maxWait是最大等待時間,如果數據庫連接數不夠用,那么等待這么長時間,超過這個時間了就超時,設為-1表示無限等待。

         如果您的項目采用的是JDBC配置,也就是項目中有一個properties文件,一般叫什么JDBC.properties、config.properties,具體叫什么小菜就不知道啦,然后里邊會有類似如下配置:

         JDBC.DriverClass=com.mysql.jdbc.Driver

         JDBC.Url=jdbc\:mysql\://localhost\:3306/xxx?useUnicode\=true&amp;characterEncoding\=utf8

         JDBC.User=xxx

         JDBC.Password=xxx

         JDBC.MaxPoolSize=500

         JDBC.MinPoolSize=30

         JDBC.WaitTime=5000

        

         這里的MaxPoolSize、MinPoolSize、WaitTime分別和上邊講的maxActive、maxIdle、maxWait對應,但這是小菜的項目,您的項目需要具體分析。。。。

      服務器端配置

         項目配置好了之后,就要配置MySQL服務器了。

         如果您的MySQL是5.0之前的版本,包括5.0,那么可以嘗試用如下方法修改MySQL最大連接數。

         在linux系統中找到/usr/bin/mysqld_safe編輯它,找到mysqld啟動的那兩行,在后面加上參數 :

         -O max_connections=1000

         用紅字特別說明:

 

         if test -z "$args"

           then

             $NOHUP_NICENESS $ledir/$MYSQLD $defaults --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR $USER_OPTION --pid-file=$pid_file --skip-external-locking -O max_connections=1000 >> $err_log 2>&1

          else

             ev al "$NOHUP_NICENESS $ledir/$MYSQLD $defaults --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR $USER_OPTION --pid-file=$pid_file --skip-external-locking $args -O max_connections=1000 >> $err_log 2>&1"

 

        這段代碼很不好找,在下也無法說清楚它具體在哪個位置。不過建議從最后往前找會比較快。

        重啟mysql服務:# service mysql restart

        查看當前最大連接數: mysqladmin -uroot -p variables

        如果您的MySQL服務器是5.1之后的版本,包括5.1,或者您用上邊的方法不行,那么可以嘗試如下方法。

        在linux系統中找到/etc/my.cnf文件,在里邊的[mysqld]節點下,添加:max_connections=500即可,500就是指最大連接數,可以隨意改。例如:

        [mysqld]

        datadir=/home/mysql

        socket=/var/lib/mysql/mysql.sock

        user=mysql

        default-character-set = utf8

        default-collation = utf8_general_ci

        max_connections=500

        

         這樣就搞了,重啟MySQL即可。

 

四、日志優化

 

         日志的重要性不必多說,項目開發時,日志一般是直接輸出到控制台上,方便查看。

         但是項目實際發布時,就不能這樣做了,影響效率不說,我們也無法查看這些日志。

         小菜的項目中用的是log4j,它有一個配置文件,叫log4j.properties,配置大致如下:

         log4j.rootLogger = INFO, R

         log4j.appender.R = org.apache.log4j.RollingFileAppender

         log4j.appender.R.File = /home/westjavatest/logs/ivlifelog4j.txt

         log4j.appender.R.MaxFileSize = 500KB

         log4j.appender.R.MaxBackupIndex = 1

         log4j.appender.R.layout = org.apache.log4j.PatternLayout

         log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] - %m%n

 

         這里我們需要的關注的有:

         log4j.rootLogger = INFO, R,這里的INFO指明了日志的級別,一般用INFO就可以了;R是輸出配置,名字隨便起,和下邊log4j.appender.R對應就可以了。

         log4j.appender.R.File指明了日志輸出路徑,注意linux下目錄的/和windows下目錄的\相反哦。

         log4j.appender.R.MaxFileSize是指每個日志文件的大小,這里設成了不超過500kb,一旦超過,會重新創建一個.txt日志文件。

         其他參數就不那么重要了,有興趣的讀者可以自己去谷歌一下~

 

五、結束語

 

         這些服務器的優化配置,小菜也是第一次接觸,花了很多時間從網上搜集而來的,因此整理一下,方便像小菜這樣的菜鳥。

         這些配置,很多都是經驗數據,具體的參數需要根據您服務器的實際情況,進行一定的綜合分析、壓力測試之后,才得到的,小菜列舉的這些只是一般經驗,僅供參考。

         最后祝願大家優化順利!

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM