Java应用服务器:关于Web服务器Tomcat及其面试中的问题

raksmart0 2017-10-18

Java应用服务器:关于Web服务器Tomcat及其面试中的问题

一、Tomcat的缺省是多少,怎么修改

Tomcat的缺省端口号是8080.

修改Tomcat端口号:

1.找到Tomcat目录下的conf文件夹

2.进入conf文件夹里面找到server.xml文件

3.打开server.xml文件

4.在server.xml文件里面找到下列信息

maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″

enableLookups=”false” redirectPort=”8443″ acceptCount=”100″

connectionTimeout=”20000″ disableUploadTimeout=”true” />

5.把port=”8080″改成port=”8888″,并且保存

6.启动Tomcat,并且在IE浏览器里面的地址栏输入http://127.0.0.1:8888/

7、tomcat默认采用的BIO模型,在几百并发下性能会有很严重的下降。tomcat自带还有NIO的模型,另外也可以调用APR的库来实现操作系统级别控制。

NIO模型是内置的,调用很方便,只需要将上面配置文件中protocol修改成 org.apache.coyote.http11.Http11NioProtocol,重启即可生效。如下面的参数配置,默认的是HTTP/1.1。

<Connector port=”8080″

protocol=”org.apache.coyote.http11.Http11NioProtocol”

connectionTimeout=”20000″

redirectPort=”8443″

maxThreads=”500″

minSpareThreads=”20″

acceptCount=”100″

disableUploadTimeout=”true”

enableLookups=”false”

URIEncoding=”UTF-8″ />

二、tomcat 如何优化?

1、优化连接配置.这里以tomcat7的参数配置为例,需要修改conf/server.xml文件,修改连接数,关闭客户端dns查询。

参数解释:

URIEncoding=”UTF-8″ :使得tomcat可以解析含有中文名的文件的url,真方便,不像apache里还有搞个mod_encoding,还要手工编译

maxSpareThreads : 如果空闲状态的线程数多于设置的数目,则将这些线程中止,减少这个池中的线程总数。

minSpareThreads : 最小备用线程数,tomcat启动时的初始化的线程数。

enableLookups : 这个功效和Apache中的HostnameLookups一样,设为关闭。

connectionTimeout : connectionTimeout为网络连接超时时间毫秒数。

maxThreads : maxThreads Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数,即最大并发数。

acceptCount : acceptCount是当线程数达到maxThreads后,后续请求会被放入一个等待队列,这个acceptCount是这个队列的大小,如果这个队列也满了,就直接refuse connection

maxProcessors与minProcessors : 在 Java中线程是程序运行时的路径,是在一个程序中与其它控制线程无关的、能够独立运行的代码段。它们共享相同的地址空间。多线程帮助程序员写出CPU最 大利用率的高效程序,使空闲时间保持最低,从而接受更多的请求。

通常Windows是1000个左右,Linux是2000个左右。

useURIValidationHack:

我们来看一下tomcat中的一段源码:

【security】

if (connector.getUseURIValidationHack()) {

String uri = validate(request.getRequestURI());

if (uri == null) {

res.setStatus(400);

res.setMessage(“Invalid URI”);

throw new IOException(“Invalid URI”);

} else {

req.requestURI().setString(uri);

// Redoing the URI decoding

req.decodedURI().duplicate(req.requestURI());

req.getURLDecoder().convert(req.decodedURI(), true);

}

}

可以看到如果把useURIValidationHack设成”false”,可以减少它对一些url的不必要的检查从而减省开销。

enableLookups=”false” : 为了消除DNS查询对性能的影响我们可以关闭DNS查询,方式是修改server.xml文件中的enableLookups参数值。

disableUploadTimeout :类似于Apache中的keeyalive一样

给Tomcat配置gzip压缩(HTTP压缩)功能

compression=”on” compressionMinSize=”2048″

compressableMimeType=”text/html,text/xml,text/javascript,text/css,text/plain”

HTTP 压缩可以大大提高浏览网站的速度,它的原理是,在客户端请求网页后,从服务器端将网页文件压缩,再下载到客户端,由客户端的浏览器负责解压缩并浏览。相对于普通的浏览过程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” 压缩类型

