Tomcat7优化

Tomcat7安装在公网IP为x.x.x.x的服务器上

tomcat安装

第一步,下载server-jre-7u80-linux-x64.tar.gz和apache-tomcat-7.0.90.tar.gz安装包。

登录地址:https://www.oracle.com/java/technologies/javase/javase7-archive-downloads.html下载server-jre-7u80-linux-x64.tar.gz安装包。登录地址:https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.90/bin下载apache-tomcat-7.0.90.tar.gz压缩包。然后使用WinSCP将安装包上传到/usr/local/src文件夹中。也可以使用wget命令下载。

命令:cd /usr/local/src

wget https://www.oracle.com/java/technologies/javase/javase7-archive-downloads.html/jre-7u80-linux-x64.tar.gz

wget https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.90/bin/apache-tomcat-7.0.90.tar.gz

第二步,解压server-jre-7u80-linux-x64.tar.gz和apache-tomcat-7.0.90.tar.gz安装包。

命令:cd /usr/local/src

tar -zxvf server-jre-7u80-linux-x64.tar.gz -C /usr/local

tar -zxvf apache-tomcat-7.0.90.tar.gz -C /usr/local

cd /usr/local

mv apache-tomcat-7.0.90 tomcat1

第三步,将/usr/local/jdk1.7.0_80和/usr/local/tomcat1的所有者及所属组改为tomcat。

命令:useradd tomcat

chown -R tomcat:tomcat /usr/local/jdk1.7.0_80

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

第四步,配置环境变量。

配置/etc/profile文件,在文件添加下面的代码:

export JAVA_HOME=/usr/local/jdk1.7.0_80

export JRE_HOME=$JAVA_HOME/jre

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib:$JRE_HOME/lib/rt.jar:$JRE_HOME/lib/ext:$JRE_HOME/lib:$CLASSPATH

export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

# 刷新profile文件

命令:source /etc/profile

第五步,测试server-jre是否配置成功。

# 查看jdk版本

命令:java -version

若结果显示server-jre的版本,则说明server-jre配置成功。

tomcat配置及启动

第一步,编辑配置/usr/local/tomcat1中的server.xml文件。

进入文件夹/usr/local/tomcat1/conf,server.xml编辑完成后代码如下:

<?xml version="1.0" encoding="UTF-8"?>
    ...
<Server port="8105" shutdown="SHUTDOWN"> #port设置为8105
  ...
  <!--线程池优化/>
  <Connector port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol"
        connectionTimeout="20000"  
        maxThreads="1000"
        minSpareThreads="100"      
        maxSpareThreads="200"
        acceptCount="900"      
        disableUploadTimeout="ture"
        URIEncoding="UTF-8"        
        enableLookups="false"
        compression="on"       
        compressionMinSize="1024"
 compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png"    
        redirectPort="8443" />
  <!-- A "Connector" using the shared thread pool-->
    ...
</Server>

第二步,编辑配置/usr/local/tomcat1/bin下的 catalina.sh文件。

为防止出错,先提前备份一下,然后在第117行添加下面的代码:

JAVA_HOME=/usr/local/jdk1.7.0_80

JRE_HOME=/usr/local/jdk1.7.0_80/jre

# 内存空间优化

JAVA_OPTS="$JAVA_OPTS -server -Xms1024m -Xmx1024m"

# 赋予catalina.sh执行权限

命令:cd /usr/local/tomcat1/bin

chmod a+x catalina.sh

第三步,测试tomcat1是否配置成功。

命令:cd /usr/local/tomcat1/bin

./startup.sh

netstat -ntl | grep 8081

若结果成功显示“Tomcat started”,则说明tomcat成功启动。

若tomcat启动失败,则可能是启动时使用的端口被其他应用程序占用了,可以查看端口被哪个应用程序占用了。

命令:lsof -i:端口号

ps -ef | grep 进程号PID

tomcat成功启动后,然后直接根据http://x.x.x.x:8081http://x.x.x.x/index.jsp)在本地浏览器访问。

若页面成功显示“Apache Tomcat/7.0.90”,则说明tomcat配置成功。

若发现访问不到,则可以查看防火墙是否开着。

# 查看防火墙的状态

命令:systemctl status firewalld.service

