Java开发过程中,大家用得最多的就是Tomcat,如下我就总结下Tomcat常见问题。
1、Tomcat 的缺省端口是多少,怎么修改?
答:找到 Tomcat 目录下的 conf 文件夹 →进入 conf 文件夹里面找到 server.xml 文件→打开 server.xml 文件→在 server.xml 文件里面找到下列信息
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1"
redirectPort="8443" uriEncoding="utf-8"/>
port="8080" 可以
改成你想要的端口
2、
Tomcat
有几种部署方式?
答:①
直接把
Web
项目放在
webapps
下,
Tomcat 会自动将其部署。②在
server.xml
文件上配置
<Context>节点,设置相关的属性即可。
通过
Catalina
来进行配置
:
进入到
conf\Catalina\localhost
文件下,创建一个
xml
文件,该文件的名字就是站点的名字。
3、tomcat
如何优化?
答:
优化连接配置
.
这里以
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
个左右。
4、监视
Tomcat
的内存使用情况
答:使用
JDK
自带的
jconsole
可以比较明了的看到内存的使用情况,线程的状态,
当前加载的类的总量等;
JDK
自带的
jvisualvm
可以下载插件(如
GC
等),可以查看更丰富的信息。如
果是分析本地的
Tomcat
的话,还可以进行内存抽样等,检查每个类的使用情况
5、
打印类的加载情况及对象的回收情况
答:
这个可以通过配置
JVM
的启动参数,打印这些信息(到屏幕(默认也会到
catalina.log
中)或者文件),具体参数如下:
-XX:+PrintGC
:输出形式:
[GC 118250K->113543K(130112K), 0.0094143 secs]
[Full GC 121376K->10414K(130112K), 0.0650971 secs]
-XX:+PrintGCDetails
:输出形式:
[GC [DefNew: 8614K->781K(9088K),
0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs] [GC
[DefNew: 8614K->8614K(9088K), 0.0000665 secs][Tenured:
112761K->10414K(121024K), 0.0433488 secs] 121376K->10414K(130112K),
0.0436268 secs]
-XX:+PrintGCTimeStamps -XX:+PrintGC
:
PrintGCTimeStamps
可与上面两个
混合使用,输出形式:
11.851: [GC 98328K->93620K(130112K), 0.0082960
secs]
-XX:+PrintGCApplicationConcurrentTime
:打印每次垃圾回收前,程序未中断
的执行时间。可与上面混合使用。输出形式:
Application time: 0.5291524
seconds
-XX:+PrintGCApplicationStoppedTime
:打印垃圾回收期间程序暂停的时间。可
与上面混合使用。输出形式:
Total time for which application threads were
stopped: 0.0468229 seconds
-XX:PrintHeapAtGC:
打印
GC
前后的详细堆栈信息
-Xloggc:filename:
与上面几个配合使用,把相关日志信息记录到文件以便分析
-verbose:class
监视加载的类的情况
-verbose:gc
在虚拟机发生内存回收时在输出设备显示信息
-verbose:jni
输出
native
方法调用的相关情况,一般用于诊断
jni
调用错误信息
6、Tomcat
工作原理?
答:
Tomcat
是一个
JSP/Servlet
容器。其作为
Servlet
容器,有三种工作模式:独立
的
Servlet
容器、进程内的
Servlet
容器和进程外的
Servlet
容器。
进入
Tomcat
的请求可以根据
Tomcat
的工作模式分为如下两类:
Tomcat
作为应用程序服务器:请求来自于前端的
web
服务器,这可能是
Apache,
IIS, Nginx
等;
Tomcat
作为独立服务器:请求来自于
web
浏览器;
最后,如果想彻彻底通透Tomcat 建议大家还是找一本书去看,这个时代缺乏的是静心看书的中年人。