最后不要忘了把8443端口的地方也加上同样的配置,因为如果我们走https协议的话,我们将会用到8443端口这个段的配置,对吧?

<!–enable tomcat ssl–>

<Connector port=”8443″ protocol=”HTTP/1.1″

URIEncoding=”UTF-8″ minSpareThreads=”25″ maxSpareThreads=”75″

enableLookups=”false” disableUploadTimeout=”true” connectionTimeout=”20000″

acceptCount=”300″ maxThreads=”300″ maxProcessors=”1000″ minProcessors=”5″

useURIValidationHack=”false”

compression=”on” compressionMinSize=”2048″

compressableMimeType=”text/html,text/xml,text/javascript,text/css,text/plain”

SSLEnabled=”true”

scheme=”https” secure=”true”

clientAuth=”false” sslProtocol=”TLS”

keystoreFile=”d:/tomcat2/conf/shnlap93.jks” keystorePass=”aaaaaa”

/>

好了,所有的Tomcat优化的地方都加上了。

2、优化JDK

Tomcat默认可以使用的内存为128MB,Windows下,在文件{tomcat_home}/bin/catalina.bat,Unix下,在文件$CATALINA_HOME/bin/catalina.sh的前面,增加如下设置:

JAVA_OPTS=”‘$JAVA_OPTS” -Xms[初始化内存大小] -Xmx[可以使用的最大内存]

设置环境变量:export JAVA_OPTS=””$JAVA_OPTS” -Xms[初始化内存大小] -Xmx[可以使用的最大内存]”

一般说来,你应该使用物理内存的 80% 作为堆大小。如果本机上有Apache服务器,可以先折算Apache需要的内存,然后修改堆大小。建议设置为70%;建议设置[[初始化内存大小]等于[可以使用的最大内存],这样可以减少平凡分配堆而降低性能。

本例使用加入环境变量的方式:

# vi /etc/profile

加入:export JAVA_OPTS=””$JAVA_OPTS” -Xms700 —Xmx700

# source /etc/profile

【参数说明】

-Xms 是指设定程序启动时占用内存大小。一般来讲,大点,程序会启动的 快一点,但是也可能会导致机器暂时间变慢。

-Xmx 是指设定程序运行期间最大可占用的内存大小。如果程序运行需要占 用更多的内存,超出了这个设置值,就会抛出OutOfMemory 异常。

-Xss 是指设定每个线程的堆栈大小。这个就要依据你的程序,看一个线程 大约需要占用多少内存,可能会有多少线程同时运行等。

-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64 。

-XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。

三、tomcat 有那几种Connector 运行模式?

tomcat的运行模式有3种.修改他们的运行模式.3种模式的运行是否成功,可以看他的启动控制台,或者启动日志.或者登录他们的默认页面http://localhost:8080/查看其中的服务器状态。

1)bio

默认的模式,性能非常低下,没有经过任何优化处理和支持.

2)nio

利用java的异步io护理技术,no blocking IO技术.

想运行在该模式下,直接修改server.xml里的Connector节点,修改protocol为

<Connector port=”80″ protocol=”org.apache.coyote.http11.Http11NioProtocol”

connectionTimeout=”20000″

URIEncoding=”UTF-8″

useBodyEncodingForURI=”true”

enableLookups=”false”

redirectPort=”8443″ />

启动后,就可以生效。

3)apr

安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能.

必须要安装apr和native,直接启动就支持apr。下面的修改纯属多余,仅供大家扩充知识,但仍然需要安装apr和native

如nio修改模式,修改protocol为org.apache.coyote.http11.Http11AprProtocol

四、tomcat相关的面试题

1)解释什么是Jasper?

Jasper是Tomcat的JSP引擎

它解析JSP文件,将它们编译成JAVA代码作为servlet

在运行时,Jasper允许自动检测JSP文件的更改并重新编译它们

2)请说明select * from tab的输出结果是什么?

显示数据库中的默认表

3)请解释如何配置Tomcat来使用IIS和NTLM ?

必须遵循isapi_redirector.dll的标准指令

配置IIS使用“集成windows验证”

