Tomcat的8005端口启动慢的问题 普通用户启动Tomcat Tomcat的配置文件server.xml

Tomcat的8005端口启动慢的问题

Tomcat启动后,我们可以通过如下命令查看其监听的端口:

```
# netstat -lntp |grep java
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      14745/java          
tcp6       0      0 :::8009                 :::*                    LISTEN      14745/java          
tcp6       0      0 :::8080                 :::*                    LISTEN      14745/java
```
可以看到Tomcat有监听3个端口
8080为WEB服务端口;
8009为AJP端口,它可以被Apache调用,从而让Apache和Tomcat结合在一起提供服务;
8005端口为管理端口,比如我们可以通过8005端口部署JAVA应用程序。
Tomcat在重启时,经常有8080端口和8009端口已经启动成功,但是8005端口却要等十几秒,甚至几十秒。虽然8005为管理端口,但是这个端口启动不起来,8080端口访问也不正常,所以,就得等着它。这个问题非常影响用户体验,想要解决此问题需要搞清楚8005端口为何启动很慢。
Tomcat启动时,会通过 java.security. SecureRandom生成随机数来实现,随机数算法使用的是"SHA1PRNG",这个算法的提供者在底层依赖到操作系统提供的随机数据,在linux上,与之相关的是/dev/random和/dev/urandom。
/dev/random可生成高随机性的公钥或一次性密码本。若熵池空了,对/dev/random的读操作将会被阻塞,直到收集到了足够的环境噪声为止,而 /dev/urandom 则是一个非阻塞的发生器。它是/dev/random的一个副本,它会重复使用熵池中的数据以产生伪随机数据。这表示对/dev/urandom的读取操作不会产生阻塞,但其输出的熵可能小于/dev/random。
总之,8005端口启动慢就是因为JVM调用了系统的/dev/random设备生成随机数,而/dev/random生成随机数时被block了,
自然就会导致8005端口启动慢,解决办法是不使用/dev/random,而是使用/dev/urandom。具体步骤如下:
```
# vim $JAVA_HOME/jre/lib/security/Java.security 
//将securerandom.source=file:/dev/random改为securerandom.source=file:/dev/urandom
$JAVA_HOME在哪里?
如果是openjdk(yum安装的),在/usr/lib/jvm/
如果是下载的二进制包,就是jdk的主目录(如/usr/local/jdk_1.8)
```

 

普通用户启动Tomcat

如果使用root启动Tomcat,则运行Tomcat服务的用户就是root,这样会有一些安全隐患(权限太高了)。由于Tomcat监听端口为非特权端口(特权端口为0-1024范围的端口,必须由root监听),所以我们完全可以用一个普通用户的身份来启动Tomcat服务。

具体的操作步骤如下:

1#创建运行Tomcat服务的用户

useradd tomcat


2#修改Tomcat目录属主

```
chown -R tomcat:tomcat /usr/local/tomcat
```

3#启动Tomcat服务
```
su - -c "/usr/local/tomcat/bin/startup.sh" tomcat
```

4#关闭Tomcat服务
```
 su - -c "/usr/local/tomcat/bin/shutdown.sh" tomcat
```

 

Tomcat的配置文件server.xml

在/usr/local/tomcat/conf/目录下,有个server.xml文件,这个就是Tomcat的核心配置文件。在上一小节提到要去掉/zrlog/目录,就需要更改此配置文件。先来看下server.xml配置文件的结构:

```
<Server> 
    <Service> 
        <Engine> 
            <Host> 
            </Host> 
        </Engine> 
    </Service> 
</Server>

最里层的<host></host>就是Tomcat的虚拟主机,主机名(域名)、网站目录等属性就在这里面配置。如下是一个主机配置示例:

```
<!-- 端口配置为8080 -->
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1"
redirectPort="8443"/>
<!-- 默认主机配置为123.cn -->
<Engine defaultHost=123.cn" name="Catalina">
    <!-- 设置主机名为123.cn -->
    <Host appBase="webapps" autoDeploy="true" name="123.cn" unpackWARs="true">
    <!-- Context的配置如下,docBase默认,path设置为/ -->
    <Context docBase="zrlog" path="/" reloadable="true" />
    </Host>
</Engine>
```

 

说明:Tomcat的网站目录设置有点麻烦,appBase、docBase和Context的path都对网站目录有影响,建议appBase不要动,即webapps目录,而docBase设置一个相对路径(相对webapps的一个目录),path就设定为'/',最终结合在一起,就是webapps/zrlog/。
1)port:定义下面的<host></host>监听的端口是8080;
2)defaultHost:定义该端口下,默认虚拟主机是哪一个;
3)appBase:定义该应用存放路径,可以把war包直接扔到该目录下,实现自动部署;
4)autoDeploy:定义是否可以自动自动部署;
5)name:定义网站的域名;
6)unpackWARs:定义是否自动解压war包;
7)docBase:定义本"Context"(类似Nginx的location)所在路径,它是一个目录,如果是绝对路径那跟appBase没有关系,
如果是相对路径,则指的是相对appBase的一个目录;
8)path:定义本"Context"访问时的地址,比如定义path为123,则访问该"Context"时,应该是http://host/123/, 所以这个地
址是访问链接里面的地址,并不是系统目录;
9)reloadable:定义该"Context"是否允许自动加载,即当应用有所更改时,不重启Tomcat就可以自动加载。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/u/3993226/blog/2993821

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值