tomcat8 的優化


1.下載tomcat8

2.配置

   修改tomcat_user.xml,配置管理用戶(設置角色,和用戶密碼)

  <role rolename="manager"/>
  <role rolename="manager-gui"/>
  <role rolename="admin"/>
  <role rolename="admin-gui"/>
  <user username="tomcat" password="123456" roles="manager,manager-gui,admin,admin-gui"/>
  

修改apache-tomcat-8.5.43\webapps\manager\META-INF/context.xml文件

<!--<Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />-->

3.啟動tomcat./bin/startup.bat

    啟動好后,就可以在瀏覽器里訪問127.0.0.1:8080,在打開的tomcat頁面上有個server status,點擊后輸入上面配置的tomcat/123456,就可以登陸進去了。

4.開始優化

   a.首先要禁用ajp服務,修改conf/server.xml文件,將下面這行注釋掉,重新啟動tomcat

    禁用原因:它只適合apache服務器的,一般我們用nginx。

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

    b.執行器(線程池)

     修改server.xml文件

<!-- maxThreads最大並發數,默認200
    minSpareThreads 初始化時創建 的線程 數,默認25
    prestartminSpareThreads 配合上面使用,必須為true
    maxQueueSize最大等待隊列,超過就拒絕 -->
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="150" minSpareThreads="4" prestartminSpareThreads="true" maxQueueSize="100"/>
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />

  c.3種運行模式

    bio:默認模式,性能低下。

    nio:推薦使用,tomcat8使用nio2

    apr:

    三種模式如何切換,只需要修改protocol就可以了,一樣是在conf/server.xml文件里

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

5.壓力測試

   a.使用jMeter工具

     新建 一個測試任務,新增一個測試線程 

  添加好后,再給線程分配任務,總共1000個線程,每個線程循環10次

再增加一些測試統計圖

 

還沒開始就已經滿了。

2b6:sun.nio.ch.WindowsAsynchronousSocketChannelImpl[connected local=/127.0.0.1:8080 remote=/127.0.0.1:60537]] for processing
        java.util.concurrent.RejectedExecutionException: Work queue full.
                at org.apache.catalina.core.StandardThreadExecutor.execute(StandardThreadExecutor.java:172)
                at org.apache.tomcat.util.net.AbstractEndpoint.processSocket(AbstractEndpoint.java:1080)
                at org.apache.tomcat.util.net.Nio2Endpoint$Nio2SocketWrapper$2.failed(Nio2Endpoint.java:588)
                at org.apache.tomcat.util.net.Nio2Endpoint$Nio2SocketWrapper$2.completed(Nio2Endpoint.java:556)
                at org.apache.tomcat.util.net.Nio2Endpoint$Nio2SocketWrapper$2.completed(Nio2Endpoint.java:547)
                at sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:126)
                at sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:281)
                at sun.nio.ch.WindowsAsynchronousSocketChannelImpl$ReadTask.completed(WindowsAsynchronousSocketChannelImpl.java:579)
                at sun.nio.ch.Iocp$EventHandlerTask.run(Iocp.java:397)
                at sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112)
                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
                at java.lang.Thread.run(Thread.java:748)

接下來,我把剛才配置的線程池修改了

    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="500" minSpareThreads="50" prestartminSpareThreads="true" maxQueueSize="1000"/>

結果沒出錯,說明配置起作用了。

6.修改catalina.bat,增加jvm的優化

   a.並行回收

JAVA_OPTS="-XX:+UseParallelGC -XX:+UseParallelOldGc -Xms64 -Xmx512m -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -xloggc:../logs/gc.log"

   b.G1收集器

JAVA_OPTS="-XX:+UseG1GC -XX:+MaxGCPauseMillis=100 -Xms64 -Xmx512m -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -xloggc:../logs/gc.log"

 


免責聲明!

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



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