# 临时将防火墙关闭

命令:systemctl stop firewalld.service

# 关闭tomcat

命令:./shutdown.sh

第四步,复制tomcat1文件夹7次并都粘贴在/usr/local/文件夹中。

cp -pr  /usr/local/tomcat1 /usr/local/tomcat2

cp -pr  /usr/local/tomcat1 /usr/local/tomcat3

cp -pr  /usr/local/tomcat1 /usr/local/tomcat4

cp -pr  /usr/local/tomcat1 /usr/local/tomcat5

cp -pr  /usr/local/tomcat1 /usr/local/tomcat6

cp -pr  /usr/local/tomcat1 /usr/local/tomcat7

cp -pr  /usr/local/tomcat1 /usr/local/tomcat8

第五步,重复“tomcat配置及启动”中的第一、二和三步。

在配置文件server.xml中更改端口号,编辑配置 catalina.sh文件。

关机重启,tomcat会自动启动

第一步,编辑配置/etc/rc.d/rc.local,在/etc/rc.d/rc.local文件最后一行另起一行,添加下面的代码:

export JAVA_HOME=/usr/local/jdk1.7.0_80

export JRE_HOME=$JAVA_HOME/jre

/usr/local/tomcat1/bin/startup.sh  start

/usr/local/tomcat2/bin/startup.sh  start

/usr/local/tomcat3/bin/startup.sh  start

/usr/local/tomcat4/bin/startup.sh  start

/usr/local/tomcat5/bin/startup.sh  start

/usr/local/tomcat6/bin/startup.sh  start

/usr/local/tomcat7/bin/startup.sh  start

/usr/local/tomcat8/bin/startup.sh  start

第二步,编辑rc.local文件为可执行。

命令:chmod +x /etc/rc.d/rc.local

第三步,重启服务器,然后查看tomcat是否启动。

命令:reboot 或 shutdown -r now 或 shutdown -r 10 或 init 6

           lsof -i:[tomcat端口号]

           netstat -ntl | grep [tomcat端口号]

不进入tomcat根目录即可进行相应的操作

第一步,进入/etc/rc.d/init.d文件夹,新建文件,命名为tomcat,并在文件中编写脚本。文件的脚本如下:

#!/bin/bash
#
# tomcat startup script for the Tomcat server
#
#
# chkconfig: 2345 80 20
# description: start the tomcat deamon
#
# Source function library
. /etc/rc.d/init.d/functions
prog=tomcat
case "$1" in
start)
    echo "Starting Tomcat1..."
    /usr/local/tomcat1/bin/startup.sh
    echo "Starting Tomcat2..."
    /usr/local/tomcat2/bin/startup.sh
    echo "Starting Tomcat3..."
    /usr/local/tomcat3/bin/startup.sh
    echo "Starting Tomcat4..."
    /usr/local/tomcat4/bin/startup.sh
    echo "Starting Tomcat5..."
    /usr/local/tomcat5/bin/startup.sh
    echo "Starting Tomcat6..."
    /usr/local/tomcat6/bin/startup.sh
    echo "Starting Tomcat7..."
    /usr/local/tomcat7/bin/startup.sh
    echo "Starting Tomcat8..."
    /usr/local/tomcat8/bin/startup.sh
    ;;
stop)
    echo "Stopping Tomcat1..."
    /usr/local/tomcat1/bin/shutdown.sh
    echo "Stopping Tomcat2..."
    /usr/local/tomcat2/bin/shutdown.sh
    echo "Stopping Tomcat3..."
    /usr/local/tomcat3/bin/shutdown.sh
    echo "Stopping Tomcat4..."
    /usr/local/tomcat4/bin/shutdown.sh
    echo "Stopping Tomcat5..."
    /usr/local/tomcat5/bin/shutdown.sh
    echo "Stopping Tomcat6..."
    /usr/local/tomcat6/bin/shutdown.sh
    echo "Stopping Tomcat7..."
    /usr/local/tomcat7/bin/shutdown.sh
    echo "Stopping Tomcat8..."
    /usr/local/tomcat8/bin/shutdown.sh
    ;;