确保在服务器.xml中您已经禁用了tomcat身份验证

<Connector port = “8009” enableLooksup = “false” redirect port = “8443” protocol = “AJP/1.3” tomcatAuthentication = “false” />

4)请解释一下什么时候可以使用“.”,什么时候可以使用“[]”?

如果正在运行bean属性,请使用“.”操作符,如果正在执行映射值或数组索引,则首选使用“[]”运算符。虽然两个运算符可以互换。

5)请解释Tomcat的默认端口是什么?

Tomcat的默认端口是8080。在本地机器上初始化Tomcat之后,您可以验证Tomcat是否正在运行URL:http://localhost:8080

6)请解释Tomcat中使用的连接器是什么?

在Tomcat中,使用了两种类型的连接器:

HTTP连接器:它有许多可以更改的属性,以确定它的工作方式和访问功能,如重定向和代理转发

AJP连接器:它以与HTTP连接器相同的方式工作,但是他们使用的是HTTP的AJP协议。AJP连接器通常通过插件技术mod_jk在Tomcat中实现

7)请阐述Catalina的配置文件有哪些?

Catalina包含的配置文件有:

·policy

·properties

·properties

·xml

·xml

·Tomcat-users.xml

·xml

8)请解释将Tomcat作为一个Windows 服务运行会带来哪些好处?

运行Tomcat作为windows服务带来了以下的好处:

自动启动:对于需要在维护后远程重新启动系统的环境来说,这是至关重要的

启动无活动用户登录的服务器:Tomcat通常在刀片服务器上运行,这些服务器甚至可能没有一个活动监视器,Windows服务可以在没有活动用户的情况下启动

安全性:在Windows服务下的Tomcat可以让您在一个特殊的系统帐户下运行它,这个账户可以从其他用户帐户中得到保护

9)解释何时在Tomcat使用SSL ?

当你将Tomcat作为独立的web服务器运行时,需使用Tomcat来处理连接

10)解释如何使用WAR文件部署web应用程序?

在Tomcat的web应用程序目录下,jsp、servlet和它们的支持文件被放置在适当的子目录中。你可以将web应用程序目录下的所有文件压缩到一个压缩文件中,以.war文件扩展名结束。你可以通过在webapps目录中放置WAR文件来执行web应用程序。当一个web服务器开始执行时,它会将WAR文件的内容提取到适当的webapps子目录中。

11)解释什么是Tomcat Valve?

Tomcat Valve——Tomcat 4引入的新技术,它允许您将Java类的实例链接到一个特定的Catalina容器。

12)说明Tomcat配置了多少个Valve?

Tomcat配置了四种类型的Valve:

·访问日志

·远程地址过滤

·远程主机过滤器

·客户请求记录器

13)解释servlet如何完成生命周期?

在Tomcat上运行的典型servlet生命周期如下:

·Tomcat通过它的其中一个连接器接收来自客户端的请求

·进程请求Tomcat将此请求映射为适当的

·一旦请求被定向到适当的servlet,Tomcat就会验证servlet类是否已经加载。如果不是Tomcat将servlet包装成Java字节码,这是由JVM执行的,并形成servlet的实例

·Tomcat通过调用它的init来启动servlet,它包含能够筛选Tomcat配置文件并相应地采取行动的代码,并声明它可能需要的任何资源

·一旦servlet启动,Tomcat就可以调用servlet的服务方法来进行请求

·在servlet的生命周期中,Tomcat和servlet可以通过使用侦听器类来进行协调或通信,从而跟踪各种状态变化的servlet

·删除servlet,Tomcat调用servlet销毁方法

14)请说明NAT协议的目的是什么?

NAT协议的目的是将私有IP地址从公共IP地址隐藏起来,并给组织提供一定的安全性。

15)请解释一下MAC代表什么?

MAC意味着中访问控制

16)请解释什么是Tomcat Coyote ?

Tom coyote是基于HTTP / 1.1规范的HTTP连接器,通过监听TCP / IP端口并将请求发送回请求客户端,向Tomcat引擎接收和传输web请求。

Java应用服务器:关于Web服务器Tomcat及其面试中的问题

相关推荐