目前认识到的主流web服务器有
1. resin
2. Tomcat
3. Jetty
Jetty作为一个ava-based HTTP web server和java servlet容器,通常用在软件框架中机器之间的通信,常见的应用在Apache Spark、Maven、Hadoop、Eclipse插件等。
Tomcat作为Apache的开源软件具有良好的性能,可能是目前使用最广泛的web服务器之一。
Resin是Caucho公司推出的,Pro版本收费(没使用过),并发能力非常好,和Nginx配合起来,可以支持一天亿级别的访问,配置也不繁琐,值得大家了解。
首先说明,Resin文档中的功能(Load balancer、Proxy Cache、JMS Queue等)只在Pro版本中可以使用,在配置文件示例中只展示Resin作为一个Application Server的配置
文档参考:http://caucho.com
${resin.home}: the install location of resin in machine;
${resin.root}: the location of virtual host;
<!--
- Resin 3.1 configuration file.
-->
<resin xmlns="http://caucho.com/ns/resin"
xmlns:resin="http://caucho.com/ns/resin/core">
<!-- load class in resin/lib/ -->
<class-loader>
<tree-loader path="${resin.home}/lib"/>
<tree-loader path="${resin.root}/lib"/>
</class-loader>
<!-- log config -->
<log name="" level="info" path="stdout:"
timestamp="[%H:%M:%S.%s] {%{thread}} "/>
<logger name="com.caucho" level="info"/>
<logger name="com.caucho.java" level="config"/>
<logger name="com.caucho.loader" level="config"/>
<!-- log home config -->
<stdout-log path="${log.home}/stdout.log" rollover-period="1D" rollover-count="5"/>
<stderr-log path="${log.home}/stderr.log" rollover-period="1D" rollover-count="5"/>
<!-- check xml interval and restart web-server when it is changed. -->
<dependency-check-interval>2s</dependency-check-interval>
<!-- smtp server for email -->
<system-property mail.smtp.host="127.0.0.1"/>
<system-property mail.smtp.port="25"/>
<!-- compiler -->
<javac compiler="internal" args="-source 1.6"/>
<cluster id="app-tier">
<root-directory>.</root-directory>
<server-default>
<http address="*" port="8080"/>
<jvm-arg>-Xms2048m</jvm-arg> <!-- inital java heap size -->
<jvm-arg>-Xmx2048m</jvm-arg> <!-- maximum java heap size OutOfMemory -->
<jvm-arg>-Xmn512m</jvm-arg> <!-- the size of the heap for the young generation -->
<jvm-arg>-Xss1m</jvm-arg> <!-- the stack size for each thread java.lang.StackOverflowError -->
<jvm-arg>-XX:PermSize=256M</jvm-arg> <!-- non-heap memory size, Permanent Generation space: java.lang.OutOfMemoryError: PermGen space-->
<jvm-arg>-XX:MaxPermSize=256M</jvm-arg>
<jvm-arg>-XX:SurvivorRatio=8</jvm-arg> <!-- Survivor / Eden -->
<jvm-arg>-XX:MaxTenuringThreshold=15</jvm-arg> <!-- times an object be moved to old generation -->
<jvm-arg>-XX:+UseParallelOldGC</jvm-arg> <!-- parall gc young and old generation -->
<jvm-arg>-XX:GCTimeRatio=19</jvm-arg> <!-- application time = 19 / (19 + 1) -->
<jvm-arg>-Xdebug</jvm-arg> <!-- remote debug -->
<jvm-arg>-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=4##port##</jvm-arg>
<jvm-arg>-XX:+PrintGCDetails</jvm-arg> <!-- print GC details -->
<jvm-arg>-XX:+PrintGCTimeStamps</jvm-arg>
<jvm-arg>-XX:+PrintClassHistogram</jvm-arg> <!-- kill -3 pid -->
<jvm-arg>-XX:-TraceClassUnloading</jvm-arg>
<jvm-arg>-verbose:gc</jvm-arg>
<jvm-arg>-Xloggc:${deploy.log.home}/${content.spider.project.name}-##port##/gc.log</jvm-arg>
<jvm-arg>-Dcom.sun.management.jmxremote</jvm-arg> <!-- For memory Moinotr: bin/Jconsole-->
<jvm-arg>-Dcom.sun.management.jmxremote.port=1##port##</jvm-arg>
<jvm-arg>-Dcom.sun.management.jmxremote.ssl=false</jvm-arg>
<jvm-arg>-Dcom.sun.management.jmxremote.authenticate=false</jvm-arg>
<jvm-arg>-Dfile.encoding=UTF-8</jvm-arg>
<jvm-arg>-Dsun.jnu.encoding=UTF-8</jvm-arg>
<watchdog-jvm-arg>-Dcom.sun.management.jmxremote</watchdog-jvm-arg>
<watchdog-port>28080</watchdog-port>
<!-- resin will restart when memory is below this value -->
<memory-free-min>1M</memory-free-min>
<thread-max>2048</thread-max>
<socket-timeout>6s</socket-timeout>
<keepalive-max>64</keepalive-max>
<keepalive-timeout>5s</keepalive-timeout>
</server-default>
<server id="" address="127.0.0.1" port="38080"/>
<web-app-default>
<!-- Maps url patterns to servlets. -->
<servlet-mapping servlet-class='com.caucho.servlets.ResinStatusServlet'>
<url-pattern>/resin-status</url-pattern>
<init enable="read"/>
</servlet-mapping>
<!-- 设置缓存页、静态页的延时值, -->
<cache-mapping url-pattern="/" expires="5s"/>
<cache-mapping url-pattern="*.gif" expires="60s"/>
<cache-mapping url-pattern="*.jpg" expires="60s"/>
<cache-mapping url-pattern="*.png" expires="60s"/>
</web-app-default>
<!-- import web application default action -->
<resin:import path="${deploy.resin.home}/conf/app-default.xml"/>
<host-default>
<access-log path="${log.home}/access.log"
format='%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i" %D'
rollover-period="1D" rollover-count="7"/>
<web-app-deploy path="webapps"/>
<ear-deploy path="deploy">
<ear-default>
<ejb-server>
<config-directory>WEB-INF</config-directory>
</ejb-server>
</ear-default>
</ear-deploy>
<resource-deploy path="deploy"/>
</host-default>
<host-deploy path="hosts">
<host-default>
<resin:import path="host.xml" optional="true"/>
</host-default>
</host-deploy>
<host id="" root-directory=".">
<web-app id="/" root-directory="webapp">
</web-app>
</host>
</cluster>
</resin>