- ç³»åæç« ç®å½ï¼https://blog.csdn.net/hancoder/category_10106944.html
- 0 sevletçç¥è¯ï¼ä»ä¸é¢ç®å½ä¸æ¾
- 1 tomcatçå®è£ ä¸ç®å½ç»æï¼https://blog.csdn.net/hancoder/article/details/106765035
- 2 tomcatæºç ç¯å¢æå»ºï¼ https://blog.csdn.net/hancoder/article/details/113064325
- 3 tomcatæ¶æä¸åæ°ï¼https://blog.csdn.net/hancoder/article/details/113065917
- 4 tomcatæºç åæï¼https://blog.csdn.net/hancoder/article/details/113062146
- 5 tomcatè°ä¼ï¼https://blog.csdn.net/hancoder/article/details/113065948
5 Web åºç¨é ç½®
web.xml
æ¯webåºç¨çæè¿°æä»¶ï¼ å®æ¯æçå ç´ åå±æ§æ¥èªäºServlet è§èå®ä¹ ã å¨ Tomcat ä¸ï¼ Web åºç¨çæè¿°ä¿¡æ¯å æ¬
-
ä¸é»è®¤é ç½®tomcat/conf/web.xml
- 以å Web åºç¨
ä¸çå®å¶é ç½®ãWEB-INF/web.xml
5.1 ServletContext åå§ååæ°
æ们å¯ä»¥éè¿
<contextâparam>
æ·»å ServletContext åå§ååæ°ï¼å®é ç½®äºä¸ä¸ªé®å¼å¯¹ï¼è¿æ ·æ们å¯ä»¥å¨åºç¨ç¨åºä¸ä½¿ç¨
javax.servlet.ServletContext.getInitParameter()æ¹æ³è·ååæ°ã å³req.getServletContext().getInitParameter("")
<contextâparam>
<paramâname>contextConfigLocation</paramâname>
<paramâvalue>classpath:applicationContextâ*.xml</paramâvalue>
<description>Spring Config File Location</description>
</contextâparam>
5.2 ä¼è¯é ç½®
<sessionâconfig>
ç¨äºé ç½®Webåºç¨ä¼è¯ï¼å æ¬ è¶ æ¶æ¶é´ãCookieé 置以åä¼è¯è¿½è¸ªæ¨¡å¼ãå®å°è¦ç server.xml å context.xml ä¸çé ç½®ã
HTTPæ¯æ ç¶æçï¼å¹¶ä¸ç¥éæ¯å¦æ¯åä¸ç¨æ·
æ以æ们使ç¨çæ¯session+cookieçå½¢å¼
cookieé»è®¤çå称æ¯JSESSIONID
<sessionâconfig>
<sessionâtimeout>30</sessionâtimeout>
<cookieâconfig>
<name>JESSIONID</name>
<domain>www.itcast.cn</domain>
<path>/</path>
<comment>Session Cookie</comment>
<httpâonly>true</httpâonly>
<secure>false</secure>
<maxâage>3600</maxâage>
</cookieâconfig>
<trackingâmode>COOKIE</trackingâmode>
</sessionâconfig>
é 置解æï¼
1ï¼ sessionâtimeout ï¼ ä¼è¯è¶ æ¶æ¶é´ï¼åä½ åé
2ï¼ cookieâconfigï¼ ç¨äºé ç½®ä¼è¯è¿½è¸ªCookie
- nameï¼Cookieçå称
- domainï¼Cookieçåå
- pathï¼Cookieçè·¯å¾
- commentï¼æ³¨é
- httpâonlyï¼cookieåªè½éè¿HTTPæ¹å¼è¿è¡è®¿é®ï¼JSæ æ³è¯»åæä¿®æ¹ï¼æ¤é¡¹å¯ä»¥å¢å ç½ç«è®¿é®çå®å ¨æ§ã
- secureï¼å¦ææ¯trueï¼æ¤cookieåªè½éè¿
è¿æ¥ä¼ éå°æå¡å¨ï¼èHTTP è¿æ¥åä¸ä¼ä¼ é该信æ¯ã注ææ¯ä»æµè§å¨ä¼ éå°æå¡å¨ï¼æå¡å¨ç«¯çCookie对象ä¸åæ¤é¡¹å½±åãHTTPS
-
maxâageï¼ä»¥ç§ä¸ºåä½è¡¨ç¤ºcookieççåæï¼é»è®¤ä¸ºâ1表示æ¯ä¼è¯Cookieï¼æµè§å¨å ³éæ¶å°±ä¼æ¶å¤±ã
3ï¼ trackingâmode ï¼ç¨äºé ç½®ä¼è¯è¿½è¸ªæ¨¡å¼ï¼Servlet3.0çæ¬ä¸æ¯æç追踪模å¼ï¼ COOKIEãURLãSSL
- COOKIE : éè¿HTTP Cookie 追踪ä¼è¯æ¯æ常ç¨çä¼è¯è¿½è¸ªæºå¶ï¼ èä¸Servletè§èä¹è¦æ±ææçServletè§èé½éè¦æ¯æCookie追踪ã
- URL : URLéåæ¯æåºæ¬çä¼è¯è¿½è¸ªæºå¶ãå½å®¢æ·ç«¯ä¸æ¯æCookieæ¶ï¼å¯ä»¥éç¨URLéåçæ¹å¼ãå½éç¨URL追踪模å¼æ¶ï¼è¯·æ±è·¯å¾éè¦å å«ä¼è¯æ è¯ä¿¡æ¯ï¼Servlet容å¨ä¼æ ¹æ®è·¯å¾ä¸çä¼è¯æ è¯è®¾ç½®è¯·æ±çä¼è¯ä¿¡æ¯ãå¦ï¼ http://www.myserver.com/user/index.html;jessionid=1234567890ã
- SSL : 对äºSSL请æ±ï¼ éè¿SSLä¼è¯æ è¯ç¡®å®è¯·æ±ä¼è¯æ è¯ã
req.getSession().getId()
è°·ææµè§å¨çF11 Applicationéè½çå°
5.3 Servleté ç½®
Servlet çé 置主è¦æ¯ä¸¤é¨åï¼ serv let å servlet-mapping ï¼
<servlet>
<servletâname>myServlet</servletâname>
<servletâclass>cn.itcast.web.MyServlet</servletâclass>
<initâparam>
<paramâname>fileName</paramâname>
<paramâvalue>init.conf</paramâvalue>
</initâparam>
<loadâonâstartup>1</loadâonâstartup>
<enabled>true</enabled>
</servlet>
<servletâmapping>
<servletâname>myServlet</servletâname>
<urlâpattern>*.do</urlâpattern>
<urlâpattern>/myservet/*</urlâpattern>
</servletâmapping>
é 置说æï¼
- servletâname : æå®servletçåç§°ï¼ è¯¥å±æ§å¨web.xmlä¸å¯ä¸ã
- servletâclass : ç¨äºæå®servletç±»å
- initâparamï¼ ç¨äºæå®servletçåå§ååæ°ï¼ å¨åºç¨ä¸å¯ä»¥éè¿HttpServlet.getInitParameter è·åã
- loadâonâstartupï¼ ç¨äºæ§å¶å¨Webåºç¨å¯å¨æ¶ï¼Servletçå 载顺åºã å¼å°äº0ï¼webåºç¨å¯å¨æ¶ï¼ä¸å 载该servletï¼ç¬¬ä¸æ¬¡è®¿é®æ¶å è½½ã
- enabledï¼ true ï¼ false ã è¥ä¸ºfalse ï¼è¡¨ç¤ºServletä¸å¤çä»»ä½è¯·æ±ã
- urlâpatternï¼ ç¨äºæå®URL表达å¼ï¼ä¸ä¸ª servletâmappingå¯ä»¥åæ¶é ç½®å¤ä¸ª urlâ patternã
Servlet ä¸æ件ä¸ä¼ é ç½®ï¼
<servlet>
<servletâname>uploadServlet</servletâname>
<servletâclass>cn.itcast.web.UploadServlet</servletâclass>
<multipartâconfig>
<location>C://path</location>
<maxâfileâsize>10485760</maxâfileâsize>
<maxârequestâsize>10485760</maxârequestâsize>
<fileâsizeâthreshold>0</fileâsizeâthreshold>
</multipartâconfig>
</servlet>
é 置说æï¼
1ï¼ locationï¼åæ¾çæçæ件å°åã
2ï¼ maxâfileâsizeï¼å 许ä¸ä¼ çæ件æ大å¼ã é»è®¤å¼ä¸ºâ1ï¼ è¡¨ç¤ºæ²¡æéå¶ã
3ï¼ maxârequestâsizeï¼é对该 multi/formâdata 请æ±çæ大æ°éï¼é»è®¤å¼ä¸ºâ1ï¼ è¡¨ç¤º æ éå¶ã
4ï¼ fileâsizeâthresholdï¼å½æ°éé大äºè¯¥å¼æ¶ï¼ å 容ä¼è¢«åå ¥æ件ã
5.4 Listeneré ç½®
Listenerç¨äºçå¬serv let ä¸çäºä»¶ï¼ä¾å¦context ãrequest ãsession对象çå建ãä¿® æ¹ãå é¤ï¼å¹¶è§¦åååºäºä»¶ãListeneræ¯è§å¯è 模å¼çå®ç°ï¼å¨servlet ä¸ä¸»è¦ç¨äºå¯¹ context ãrequest ãsession对象ççå½å¨æè¿è¡çæ§ãå¨servlet2.5è§èä¸å ±å®ä¹äº8ç§ Listenerãå¨å¯å¨æ¶ï¼ServletContextListener çæ§è¡é¡ºåºä¸web.xml ä¸çé 置顺åºä¸è´ï¼ åæ¢æ¶æ§è¡é¡ºåºç¸åã
<listener>
<listenerâclass>org.springframework.web.context.ContextLoaderListener</listenerâclass>
</listener>
5.5 Filteré ç½®
filter ç¨äºé ç½®webåºç¨è¿æ»¤å¨ï¼ ç¨æ¥è¿æ»¤èµæºè¯·æ±åååºã ç»å¸¸ç¨äºè®¤è¯ãæ¥å¿ãå å¯ãæ°æ®è½¬æ¢çæä½ï¼
- å¨ HttpServletRequestå°è¾¾ Servletä¹å,æ¦æªå®¢æ·ç HttpServletRequestï¼æ ¹æ®éè¦æ£æ¥ HttpServletRequestï¼ä¹å¯ä»¥ä¿®æ¹ HttpServletRequest头åæ°æ®
- å¨ HttpServletResponseå°è¾¾å®¢æ·ç«¯ä¹åï¼æ¦æª HttpServletResponseï¼æ ¹æ®éè¦æ£æ¥ HttpServletResponse,ä¹å¯ä»¥ä¿®æ¹ HttpServletResponse头åæ°æ®
é ç½®å¦ä¸ï¼
<filter>
<filterâname>myFilter</filterâname>
<filterâclass>cn.itcast.web.MyFilter</filterâclass>
<asyncâsupported>true</asyncâsupported>
<initâparam>
<paramâname>language</paramâname>
<paramâvalue>CN</paramâvalue>
</initâparam>
</filter>
<filterâmapping>
<filterâname>myFilter</filterâname>
<urlâpattern>/*</urlâpattern>
</filterâmapping>
é 置说æï¼
1ï¼ filterânameï¼ ç¨äºæå®è¿æ»¤å¨å称ï¼å¨web.xmlä¸ï¼è¿æ»¤å¨åç§°å¿ é¡»å¯ä¸ã
2ï¼ filterâclass ï¼ è¿æ»¤å¨çå ¨éå®ç±»åï¼ è¯¥ç±»å¿ é¡»å®ç°Filteræ¥å£ã
3ï¼ asyncâsupportedï¼ è¯¥è¿æ»¤å¨æ¯å¦æ¯æå¼æ¥
4ï¼ initâparam ï¼ç¨äºé ç½®Filterçåå§ååæ°ï¼ å¯ä»¥é ç½®å¤ä¸ªï¼ å¯ä»¥éè¿ FilterConfig.getInitParameterè·å
5ï¼ urlâpatternï¼ æå®è¯¥è¿æ»¤å¨éè¦æ¦æªçURLã
5.6 欢è¿é¡µé¢é ç½®
welcome-file-list ç¨äºæå®webåºç¨ç欢è¿æ件å表ã å°è¯è¯·æ±ç顺åºï¼ä»ä¸å°ä¸ã
<welcomeâfileâlist>
<welcomeâfile>index.html</welcomeâfile>
<welcomeâfile>index.htm</welcomeâfile>
<welcomeâfile>index.jsp</welcomeâfile>
</welcomeâfileâlist>
5.7 é误页é¢é ç½®
error-page ç¨äºé ç½®Webåºç¨è®¿é®å¼å¸¸æ¶å®åå°ç页é¢ï¼æ¯æHTT Pååºç åå¼å¸¸ç±»ä¸¤ç§å½¢å¼ã
<errorâpage>
<errorâcode>404</errorâcode>
<location>/404.html</location>
</errorâpage>
<errorâpage>
<errorâcode>500</errorâcode>
<location>/500.html</location>
</errorâpage>
<errorâpage>
<exceptionâtype>java.lang.Exceptionå¼å¸¸ç±»å</exceptionâtype>
<location>/error.jsp</location>
</errorâpage>
6.Tomcat 管çé ç½®
ä»æ©æçTomcatçæ¬å¼å§ï¼å°±æä¾äºWebçç管çæ§å¶å°ï¼ä»ä»¬æ¯ä¸¤ä¸ªç¬ç«çWebåºç¨ï¼ä½äºwebapps ç®å½ä¸ãTomcat æä¾ç管çåºç¨æç¨äºç®¡ççHost ç
host-manager
åç¨äºç®¡çWebåºç¨ç
manager
ã
6.1 host-manager
Tomcatå¯å¨ä¹åï¼å¯ä»¥éè¿ http://localhost:8080/host-manager/html 访é®è¯¥Webåºç¨ã
host-manager é»è®¤æ·»å äºè®¿é®æéæ§å¶ï¼å½æå¼ç½åæ¶ï¼éè¦è¾å ¥ç¨æ·ååå¯ç ï¼conf/tomcat-users.xmlä¸é ç½®ï¼ ã
æ以è¦æ³è®¿é®è¯¥é¡µé¢ï¼éè¦å¨conf/tomcat-users.xml ä¸é ç½®ï¼å¹¶åé 对åºçè§è²ï¼
1ï¼ admin-guiï¼ç¨äºæ§å¶é¡µé¢è®¿é®æé
2 ï¼admin-script ï¼ç¨äºæ§å¶ä»¥ç®åææ¬çå½¢å¼è¿è¡è®¿é®
é ç½®å¦ä¸ï¼
<role rolename="adminâgui"/>
<role rolename="adminâscript"/>
<user username="itcast" password="itcast" roles="adminâscript,adminâgui"/>
ç»å½åï¼å°±å¯ä»¥çå°æ们é ç½®çhostæ ç¾äºãå¦ææä»¬å ³æä¸ä¸ªåï¼ä»è®²è®¿é®é»è®¤çhostãä¹å¯ä»¥å¨ææ·»å
6.2 manager
managerç访é®å°å为 http://localhost:8080/managerï¼ åæ ·ï¼ managerä¹æ·»å äºé¡µé¢è®¿é®æ§å¶ï¼å æ¤æ们éè¦ä¸ºç»å½ç¨æ·åé è§è²ä¸ºï¼
<role rolename="managerâgui"/>
<role rolename="managerâscript"/>
<user username="itcast"
password="itcast"
roles="adminâscript,adminâgui,managerâgui,managerâscript"/>
å°±å¯ä»¥çå°webåºç¨äº
å¨å¯ä»¥å¨Server Statusä¸çå°
- OSï¼å åä¿¡æ¯
- JVMï¼GC
- 线ç¨æ±
7.JVM é ç½®
æ常è§çJV Mé ç½®å½å±å ååé ï¼å 为å¨ç»å¤§å¤æ°æ åµä¸ï¼JV Mé»è®¤åé çå åå¯è½ä¸è½å¤æ»¡è¶³æ们çéæ±ï¼ç¹å«æ¯å¨ç产ç¯å¢ï¼æ¤æ¶éè¦æå¨ä¿®æ¹Tomcatå¯å¨æ¶çå ååæ°åé ã
7.1 JVMå å模åå¾
7.2 JVMé ç½®é项
ç¼è¾å¯å¨æ件çå 容ï¼
- windows å¹³å°(catalina.bat) ï¼
set JAVA_OPTS=âserver âXms2048m âXmx2048m âXX :MetaspaceSize=256m âXX :MaxMetaspaceSize=256m âXX :SurvivorRatio=8
- linux å¹³å°(catalina.sh) ï¼
JAVA_OPTS="âserver âXms1024m âXmx2048m âXX :MetaspaceSize=256m -XX :MaxMetaspaceSize=512m âXX :SurvivorRatio=8"
åæ°è¯´æ ï¼
åºå· | åæ° | å«ä¹ |
---|---|---|
1 | -Xms | å å åçåå§å¤§å° |
2 | -Xmx | å å åçæ大大å°ãåä¸é¢ä¸è´å°±ä¸ä¼åè¿è¡ä¸ååäºï¼æ¨è |
3 | -Xmn | æ°ç代çå å大å°ï¼å®æ¹å»ºè®®æ¯æ´ä¸ªå ç 3/8ã |
4 | -XX:MetaspaceSize | å 空é´å ååå§å¤§å°ï¼ å¨JDK1.8çæ¬ä¹åé 置为 -XX:PermSizeï¼æ°¸ä¹ ä»£ï¼ |
5 | -XX:MaxMetaspaceSize | å 空é´å åæ大大å°ï¼ å¨JDK1.8çæ¬ä¹åé 置为 -XX:MaxPermSizeï¼æ°¸ä¹ ä»£ï¼ |
6 | -XX:InitialCodeCacheSize - XX:ReservedCodeCacheSize | 代ç ç¼ååºå¤§å° |
7 | -XX:NewRatio | 设置æ°ç代åè年代çç¸å¯¹å¤§å°æ¯ä¾ãè¿ç§æ¹å¼çä¼ç¹æ¯æ°ç代大å°ä¼éçæ´ä¸ªå 大å°å¨ææ©å±ãå¦ -XX:NewRatio=3 æå®è年代:æ°ç代为 3:1ã è年代å å 大å°ç 3/4ï¼æ°ç代å 1/4 ã |
8 | -XX:SurvivorRatio | æå®ä¼ç¸ååº (Eden) ä¸å¹¸ååºå¤§å°æ¯ä¾ãå¦ -XX:SurvivorRatio=10 表示ä¼ç¸ååº (Eden)æ¯ å¹¸ååº To 大å°ç 10 å (ä¹æ¯å¹¸ååº Fromç 10 å)ã æä»¥ï¼ ä¼ç¸ååº (Eden) å æ°ç代大å°ç 10/12ï¼ å¹¸ååº From å幸ååº To æ¯ä¸ªå æ°ç代ç 1/12 ã 注æï¼ ä¸¤ä¸ªå¹¸ååºæ°¸è¿æ¯ä¸æ ·å¤§çã |
Tomcat é群
8.1 ç®ä»
ç±äºåå°Tomcat çæ¿è½½è½åæ¯æéçï¼å½æ们çä¸å¡ç³»ç»ç¨æ·éæ¯è¾å¤§ï¼è¯·æ±ååæ¯è¾å¤§æ¶ï¼åå°Tomcatæ¯æä¸ä½çï¼è¿ä¸ªæ¶åï¼å°±éè¦æ建Tomcat çé群ï¼èç®åæ¯è¾æµç¨çåæ³å°±æ¯éè¿Nginxæ¥å®ç°Tomcaté群çè´è½½åè¡¡ã
tomcat1
客æ·ç«¯--->Nginx-->
tomcat2
8.2 ç¯å¢åå¤
8.2.2 åå¤Tomcat
å¨æå¡å¨ä¸, å®è£ 两å°tomcat, ç¶ååå«æ¹Tomcatæå¡å¨ç端å£å· :
8005 âââââââââ>8015 ââââåâââ>8025
8080 âââââââââ>8888 ââââåâââ>9999
8009 âââââââââ>8019 ââââåâââ>8029
8.2.3 å®è£ é ç½®Nginx
å¨å½åæå¡å¨ä¸ , å®è£ Nginx , ç¶ååé ç½®Nginx, é ç½®
nginx.conf
:
upstream serverpool{
server localhost:8888;
server localhost:9999;
}
server {
listen 99;
server_name localhost;
location / {
proxy_pass http://serverpool/;
}
}
proxy_passæå®äºå£°æçupstream
1 è´è½½åè¡¡çç¥
1). 轮询
æåºæ¬çé ç½®æ¹æ³ï¼å®æ¯upstream模åé»è®¤çè´è½½åè¡¡é»è®¤çç¥ãæ¯ä¸ªè¯·æ±ä¼ææ¶é´é¡ºåºéä¸åé å°ä¸åçå端æå¡å¨ã
upstream serverpool{
server localhost:8888;
server localhost:9999;
}
åæ°è¯´æ:
åæ° | æè¿° |
---|---|
fail_timeout | ä¸max_failsç»åä½¿ç¨ |
max_fails | 设置å¨fail_timeoutåæ°è®¾ç½®çæ¶é´å æ大失败次æ°ï¼å¦æå¨è¿ä¸ªæ¶é´å ï¼ææé对该æå¡å¨ç请æ±é½å¤±è´¥äºï¼é£ä¹è®¤ä¸ºè¯¥æå¡å¨ä¼è¢«è®¤ä¸ºæ¯åæºäº |
fail_time | æå¡å¨ä¼è¢«è®¤ä¸ºåæºçæ¶é´é¿åº¦,é»è®¤ä¸º10s |
backup | æ 记该æå¡å¨ä¸ºå¤ç¨æå¡å¨ãå½ä¸»æå¡å¨åæ¢æ¶ï¼è¯·æ±ä¼è¢«åéå°å®è¿é |
down | æ è®°æå¡å¨æ°¸ä¹ åæºäº |
2). weightæé
æéæ¹å¼ï¼å¨è½®è¯¢çç¥çåºç¡ä¸æå®è½®è¯¢çå çã
upstream serverpool{
server localhost:8888 weight=3;
server localhost:9999 weight=1;
}
weightåæ°ç¨äºæå®è½®è¯¢å çï¼weight çé»è®¤å¼ä¸º1ï¼weight çæ°å¼ä¸è®¿é®æ¯çææ£æ¯ï¼æ¯å¦8888æå¡å¨ä¸çæå¡è¢«è®¿é®çå ç为9999æå¡å¨çä¸åã
æ¤çç¥æ¯è¾éåæå¡å¨ç硬件é 置差å«æ¯è¾å¤§çæ åµã
3). ip_hash
æå®è´è½½åè¡¡å¨æç §åºäºå®¢æ·ç«¯IPçåé æ¹å¼ï¼è¿ä¸ªæ¹æ³ç¡®ä¿äºç¸åç客æ·ç«¯ç请æ±ä¸ç´åéå°ç¸åçæå¡å¨ï¼ä»¥ä¿è¯sessionä¼è¯ãè¿æ ·æ¯ä¸ªè®¿å®¢é½åºå®è®¿é®ä¸ä¸ªå端æå¡å¨ï¼å¯ä»¥è§£å³sessionä¸è½è·¨æå¡å¨çé®é¢ã
upstream serverpool{
ip_hash;
server 192.168.192.133:8080;
server 192.168.192.137:8080;
}
2 Sessionå ±äº«æ¹æ¡
å¨Tomcaté群ä¸ï¼å¦æåºç¨éè¦ç¨æ·è¿è¡ç»å½ï¼é£ä¹è¿ä¸ªæ¶åï¼ç¨äºtomcatåäºè´è½½åè¡¡ï¼åç¨æ·ç»å½å¹¶è®¿é®åºç¨ç³»ç»æ¶ï¼å°±ä¼åºç°é®é¢ ã
解å³ä¸è¿°é®é¢ï¼ æ以ä¸å ç§æ¹æ¡ï¼
8.4.1 ip_hash çç¥
å©ç¨ä¸é¢è´è½½åè¡¡ç®æ³çåå¸ç®æ³
ä¸ä¸ªç¨æ·åèµ·ç请æ±ï¼åªä¼è¯·æ±å°tomcat1ä¸è¿è¡æä½ï¼å¦ä¸ä¸ªç¨æ·åèµ·ç请æ±åªå¨ tomcat2ä¸è¿è¡æä½ ãé£ä¹è¿ä¸ªæ¶åï¼åä¸ä¸ªç¨æ·åèµ·ç请æ±ï¼é½ä¼éè¿nginx ç ip_hashçç¥ï¼å°è¯·æ±è½¬åå°å ¶ä¸çä¸å°Tomcatä¸ã
8.4.2 Sessionå¤å¶
å¨serv let_demo01 å·¥ç¨ä¸ , å¶ä½session.j sp页é¢ï¼åå«å°å·¥ç¨åæ¾å¨ä¸¤å° tomcat ç webapps/ ç®å½ä¸ï¼
<%@ page contentType="text/html;charset=UTFâ8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
TOMCAT â 9999 ï¼
<br/>
sessionID : <%=session.getId()%>
<br/>
<% Object loginUser = session.getAttribute("loginUser");
if(loginUser != null && loginUser.toString().length()>0){
out.println("session æå¼, loginUser = " + loginUser);
}else{
session.setAttribute("loginUser","ITCAST");
out.println("session 没æå¼");
}
%>
</body>
</html>
éè¿nginxè®¿é® ï¼ http://localhost:99/demo01/session.jsp ï¼è®¿é®å°ç两å°Tomcat åºç°çsessionIDæ¯ä¸ä¸æ ·çï¼
ä¸è¿°ç°è±¡ï¼å说æ两å°Tomcat çSessionåæ¯åçï¼å¹¶æ²¡æè¿è¡åæ¥ï¼è¿å¨é群ç¯å¢ä¸æ¯åå¨é®é¢çã
Sessionåæ¥çé ç½®å¦ä¸ï¼
1ï¼ å¨Tomcat ç
conf/server.xml
é ç½®å¦ä¸:
Engineæ ç¾ä¸
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
2 ï¼ å¨Tomcaté¨ç½²çåºç¨ç¨åº servlet_demo01 ç
web.xml
ä¸å å ¥å¦ä¸é ç½® ï¼
<distributable/>
3 ï¼ é ç½®å®æ¯ä¹åï¼ å次éå¯ä¸¤ä¸ª Tomcatæå¡ã
ä¸è¿°æ¹æ¡ï¼éç¨äºè¾å°çé群ç¯å¢ ï¼èç¹æ°ä¸è¶ è¿4个ï¼ï¼å¦æé群çèç¹æ°æ¯è¾å¤çè¯ï¼éè¿è¿ç§å¹¿æçå½¢å¼æ¥å®æSessionçå¤å¶ï¼ä¼æ¶è大éçç½ç»å¸¦å®½ï¼å½±åæå¡çæ§è½ã
8.4.3 SSOåç¹ç»å½
åç¹ç»å½ ï¼Single Sign Onï¼ï¼ç®ç§°ä¸º SSOï¼æ¯ç®åæ¯è¾æµè¡çä¼ä¸ä¸å¡æ´åç解å³æ¹æ¡ä¹ä¸ãSSOçå®ä¹æ¯å¨å¤ä¸ªåºç¨ç³»ç»ä¸ï¼ç¨æ·åªéè¦ç»å½ä¸æ¬¡å°±å¯ä»¥è®¿é®ææç¸äºä¿¡ä»»çåºç¨ç³»ç»ï¼ä¹æ¯ç¨æ¥è§£å³é群ç¯å¢Sessionå ±äº«çæ¹æ¡ä¹ä¸ ã
- tomcatåç»è®¤è¯æå¡ï¼è®¤è¯æå¡åºæ¾redis
é ç½®é¿è¿æ¥
1 为ä»ä¹è¦é ç½®é¿è¿æ¥
ä¸ä¸ªæ®éç请æ±æ¯ä»æç §ä¸å¾ 1->2->3->4 ç顺åºãä»æµè§å¨å° Nginxï¼åä» Nginx å° TomcatãTomcat å¤çå®åï¼åè¿åç» Nginxï¼æååä» Nginx è¿åç»æµè§å¨ã
+------------+ +------------+ +-------------+
| | 1 | | 2 | |
| æµ è§ å¨ +--------> | Nginx +-------> | Tomcat |
| | 4 | | 3 | |
| | <--------+ | <-------+ |
+------------+ +------------+ +-------------+
å¨è¿ä¸ªè¯·æ±è¿ç¨ä¸ï¼ä¸è¬ä»æµè§å¨å° Nginx æ¯çè¿æ¥ï¼å°±æ¯è¯·æ±åå»åå°±æå¼è¿æ¥ï¼ï¼è Nginx å° Tomcat å¯ä»¥æ¯çè¿æ¥ ææ¯ é¿è¿æ¥ï¼è¯·æ±è¿ååï¼è¿æ¥è¿ä¿æä¸æ®µæ¶é´ï¼ã为ä»ä¹ Nginx å° Tomcat ä¹é´è¦è®¾ç½®æé¿è¿æ¥å¢ï¼å 为è¿æ¥çå建ï¼ä¸æ¬¡æ¡æï¼æ¯éè¦è±è´¹ä¸äºæ¶é´çï¼å¦æ请æ±éé常大ï¼ä¸å¦åè¿æ¥æ± ä¸æ ·ä¿åä¸å®çè¿æ¥ï¼å½æ请æ±è¿æ¥æ¶å¤ç¨ä¸äºè¿æ¥ãèä¸è¿è½åå° time waitï¼å ³äº time wait 请åçï¼å ³äº time waitã
ä¸è¬æ¥è¯´ï¼
请æ±æ¹
å
被请æ±æ¹
é½å¯ä»¥ä¸»å¨æå¼è¿æ¥ã
请æ±æ¹
æå¼è¿æ¥æ¶æºæ¯è¾å¥½å¤æï¼å¦æè¦è¯·æ±çå 容é½å®æäºï¼å°±å¯ä»¥æå¼è¿æ¥äºãä½
被请æ±æ¹
çæå¼è¿æ¥çæ¶æºå°±ä¸å¥½å¤æäºï¼å 为
被请æ±æ¹
ä¸ç¥é
请æ±æ¹
ä¼åå¤å°æ¬¡è¯·æ±ãæ以ä¸è¬è¢«è¯·æ±æ¹è®¾ç½®çåæ°ç¸å¯¹å¤ä¸äºï¼ä¾å¦ï¼é¿è¿æ¥å¨å¤çå¤å°æ¬¡è¯·æ±åæå¼ãé¿è¿æ¥å¨ç»è¿å¤å°ç§åæå¼ççã
ä¸é¢è¯´ä¸ä¸
æµè§å¨->Nginx->Tomcat
设置é¿è¿æ¥çæ¹æ³ãé¦å 说ä¸ä¸ Nginx ç设置æ¹æ³ã
1ï¼Nginx 设置
1. Nginx - åå代ç
nginx.confï¼
http {
...
##
# ä¸Clientè¿æ¥çé¿è¿æ¥é
ç½®
##
# http://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_requests
# 设置éè¿"ä¸ä¸ªåæ´»é¿è¿æ¥"éè¾¾çæ大请æ±æ°ï¼é»è®¤æ¯100ï¼å»ºè®®æ ¹æ®å®¢æ·ç«¯å¨"keepalive"åæ´»æ¶é´å
çæ»è¯·æ±æ°æ¥è®¾ç½®ï¼
# å½éè¾¾å°å个é¿è¿æ¥ç请æ±æ°è¶
è¿è¯¥å¼åï¼è¯¥è¿æ¥å°±ä¼è¢«å
³éãï¼éè¿è®¾ç½®ä¸º5ï¼éªè¯ç¡®å®æ¯è¿æ ·ï¼
keepalive_requests 8192;
# http://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_timeout
# 第ä¸ä¸ªåæ°è®¾ç½®"keep-alive客æ·ç«¯é¿è¿æ¥"å°å¨"æå¡å¨ç«¯"继ç»æå¼çè¶
æ¶æ¶é´ï¼é»è®¤æ¯75ç§ï¼
# å»ºè®®æ ¹æ®å
·ä½ä¸å¡è¦æ±æ¥ï¼ä½å¿
é¡»è¦æ±ææ客æ·ç«¯è¿æ¥ç"Keep-Alive"头信æ¯ä¸è¯¥å¼è®¾ç½®çç¸å
# (è¿éæ¯5åé)ï¼åæ¶ä¸ä¸æ¸¸æå¡å¨(Tomcat)ç设置æ¯ä¸æ ·çï¼
# å¯éç第äºä¸ªåæ°è®¾ç½®âKeep-Alive: timeout=timeâååºå¤´å段çå¼ã设置第äºä¸ªåæ°åï¼è¿ä¸ªæ¶é´ä¼å®ä¼ åç»å®¢æ·ç«¯ï¼ä¾å¦ï¼æµè§å¨ï¼
keepalive_timeout 300s 300s;
...
include /etc/nginx/web_servers.conf;
}
web_servers.confï¼
upstream web_server {
server 127.0.0.1:8080;
# http://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive
# è¿æ¥å° upstreamï¼ä¹å°±æ¯ Tomcatï¼çæ大并å空é²keepaliveé¿è¿æ¥æ°ï¼ä¹å°±æ¯æå¤åªè½å建
# è¿ä¹å¤é¿è¿æ¥ï¼å¨è¿ä¹ä¸åå建è¿æ¥çè¯ï¼é½æ¯çè¿æ¥ã
#ï¼é»è®¤æ¯æªè®¾ç½®ï¼å»ºè®®ä¸Tomcat Connectorä¸çmaxKeepAliveRequestså¼ä¸æ ·ï¼ã
# å¦æ并åæ°å¤§äºè¿ä¸ªæ°å¼çè¯ï¼æ ¹æ®æ
åµå¯è½ä¼å建ä¸äº`çè¿æ¥`æ¥å¤ç请æ±ãå¯ä»¥ä½¿ç¨
# `netstat -an|grep TIME|awk '{if($4~"10001") print}'|wc -l`å½ä»¤æ¥æ¥çï¼
# å
¶ä¸`10001`æ¯ Nginx ç端å£å·ï¼æ¹æèªå·± Nginx ç端å£ã
#
# å½è¿ä¸ªæ°è¢«è¶
è¿æ¶ï¼ä½¿ç¨"æè¿æå°ä½¿ç¨ç®æ³(LUR)"æ¥æ·æ±°å¹¶å
³éè¿æ¥ã
keepalive 8;
}
server {
listen 80;
server_name lihg.com www.lihg.com;
location / {
proxy_pass http://web_server;
##
# ä¸ä¸æ¸¸æå¡å¨(Tomcat)建ç«keepaliveé¿è¿æ¥çé
ç½®ï¼å¯åèä¸é¢çkeepaliveé¾æ¥éç
# "For HTTP"é¨å
##
# http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_http_version
# 设置代ççHTTPåè®®çæ¬ï¼é»è®¤æ¯1.0çæ¬ï¼
# 使ç¨keepaliveè¿æ¥çè¯ï¼å»ºè®®ä½¿ç¨1.1çæ¬ã
proxy_http_version 1.1;
# http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_set_header
# å
许éæ°å®ä¹æ追å å段å°ä¼ éç»ä»£çæå¡å¨ç请æ±å¤´ä¿¡æ¯ï¼é»è®¤æ¯closeãå¦ææè¿ä¸ª header 设置æ空çè¯ï¼Nginx ä¼å Tomcat ä¼ é`close`ï¼è¿æ · Tomcat å°±ä¼å¨å¤çå®è¯·æ±åå
³éè¿æ¥ï¼è¿ä¸ªé¨åæ¯æ¨ççï¼æ²¡æå®é
éªè¯æ¯ Tomcat å
³çï¼è¿æ¯ Nginx å
³çï¼
proxy_set_header Connection "";
}
}
ä¸é¢æ¯ä¸ªåæ°çåè½é½å¨æ³¨éä¸ä»ç»äºï¼ä¸é¢ç®åæ»ç»ä¸ä¸ä½¿ç¨ä¸æ³¨æçå°æ¹ï¼
- keepalive_timeout å keepalive_requests æ¯å½±åé¿è¿æ¥å¦ä½å ³éçåæ°ã å¦æçæ§é¿è¿æ¥å¨è¿è¡ä¸ï¼ä¸é¨åçè¿æ¥è¢«å ³éäºï¼ä¹å°±æ¯æ²¡æäºï¼ï¼å¯è½æ¯ keepalive_requests å½±åçï¼å ä¸ºè¶ è¿äºå个é¿è¿æ¥ç请æ±æ大次æ°ï¼ï¼å¦æ大æ¹éè¢«å ³éäºï¼å¯è½æ¯å keepalive_timeout æå ³ã
- upstream ä¸ç keepalive æ¯éå¶å¯¹ Tomcat å建é¿è¿æ¥ä¸ªæ°çéå¶ãä¸æ¯
ï¼èæ¯å建çé¿è¿æ¥æ°ï¼ä¸è½è¶ è¿è¿ä¸ªéå¶ï¼å¨è¿ä¹ä¸å¯ä»¥åå建è¿æ¥ï¼åªä¸è¿å建çé½æ¯çè¿æ¥ãä¸è½åå»ºè¶ è¿è¿ä¸ªæ°çè¿æ¥
- proxy_http_version å proxy_set_header æ ¹æ® http çæ¬ï¼1.0/1.1ï¼è®¾ç½®ææä¸åï¼è¯·æ³¨æã
å ³äº Nginx ç设置ï¼å¯ä»¥åèï¼Alphabetical index of directives
2ï¼Tomcat 设置
conf/server.xmlï¼
<!--
maxThreadsï¼ç±æ¤è¿æ¥å¨å建çæ大请æ±å¤ç线ç¨æ°ï¼è¿å³å®å¯åæ¶å¤ççæ大并å请æ±æ°ï¼é»è®¤ä¸º200ï¼
minSpareThreadsï¼ä¿æè¿è¡ç¶æçæå°çº¿ç¨æ°ï¼é»è®¤ä¸º10ï¼
acceptCountï¼æ¥æ¶ä¼ å
¥çè¿æ¥è¯·æ±çæ大éåé¿åº¦ï¼é»è®¤éåé¿åº¦ä¸º100ï¼
connectionTimeoutï¼å¨æ¥æ¶ä¸æ¡è¿æ¥ä¹åï¼è¿æ¥å¨å°ä¼çå¾
请æ±URIè¡ç毫ç§æ°ï¼é»è®¤ä¸º60000ï¼60ç§ï¼
maxConnectionsï¼å¨ä»»ä½ç»å®çæ¶é´ï¼æå¡å¨è½æ¥æ¶åå¤ççæ大è¿æ¥æ°ï¼NIOçé»è®¤å¼ä¸º10000ï¼
keepAliveTimeoutï¼å¨å
³éè¿æ¡è¿æ¥ä¹åï¼è¿æ¥å¨å°çå¾
å¦ä¸ä¸ªHTTP请æ±ç毫ç§æ°ï¼é»è®¤ä½¿ç¨connectionTimeoutå±æ§å¼ï¼
maxKeepAliveRequestsï¼å Nginx ä¸ç keepalive_request å±æ§çåè½æ¯ä¸æ ·çï¼é»è®¤ä¸º100ï¼
enableLookupsï¼å¯ç¨DNSæ¥è¯¢ï¼é»è®¤æ¯DNSæ¥è¯¢è¢«ç¦ç¨ï¼
compressionï¼è¿æ¥å¨æ¯å¦å¯ç¨HTTP/1.1 GZIPå缩ï¼ä¸ºäºèçæå¡å¨å¸¦å®½
compressionMinSizeï¼æå®è¾åºååºæ°æ®çæå°å¤§å°ï¼é»è®¤ä¸º2048ï¼2KBï¼
compressableMimeTypeï¼å¯ä½¿ç¨HTTPå缩çæ件类å
serverï¼è¦çHTTPååºçServer头信æ¯
-->
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="768"
minSpareThreads="512"
acceptCount="128"
connectionTimeout="1000"
maxConnections="1024"
keepAliveTimeout="300000"
maxKeepAliveRequests="768"
enableLookups="false"
URIEncoding="utf-8"
redirectPort="8443"
compression="on" compressionMinSize="1024" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,application/json,application/xml" server="webserver" />
è¿éè¦æ³¨æçæ¯ï¼
- maxKeepAliveRequests å±æ§å Nginx ä¸ç keepalive_request å±æ§çåè½æ¯ä¸æ ·çï¼æ¯äºç¸å½±åçï¼å³è¾¾å°ä¸¤è¾¹ä¸æå°ç设置åå ³éè¿æ¥ãå¦æ Tomcat è¿è¾¹è®¾ç½®çæ¯ 5ï¼è Nginx é£è¾¹è®¾ç½®çæ¯ 10 çè¯ï¼Tomcat å° 5 æ¶å°±ä¼å ³éè¿ä¸ªé¿è¿æ¥ã
- keepAliveTimeout å±æ§å Nginx ä¸ç keepalive_timeout åè½æ¯ä¸æ ·çï¼ä¹æ¯äºç¸å½±åçï¼åä¸ã
- å¦æ使ç¨æ¯ Springboot å åµ Tomcat çè¯ï¼æ¯æ æ³å¨ application.properties ä¸è®¾ç½® maxKeepAliveRequests å±æ§çãå¦æä½¿ç¨ Bean çæ¹å¼æ¥è®¾ç½®ï¼å ¶å®å¨ Springboot ä¸æ æ³è®¾ç½®çå±æ§ä¹å¯ä»¥ä½¿ç¨æ¤æ¹æ³æ¥è®¾ç½®ãå¦å¤ï¼å¦ææ¯å¨ application.properties æ件ä¸è®¾ç½®äºå±æ§ï¼ä¹å¨ Bean 声ææ¶è®¾ç½®äºå±æ§çè¯ï¼application.properties ä¸è®¾ç½®çå±æ§ä¼å çæã
@Bean
public EmbeddedServletContainerFactory servletContainerFactory() {
TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
factory.addConnectorCustomizers(connector -> {
((AbstractHttp11Protocol) connector.getProtocolHandler()).setMaxKeepAliveRequests(-1);
((AbstractHttp11Protocol) connector.getProtocolHandler()).setConnectionTimeout(20000);
});
return factory;
}
å ³äº Tomcat ç connector 设置ï¼å¯ä»¥åèï¼The HTTP Connector
å ³äº Springboot 设置ï¼å¯ä»¥åèï¼Appendix A. Common application properties
3ãæµè¯
1ï¼æµè¯å½ä»¤
为äºæµè¯é¿è¿æ¥è®¾ç½®æ¯å¦çæï¼å¯ä»¥ä½¿ç¨ä¸é¢ä¸¤ä¸ªå½ä»¤æ¥æµè¯ã
- abï¼ç¨æ¥è¿è¡ååæµè¯çå½ä»¤ãä¾å¦ï¼
ï¼å¯ç¨ 8 个å¼æ¥å¤çï¼åéæ»å ± 8000 个请æ±ãab -c 8 -n 8000 127.0.0.1:10000/crm/
- netstatï¼ç¨æ¥æ¥çè¿æ¥çç¶æãä¾å¦ï¼
ï¼æ¥ç Nginx å° Tomcat çæ£å¨ä½¿ç¨è¿æ¥ãå¦ææ³è¦æ¯ç§å·æ°ï¼å¯ä»¥è¿ä¹åï¼netstat -an|grep ES|awk '{if($5~10001) print}'|wc -l
while [ 1 -eq 1 ] ; do netstat -an|grep ES|awk '{if($5~10001) print}'|wc -l; sleep 1; echo ; done
2ï¼æµè¯åå¤
为äºæµè¯é¿è¿æ¥æ¯å¦èµ·ä½ç¨ï¼æ好æ Tomcat é¨åæä¸é¢è®¾ç½®ï¼
- MaxKeepAliveRequestsï¼è®¾ç½®æ -1ãè¿æ ·å°±ä¸ä¼å 为请æ±ä¸ªæ°ï¼é æè¿æ¥ç
åæå¼
ãç¨ netstat æ¥çè¿æ¥æ¶ï¼çå°çå°±æ¯ç¨³å®çç¶æãéæ°å建
- ConnectionTimeoutï¼è®¾ç½®æä¸ä¸ªæ¯è¾å¤§çå¼ï¼ä¾å¦ 60 ç§ï¼è¿æ ·ä¸ä¼å 为åæµæ¶é´é¿ï¼é æè¿æ¥ç
åæå¼
ãéæ°å建
Nginx ç keepalive_requests å keepalive_timeout å Tomcat ä¸é¢ä¸¤ä¸ªå¼ä½ç¨ç¸åï¼æ好设置æä¸æ ·ï¼ä»¥å é æä¸ç¨³å®ï¼èä¸ç¥éæ¯åªåºç°çåå ã
å¨æç §ä¸é¢ç设置è¿è¡æµè¯åï¼ä¿åé¿è¿æ¥å¯ç¨åï¼å¯ä»¥ä¿®æ¹ä¸é¢çåæ°ï¼æ¥æ¥çåæ°çä½ç¨åé¢æ³ç»ææ¯å¦ç¸åã
3ï¼è¿è¡æµè¯
1ï¼å¯å¨ä¸ä¸ª Terminalï¼æ§è¡
while [ 1 -eq 1 ] ; do netstat -an|grep ES|awk '{if($5~10001) print}'|wc -l; sleep 1; echo ; done
ãè¿æ ·å°±å¯ä»¥æ¥çè¿æ¥å建ç个æ°äºãæ¾ç¤ºå¦ä¸ï¼
0
0
0
0
2ï¼åæå¼ä¸ä¸ª Terminalï¼ä½¿ç¨ ab å½ä»¤ï¼è¿è¡åæµï¼
ab -c 8 -n 8000 127.0.0.1:10000/crm/
ab ç»æå¦ä¸ï¼
This is ApacheBench, Version 2.3 <$Revision: 1807734 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient)
Completed 800 requests
Completed 1600 requests
Completed 2400 requests
Completed 3200 requests
Completed 4000 requests
Completed 4800 requests
Completed 5600 requests
Completed 6400 requests
Completed 7200 requests
Completed 8000 requests
Finished 8000 requests
Server Software: nginx/1.15.1
Server Hostname: 127.0.0.1
Server Port: 10000
Document Path: /crm/
Document Length: 9 bytes
Concurrency Level: 8
Time taken for tests: 12.685 seconds
Complete requests: 8000
Failed requests: 0
Total transferred: 1304000 bytes
HTML transferred: 72000 bytes
Requests per second: 630.67 [#/sec] (mean)
Time per request: 12.685 [ms] (mean)
Time per request: 1.586 [ms] (mean, across all concurrent requests)
Transfer rate: 100.39 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 5.0 0 147
Processing: 1 11 16.4 7 316
Waiting: 0 10 15.8 6 310
Total: 1 12 17.5 8 316
Percentage of the requests served within a certain time (ms)
50% 8
66% 12
75% 15
80% 16
90% 23
95% 30
98% 45
99% 78
100% 316 (longest request)
æ¥çè¿æ¥ç¶æå½ä»¤è¾åºå¦ä¸ãä»ä¸é¢è¾åºå¯ä»¥çåºï¼åå»ºäº 8 个é¿è¿æ¥ãè¿æ¥ç个æ°ï¼åºè¯¥å Nginx ä¸ upstream ä¸ç keepalive çåæ°ä¸è´ã
0
0
8
8
8
8
8
8
8
3ï¼ç»è¿ Nginx ç keepalive_timeout æ¶é´åï¼é¿è¿æ¥æ°åºè¯¥åæ 0ã
0
0
0
åè
- [线ä¸é®é¢] Nginxä¸TomcatãClientä¹é´è¯·æ±çé¿è¿æ¥é ç½®ä¸ä¸è´é®é¢åæ解å³
- [KeepAliveï¼ä½ ä¼åäºå](
Tomcat å®å ¨
9.1 é ç½®å®å ¨
1ï¼ å é¤webapps ç®å½ä¸çæææ件ï¼ç¦ç¨tomcat管ççé¢ï¼
2 ï¼ æ³¨éæå é¤tomcat-users.xmlæ件å çææç¨æ·æéï¼
3 ï¼ æ´æ¹å ³étomcatæ令æç¦ç¨ï¼
tomcat çserver.xmlä¸å®ä¹äºå¯ä»¥ç´æ¥å ³é Tomcat å®ä¾ç管çç«¯å£ ï¼é»è®¤8005ï¼ã å¯ä»¥éè¿ telnet è¿æ¥ä¸8005该端å£ä¹åï¼è¾å ¥ SHUT DOWN ï¼æ¤ä¸ºé»è®¤å ³éæ令ï¼å³å¯å ³é Tomcat å®ä¾ ï¼æ³¨æï¼æ¤æ¶è½ç¶å®ä¾å ³éäºï¼ä½æ¯è¿ç¨è¿æ¯åå¨çï¼ãç±äºé»è®¤å ³é Tomcat ç端å£åæ令é½å¾ç®åãé»è®¤ç«¯å£ä¸º8005ï¼æ令为SHUT DOWN ã
æ¹æ¡ä¸ï¼ æ´æ¹ç«¯å£å·åæ令
<Server port="8456" shutdown="itcast_shut">
æ¹æ¡äºï¼ ç¦ç¨8005端å£ï¼
<Server port="â1" shutdown="SHUTDOWN">
4 ï¼ å®ä¹é误页é¢
å¨webapps/ ROOT ç®å½ä¸å®ä¹éè¯¯é¡µé¢ 404.htmlï¼500.htmlï¼
ç¶åå¨tomcat/conf/web.xmlä¸è¿è¡é ç½® ï¼ é ç½®é误页é¢ï¼
<errorâpage>
<errorâcode>404</errorâcode>
<location>/404.html</location>
</errorâpage>
<errorâpage>
<errorâcode>500</errorâcode>
<location>/500.html</location>
</errorâpage>
è¿æ ·é ç½®ä¹åï¼ç¨æ·å¨è®¿é®èµæºæ¶åºç°404,500è¿æ ·çå¼å¸¸ï¼å°±è½çå°æ们èªå®ä¹çé误 页é¢ï¼èä¸ä¼çå°å¼å¸¸çå æ ä¿¡æ¯ï¼æé«äºç¨æ·ä½éªï¼ä¹ä¿éäºæå¡çå®å ¨æ§ã
9.2 åºç¨å®å ¨
å¨å¤§é¨åçWebåºç¨ä¸ï¼ç¹å«æ¯ä¸äºåå°åºç¨ç³»ç»ï¼é½ä¼å®ç°èªå·±çå®å ¨ç®¡ç模å ï¼æé模åï¼ï¼ç¨äºæ§å¶åºç¨ç³»ç»çå®å ¨è®¿é®ï¼åºæ¬å å«ä¸¤ä¸ªé¨åï¼è®¤è¯ ï¼ç»å½/åç¹ç»å½ï¼åææ ï¼åè½æéãæ°æ®æéï¼ä¸¤ä¸ªé¨åã
对äºå½åçä¸å¡ç³»ç»ï¼å¯ä»¥èªå·±åä¸å¥éç¨äºèªå·±ä¸å¡ç³»ç»çæé模åï¼ä¹æå¾å¤çåºç¨ç³»ç»ç´æ¥ä½¿ç¨ä¸äºåè½å®åçå®å ¨æ¡æ¶ï¼å°å ¶éæå°æ们çwebåºç¨ä¸ï¼å¦ï¼
SpringSecurity
ã
Apache Shiro
çã
9.3 ä¼ è¾å®å ¨
9.3.1 HTTPSä»ç»
HTTPSçå ¨ç§°æ¯è¶ ææ¬ä¼ è¾å®å ¨åè®® ï¼Hypertext Transfer Protocol Secure ï¼ï¼æ¯ä¸ç§ç½ç»å®å ¨ä¼ è¾åè®®ãå¨HTT Pçåºç¡ä¸å å ¥SSL/TLSæ¥è¿è¡æ°æ®å å¯ï¼ä¿æ¤äº¤æ¢æ°æ®ä¸è¢«æ³é²ãçªåã
SSL å TLS æ¯ç¨äºç½ç»éä¿¡å®å ¨çå å¯åè®®ï¼å®å 许客æ·ç«¯åæå¡å¨ä¹é´éè¿å®å ¨é¾æ¥éä¿¡ãSSL åè®®ç3个ç¹æ§ï¼
- 1ï¼ ä¿å¯ï¼éè¿SSLé¾æ¥ä¼ è¾çæ°æ®æ¶å å¯çã
- 2 ï¼ é´å«ï¼éä¿¡åæ¹ç身份é´å«ï¼é常æ¯å¯éçï¼åè³å°æä¸æ¹éè¦éªè¯ã
- 3 ï¼ å®æ´æ§ï¼ä¼ è¾æ°æ®çå®æ´æ§æ£æ¥ã
ä»æ§è½è§åº¦èèï¼å 解å¯æ¯ä¸é¡¹è®¡ç®æè´µçå¤çï¼å 为尽éä¸è¦å°æ´ä¸ªWebåºç¨éç¨SSL é¾æ¥ï¼ å®é é¨ç½²è¿ç¨ä¸ï¼ éæ©æå¿ è¦è¿è¡å®å ¨å å¯çé¡µé¢ ï¼åå¨ææä¿¡æ¯ä¼ è¾ç页é¢ï¼ éç¨SSLéä¿¡ã
HTTPSåHTT Pçåºå«ä¸»è¦ä¸ºä»¥ä¸åç¹ï¼
1ï¼ HTT PSåè®®éè¦å°è¯ä¹¦é¢åæºæCA ç³è¯·SSLè¯ä¹¦, ç¶åä¸ååè¿è¡ç»å®ï¼HTT Pä¸ç¨ç³ 请è¯ä¹¦ï¼
2 ï¼ HTT Pæ¯è¶ ææ¬ä¼ è¾åè®®ï¼å±äºåºç¨å±ä¿¡æ¯ä¼ è¾ï¼HTT PS åæ¯å ·æSSLå å¯ä¼ å®å ¨æ§ä¼ è¾åè®®ï¼å¯¹æ°æ®çä¼ è¾è¿è¡å å¯ï¼ç¸å½äºHTT Pçå级çï¼
3 ï¼ HTT PåHTT PS使ç¨çæ¯å®å ¨ä¸åçè¿æ¥æ¹å¼ï¼ç¨ç端å£ä¹ä¸ä¸æ ·ï¼åè æ¯8080ï¼åè æ¯8443 ã
4 ï¼ HTT Pçè¿æ¥å¾ç®åï¼æ¯æ ç¶æçï¼HTT PSåè®®æ¯ç±SSL+HTT Påè®®æ建çå¯è¿è¡å å¯ä¼ è¾ã身份认è¯çç½ç»åè®®ï¼æ¯HTT Påè®®å®å ¨ã
HTTPSåè®®ä¼å¿ï¼
1ï¼ æé«ç½ç«æåï¼æå©äºSEOãè°·æå·²ç»å ¬å¼å£°æ两个ç½ç«å¨æç´¢ç»ææ¹é¢ç¸åï¼å¦æä¸ä¸ªç½ç«å¯ç¨äºSSLï¼å®å¯è½ä¼è·å¾ç¥é«äºæ²¡æSSLç½ç«çç级ï¼èä¸ç¾åº¦ä¹è¡¨æ对å®è£ äºSSLçç½ç«è¡¨ç¤ºå好ãå æ¤ï¼ç½ç«ä¸çå 容ä¸å¯ç¨SSLé½æææ¾çSEOä¼å¿ã
2 ï¼ éç§ä¿¡æ¯å å¯ï¼é²æ¢æµéå«æãç¹å«æ¯æ¶åå°éç§ä¿¡æ¯çç½ç«ï¼äºèç½å¤§åçæ°æ®æ³é²çäºä»¶é¢ååçï¼ç½ç«è¿è¡ä¿¡æ¯å å¯å¿å¨å¿ è¡ã
3 ï¼ æµè§å¨åä¿¡ä»»ã èªä»å大主æµæµè§å¨å¤§åæ¯æHTT PSåè®®ä¹åï¼è®¿é®HTT Pçç½ç«é½ä¼æ示âä¸å®å ¨â çè¦åä¿¡æ¯ã
9.3.2 Tomcatæ¯æHTTPS
1ï¼ çæç§é¥åºæ件ã keytoolæ¯JDKæä¾çå·¥å ·
keytool âgenkey âalias tomcat âkeyalg RSA âkeystore tomcatkey.keystore
- genkeyçæè¯ä¹¦
- aliaså«å
- keyalg
- keystoreå¾åªä¸ªè¯ä¹¦æ件ä¸åå¨
è¾å ¥å¯¹åºçå¯é¥åºå¯ç ï¼ ç§é¥å¯ç çä¿¡æ¯ä¹åï¼ä¼å¨å½åæ件夹ä¸åºç°ä¸ä¸ªç§é¥åºæ件ï¼tomcatkey.keystore
2 ï¼ å°ç§é¥åºæ件
tomcatkey.keystore
å¤å¶å°
tomcat/conf
ç®å½ä¸ã
3 ï¼ é ç½®
tomcat/conf/server.xml
<Connector port="8443"
protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" schema="https" secure="true" SSLEnabled="true">
<SSLHostConfig certificateVerification="false">
<Certificate certificateKeystoreFile="D:/DevelopProgramFile/apacheâtomcatâ8.5.42âwindowsâx64/apacheâtomcatâ8.5.42/conf/tomcatkey.keystore"
certificateKeystorePassword="itcast" type="RSA" />
</SSLHostConfig>
</Connector>
4 ï¼è®¿é®Tomcat ï¼ä½¿ç¨httpsåè®®ã
Tomcat æ§è½è°ä¼
10.1 Tomcat æ§è½æµè¯
对äºç³»ç»æ§è½ï¼ç¨æ·æç´è§çæåå°±æ¯ç³»ç»çå è½½åæä½æ¶é´ï¼å³ç¨æ·æ§è¡æ项æä½çèæ¶ãä»æ´ä¸ºä¸ä¸çè§åº¦ä¸è®²ï¼æ§è½æµè¯å¯ä»¥ä»ä»¥ä¸ä¸¤ä¸ªææ éåã
- ååºæ¶é´ï¼å¦ä¸æè¿°ï¼ä¸ºæ§è¡æ个æä½çèæ¶ã大å¤æ°æ åµä¸ï¼æ们éè¦é对åä¸ä¸ªæä½æµè¯å¤æ¬¡ï¼ä»¥è·åæä½çå¹³åååºæ¶é´ã
- ååéï¼å³å¨ç»å®çæ¶é´å ï¼ç³»ç»æ¯æçäºå¡æ°éï¼è®¡ç®åä½ä¸º TPSã
é常æ åµä¸ï¼æ们éè¦åå©äºä¸äºèªå¨åå·¥å ·æ¥è¿è¡æ§è½æµè¯ï¼å 为æå¨æ¨¡æ大éç¨æ·ç并å访é®å ä¹æ¯ä¸å¯è¡çï¼èä¸ç°å¨å¸é¢ä¸ä¹æå¾å¤çæ§è½æµè¯å·¥å ·å¯ä»¥ä½¿ç¨ï¼å¦ï¼
A pacheBenchãA pacheJMeterãWCAT ãWebPolygraphãLoadRunnerã
æ们课ç¨ä¸ä¸»è¦ä»ç»ä¸¤æ¬¾å è´¹çå·¥å ·ï¼A pacheBenchã
10.1.1 ApacheBench
ApacheBench
A pacheBench(ab)æ¯ä¸æ¬¾A pacheServeråºåçæµè¯å·¥å ·ï¼ç¨æ·æµè¯A pache Serverç æå¡è½å ï¼æ¯ç§å¤ç请æ±æ°ï¼ï¼å®ä¸ä» å¯ä»¥ç¨æ·A pacheçæµè¯ï¼è¿å¯ä»¥ç¨äºæµè¯ Tomcat ãNginx ãlighthttpãIISçæå¡å¨ã
1ï¼ å®è£
yum install httpdâtools
# æ¥ççæ¬
ab âV
2 ï¼ é¨ç½²warå ï¼ åå¤ç¯å¢
- å®è£ tomcat
- é¨ç½²warå°webappsä¸ ï¼å¯å¨Tomcat
3 ï¼ æµè¯æ§è½
ab ân 1000 âc 100 âp data.json âT application/json http://localhost:9000/course/search.do?page=1&pageSize=10
è¦ç¼å好data.jsonæ件
æ¥çæµè¯æ¥å
åæ°è¯´æ
åæ° | å«ä¹æè¿° |
---|---|
-n | å¨æµè¯ä¼è¯ä¸ææ§è¡ç请æ±ä¸ªæ°ï¼é»è®¤åªæ§è¡ä¸æ¬¡è¯·æ± |
-c | ä¸æ¬¡äº§çç请æ±ä¸ªæ°ï¼é»è®¤ä¸æ¬¡ä¸ä¸ª |
-p | å å«äºéè¦POSTçæ°æ®æ件 |
-t | æµè¯æè¿è¡çæ大ç§æ°ï¼é»è®¤æ²¡ææ¶é´éå¶ |
-T | POSTæ°æ®æéè¦ä½¿ç¨ç å¤´ä¿¡æ¯ |
-v | 设置æ¾ç¤ºä¿¡æ¯ç详ç»ç¨åº¦ |
-w | 以HTML表çæ ¼å¼è¾åºç»æï¼é»è®¤æ¯ç½è²èæ¯ç两å宽度çä¸å¼ 表 |
éè¦ææ
ææ | å«ä¹ |
---|---|
Server Software | æå¡å¨è½¯ä»¶ |
Server Hostname | 主æºå |
Server Port | 端å£å· |
Document Path | æµè¯çé¡µé¢ |
Document Length | æµè¯ç页é¢å¤§å° |
Concurrency Level | 并åæ° |
Time taken for tests | æ´ä¸ªæµè¯æç»çæ¶é´ |
Complete requests | å®æç请æ±æ°é |
Failed requests | 失败ç请æ±æ°éï¼è¿éç失败æ¯æ请æ±çè¿æ¥æå¡å¨ãåéæ°æ®ãæ¥æ¶æ°æ®çç¯èåçå¼å¸¸ï¼ä»¥åæ ååºåè¶ æ¶çæ åµã |
Write errors | è¾åºé误æ°é |
Total transferred | æ´ä¸ªåºæ¯ä¸çç½ç»ä¼ è¾éï¼è¡¨ç¤ºææ请æ±çååºæ°æ®é¿åº¦æ»åï¼å æ¬æ¯ä¸ªhttpååºæ°æ®ç头信æ¯åæ£ææ°æ®çé¿åº¦ã |
HTML transferred | æ´ä¸ªåºæ¯ä¸çHTMLå å®¹ä¼ è¾éï¼è¡¨ç¤ºææ请æ±çååºæ°æ®ä¸æ£ææ°æ®çæ»å |
Requests per second | æ¯ç§éå¹³åå¤çç请æ±æ°ï¼ç¸å½äº LR ä¸ç æ¯ç§äºå¡ æ°ï¼è¿ä¾¿æ¯æ们éç¹å ³æ³¨çååçï¼å®çäºï¼Complete requests / Time taken for tests |
Time per request | æ¯ä¸ªçº¿ç¨å¤ç请æ±å¹³åæ¶èæ¶é´ï¼ç¸å½äº LR ä¸ç å¹³åäºå¡ååºæ¶é´ï¼ç¨æ·å¹³å请æ±çå¾ æ¶é´ |
Transfer rate | å¹³åæ¯ç§ç½ç»ä¸çæµé |
Percentage of the requests served within a certain time (ms) | æå®æ¶é´éï¼æ§è¡ç请æ±ç¾åæ¯ |
10.2 Tomcat æ§è½ä¼å
10.2.1 JVMåæ°è°ä¼
Tomcatæ¯ä¸æ¬¾Javaåºç¨ï¼é£ä¹JV Mçé 置便ä¸å ¶è¿è¡æ§è½å¯åç¸å ³ï¼èJV Mä¼åçéç¹åéä¸å¨å ååé åGCçç¥çè°æ´ä¸ï¼å 为å åä¼ç´æ¥å½±åæå¡çè¿è¡æçåååéï¼ JVMåå¾åæ¶æºå¶åä¼ä¸åç¨åº¦å°å¯¼è´ç¨åºè¿è¡ä¸æãå¯ä»¥æ ¹æ®åºç¨ç¨åºçç¹ç¹ï¼éæ©ä¸ åçåå¾åæ¶çç¥ï¼è°æ´JV Måå¾åæ¶çç¥ï¼å¯ä»¥æ大åå°åå¾åæ¶æ¬¡æ°ï¼æååå¾åæ¶æçï¼æ¹åç¨åºè¿è¡æ§è½ã
1ï¼ JVMå ååæ°
åæ° | åæ°ä½ç¨ | ä¼å建议 |
---|---|---|
-server | å¯å¨Serverï¼ä»¥æå¡ç«¯æ¨¡å¼è¿è¡ | æå¡ç«¯æ¨¡å¼å»ºè®®å¼å¯ |
-Xms | æå°å å å | 建议ä¸-Xmx设置ç¸å |
-Xmx | æ大å å å | 建议设置为å¯ç¨å åç80% |
-XX:MetaspaceSize | å 空é´åå§å¼ | |
- XX:MaxMetaspaceSize | å 空é´æ大å å | é»è®¤æ é |
-XX:MaxNewSize | æ°ç代æ大å å | é»è®¤16M |
-XX:NewRatio | 年轻代åè年代大å°æ¯å¼ï¼åå¼ä¸ºæ´æ°ï¼é»è®¤ä¸º2 | ä¸å»ºè®®ä¿®æ¹ |
-XX:SurvivorRatio | Edenåºä¸Survivoråºå¤§å°çæ¯å¼ï¼åå¼ä¸ºæ´æ°ï¼é»è®¤ä¸º8 | ä¸å»ºè®®ä¿®æ¹ |
æ¥çtomcatçé»è®¤GC
å¨tomcat/bin/catalina.shä¸å¨åæ¥åºç¡ä¸æ·»å
JAVA_OPTS="-Djava.rmi.server.hostname=192.168.1.2 -Dcom.sun.managament.jmxremote.port=8999 -Dcom.sun.management.jmxremote.rmi=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
æå¼jconsoleï¼æ¥çè¿ç¨tomcatçæ¦è¦ä¿¡æ¯
æ¹åGCä¹æ¯å¨éé¢è®¾ç½®