res)
    echo "Stopping Tomcat1..."
    /usr/local/tomcat1/bin/shutdown.sh
    echo "Stopping Tomcat2..."
    /usr/local/tomcat2/bin/shutdown.sh
    echo "Stopping Tomcat3..."
    /usr/local/tomcat3/bin/shutdown.sh
    echo "Stopping Tomcat4..."
    /usr/local/tomcat4/bin/shutdown.sh
    echo "Stopping Tomcat5..."
    /usr/local/tomcat5/bin/shutdown.sh
    echo "Stopping Tomcat6..."
    /usr/local/tomcat6/bin/shutdown.sh
    echo "Stopping Tomcat7..."
    /usr/local/tomcat7/bin/shutdown.sh
    echo "Stopping Tomcat8..."
    /usr/local/tomcat8/bin/shutdown.sh
    sleep 10
    echo "Starting Tomcat1..."
    /usr/local/tomcat1/bin/startup.sh
    echo "Starting Tomcat2..."
    /usr/local/tomcat2/bin/startup.sh
    echo "Starting Tomcat3..."
    /usr/local/tomcat3/bin/startup.sh
    echo "Starting Tomcat4..."
    /usr/local/tomcat4/bin/startup.sh
    echo "Starting Tomcat5..."
    /usr/local/tomcat5/bin/startup.sh
    echo "Starting Tomcat6..."
    /usr/local/tomcat6/bin/startup.sh
    echo "Starting Tomcat7..."
    /usr/local/tomcat7/bin/startup.sh
    echo "Starting Tomcat8..."
    /usr/local/tomcat8/bin/startup.sh
    ;;
*)
    echo "Usage: $prog {start|stop|res}"
    ;;
esac
exit 0

第二步,添加执行权限并设置开机自启

命令 :chmod +x /etc/init.d/tomcat

# 设置开机自启

命令:chkconfig --add tomcat

chkconfig tomcat on

# 检查tomcat命令

命令:service tomcat

/etc/init.d/tomcat: line 20: [: =: unary operator expected

Usage: tomcat {start|stop|restart|reload|status|help}

第三步,检查一下脚本是否有用。

命令:/sbin/chkconfig tomcat on

sudo /sbin/chkconfig --list tomcat

如果结果显示“tomcat 0:off 1:off 2:on 3:on 4:on 5:on 6:off”,则说明脚本文件有用。

第四步,nginx启动、关闭以及重启命令。

命令:service tomcat start

service tomcat stop

service tomcat restart

第五步,再新建8个文件,分别命名为tomcat1、tomcat2、...和tomcat8,重复执行第一、二、三和四步。

优化tomcat服务启动速度

种解决办法:

1)在tomcat环境中解决

可以通过配置JRE使用非阻塞的Entropy Source。

在/usr/local/tomcat1/bin/catalina.sh中加入这么一行:

-Djava.security.egd=file:/dev/./urandom

加入后再启动tomcat,启动速度就非常快。

2)在JVM环境中解决

打开$JAVA_HOME/jre/lib/security/java.security文件,找到

“securerandom.source=file:/dev/urandom”,并把它修改成

“securerandom.source=file:/dev/./urandom”。(对所有使用JVM的应用生效)修改之后启动tomcat,启动速度就非常快。

3)增大/dev/random的熵池

#可以查看现在的熵池大小(45)

cat /proc/sys/kernel/random/entropy_avail

#要增大熵池的值,CPU要支持DRNG特性,可以充分利用硬件来提高熵池产生的速度,查看服务器是否支持DRNG特性

cat /proc/cpuinfo | grep rdrand

#安装rng-tools(安装rngd服务(熵服务))

yum -y install rng-tools

systemctl enable  rngd

systemctl start  rngd

#查看熵池的值是否会变大(3097)

cat  /proc/sys/kernel/random/entropy_avail

安装rng-tools之后可以直接使用random生成随机数,而不需要修改$JAVA_HOME/jre/lib/security/java.security中的生成随机数。

最后启动tomcat, 会发现启动速度就非常快。

如果CPU不支持DRNG特性或者使用虚拟机,可以使用/dev/unrandom来模拟。

cp /usr/lib/systemd/system/rngd.service /etc/systemd/system

编辑配置/etc/systemd/system/rngd.service文件,设置“ExecStart=/sbin/rngd -f -r /dev/urandom”。

systemctl daemon-reload    #重新载入服务

systemctl restart rngd     #重启服务

#可以查看现在的熵池大小(基本上在3000左右)

cat /proc/sys/kernel/random/entropy_avail

#可以测试随机数的生成速度

watch -n 1 cat /proc/sys/kernel/random/entropy_avail

#重新打开一个shell,用dd命令测试随机数(5秒产生了40960个随机数,/proc/sys/kernel/random/entropy_avail会有剧烈的变化,所有随机数产生之后它又会保持在3000左右)

dd if=/dev/random of=random.dat count=40960

最好选择第三种方式,熵池不仅仅tomcat使用,Linux下的所有应用程序产生随机数都会用到这个,因此不仅仅是tomcat可能被阻塞。根治的方法应该是通过rngd提高随机数生成的速度。

如何重现故障

systemctl stop rngd   #停止rngd服务(如果你有启动rngd)

#查看当前熵池的大小

cat /proc/sys/kernel/random/entropy_avail

#强制消费1024个随机数,系统会长时间没有反应,然后直接Ctrl+C

head -c 1024 /dev/random

#再次查看熵池的大小,保证它的大小在尽可能的小

cat /proc/sys/kernel/random/entropy_avail

最后启动tomcat,会发现会长时间等待。

4)tomcat 需要部署的web应用程序太多

tomcat启动比较慢是因为它需要部署的web应用程序太多,但是其中有些应用程序是不需要的,可以将不需要的webapps删除,然后再进行发布。如果想并行启动多个web应用程序且服务器是多核的,那么可以设置Host的属性startStopThreads值设置大于1,但不超过内核数。

5)tomcat启动内存不足

如果项目比较大,使用默认的参数去启动的tomcat是很有可能内存不足的,这样的话,需要设置JVM,将内存调整,JVM的最大值和最小值建议是不要相差太大(最好一致)。

在启动脚本/usr/local/tomcat1/bin/catalina.sh文件加上:

JAVA_OPTS='-server -Xms1024m -Xmx1024m'

具体的内存大小,可以根据业务调整。

禁用DNS查询

当web应用程序想要记录客户端的信息时,也会记录客户端的IP地址或者通过域名服务器查找机器名转换为IP地址。

DNS查询需要占用网络,并且包括可能从很多很远的服务器或者不起作用的服务器上去获取对应的IP的过程,这样会消耗一定的时间。

修改/usr/local/tomcat1/conf/server.xml文件中的Connector元素,修改属性enableLookups参数值:

enableLookups="false"

如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址。

缓存优化

对于静态页面最好可以缓存起来,这样就不必每次从磁盘上读取。采用Nginx作为缓存服务器,将图片、css、js等文件都进行了缓存,有效地减少了后端tomcat的访问。

启用GZIP压缩

第一步,修改配置文件/usr/local/tomcat1/conf/server.xml,修改节点如下:

<Connector port="8081" protocol="HTTP/1.1"

  connectionTimeout="20000" redirectPort="8443"

  compression="on"          compressionMinSize="2048"

  noCompressionUserAgents="gozilla, traviata"

  compressableMimeType="text/html,text/xml,text/javascript,

  application/javascript,text/css,text/plain,text/json"/>

第二步,GZIP的缺点。

相对于没有进行GZIP的服务器来说,使用GZIP要增加服务器压缩的压力(cpu消耗)、客户端解压缩的压力,所以使用GZIP对服务器的配置需求更高。

另外使用GZIP压缩也要耗费时间。想占用更小的空间,得到高压缩比率,肯定要牺牲较长的时间;反之,若时间较为宝贵,要求快速,则所得的压缩比率一定较小,一定会占用更大的空间(压缩比率=原内容大小/压缩后大小,压缩比率越大,则表明压缩后占用空间的压缩包越小),这就是物理空间与时间的矛盾。

设置session过期时间

tomcat采用数据库连接池技术,当用户在一定时间内不对数据库进行操作,tomcat就会自动关闭连接,这是为了更好地利用资源,防止浪费宝贵的数据库连接资源。

/usr/local/tomcat1/conf/web.xml文件中通过参数指定:

 <session-config>

        <session-timeout>180</session-timeout> #单位为分钟

    </session-config>

APR插件提高Tomcat性能(适用于Tomcat7)

tomcat可以使用APR来提供超强的可伸缩性和性能,更好地集成本地服务器技术。APR有很多用途,包括访问高级I/O功能(如sendfile,epoll和OpenSSL),OS级别功能(随机数生成,系统状态等),本地进程管理(共享内存,NT管道和UNIX sockets)。

在产品环境中,特别是直接使用tomcat做WEB服务器的时候,应该使用Tomcat Native来提高其性能。要测APR给tomcat带来的好处,最好的方法是在慢速网络上(模拟Internet),将tomcat线程数开到300以上的水平,然后模拟一大堆并发请求。如果不配APR,300个线程就会很快用满,以后的请求就只好等待。但是配上APR之后,并发的线程数量明显下降,可能马上会从原来的300下降到几十,新的请求会毫无阻塞的进来。

在局域网环境中,就算是400个并发,也是一瞬间就处理/传输完毕,但是在真实的Internet环境下,页面处理时间连0.1%都不到,绝大部分时间都用来页面传输。如果不用APR,一个线程同一时间只能处理一个用户,势必会造成阻塞。所以生产环境下用APR是非常必要的。

第一步,安装APR和tomcat-native。

第一种

先在/etc/profile文件中新增下面代码:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib

export LD_RUN_PATH=$LD_RUN_PATH:/usr/local/apr/lib

# 环境变量生效

命令:source /etc/profile

# 然后安装APR和tomcat-native

命令:yum install apr apr-devel make gcc-c++ openssl openssl-devel

cd /usr/local/tomcat1/bin

tar zxvf tomcat-native.tar.gz

cd tomcat-native-1.2.17-src/native

./configure

make

make install

第二种

cd /usr/local/apr

wget http://archive.apache.org/dist/apr/apr-1.4.8.tar.gz

tar zxvf apr-1.4.8.tar.gz

cd apr-1.4.8

./configure

make

make install

cd /usr/local/apr/lib

wget http://archive.apache.org/dist/apr/apr-util-1.5.1.tar.gz

tar zxvf apr-util-1.5.1.tar.gz

cd apr-util-1.5.1

./configure --with-apr=/usr/local/apr/apr-1.4.8

make

make install

cd /usr/local/tomcat1/bin

tar zxvf tomcat-native.tar.gz

cd tomcat-native-1.2.17-src/native

./configure --with-apr=/usr/local/apr/apr-1.4.8

make

make install

第二步,设置tomcat整合APR。

修改tomcat的启动程序startup.sh,在程序中加入启动参数:

CATALINA_OPTS="$CATALINA_OPTS -Djava.library.path=/usr/local/apr/lib"

重新启动tomcat服务,然后查看catalina.out文件。如果在catalina.out中出现“org.apache.coyote.http11.Http11Protocol init”,则说明安装成功。

tomcat的安全配置

第一步,当tomcat安装成功后,需要做的事情如下:

首次安装完成后立即删除webapps下面的所有代码

命令:rm -rf /usr/local/tomcat1/webapps/*

注释或删除tomcat-users.xml所有用户权限。

第二步,隐藏tomcat版本。

首先找到/usr/local/tomcat1/lib/catalina.jar,

然后解压catalina.jar,按照路径/org/apache/catalina/util/找到ServerInfo.properties文件。

命令:cd /usr/local/tomcat1/lib

jar xvf catalina.jar

然后编辑修改ServerInfo.properties文件,把server.number和server.built置空。最后重新打成jar包,重启tomcat服务。

命令:cd /usr/local/tomcat1/lib

jar cvf catalina.jar META-INF org

第三步,隐藏tomcat 的服务类型。

/usr/local/tomcat1/conf/server.xml文件中,为connector元素添加server=" ",注意不是空字符串,是空格组成的长度为1的字符串,或者输入其他的服务类型,在response header中就没有server的信息。

第四步,应用程序安全。

关闭war自动部署,设置unpackWARs="false" autoDeploy="false",防止被植入木马等恶意程序。

第五步,修改服务监听端口。

一般公司的tomcat都是放在内网的,因此针对tomcat服务的监听地址都是内网地址。

修改实例:<Connector port="8081" address="x1.x1.x1.x1" />

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值