CentOS6下安装Java+Tomcat优化并自启动

CentOS作为服务器系统,稳定的状态成为良好的口碑。现在模拟服务器环境安装配置Java、Tomcat并对Tomcat做优化自启动。

系统:CentOS 6.9
Java:jdk-8u121-linux-i586.rpm
Tomcat:apache-tomcat-8.5.13.tar.gz

安装Java

#查看系统自带的Java并对应删除

[root@localhost ~]# rpm -qa | grep java
java_cup-0.10k-5.el6.i686
tzdata-java-2017b-1.el6.noarch
java-1.5.0-gcj-1.5.0.0-29.1.el6.i686
[root@localhost ~]# rpm -e --nodeps java-1.5.0-gcj-1.5.0.0-29.1.el6.i686

#下载好JDK文件,查看rpm包详细信息

[root@localhost 下载]# rpm -qip jdk-8u121-linux-i586.rpm 
Name        : jdk1.8.0_121                 Relocations: /usr/java 
Version     : 1.8.0_121                         Vendor: Oracle Corporation
Release     : fcs                           Build Date: 2016年12月13日 星期二 08时28分49秒
Install Date: (not installed)               Build Host: sca00boj.us.oracle.com
Group       : Development/Tools             Source RPM: jdk1.8.0_121-1.8.0_121-fcs.src.rpm
Size        : 279013566                        License: http://java.com/license
Signature   : (none)
Packager    : Java Software <[email protected]>
URL         : URL_REF
Summary     : Java Platform Standard Edition Development Kit
Description :
The Java Platform Standard Edition Development Kit (JDK) includes both
the runtime environment (Java virtual machine, the Java platform classes
and supporting files) and development tools (compilers, debuggers,
tool libraries and other tools).

The JDK is a development environment for building applications, applets
and components that can be deployed with the Java Platform Standard
Edition Runtime Environment.

#看到默认安装目录是Relocations: /usr/java

#安装java,指定安装目录为/opt/java

[root@localhost 下载]# rpm -ivh --prefix=/opt/java jdk-8u121-linux-i586.rpm 
Preparing...                ########################################### [100%]
   1:jdk1.8.0_121           ########################################### [100%]
Unpacking JAR files...
	tools.jar...
	plugin.jar...
	javaws.jar...
	deploy.jar...
	rt.jar...
	jsse.jar...
	charsets.jar...
	localedata.jar...
[root@localhost 下载]# 

#配置环境变量
打开vi /etc/profile,文件最后添加如下内容

export JAVA_HOME=/opt/java/jdk1.8.0_121
export JRE_HOME=/opt/java/jdk1.8.0_121/jre
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin

保存退出

#让配置生效

source /etc/profile

#查看是否安装成功

java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) Client VM (build 25.121-b13, mixed mode, sharing)

安装Tomcat

#添加tomcat用户

useradd -d /opt/tomcat -s /bin/bash -m tomcat
passwd tomcat

参数-d表示主目录位置是/opt/tomcat
参数-s表示指定一个shell环境,如果不想这个用户有登录权限,可以指定-s参数为/sbin/nologin
参数-m表示新建用户主目录不存在就创建一个同名主目录

统一安装到/opt目录下,切换到tomcat用户后解压缩安装包

-bash-4.1$ tar -zxvf apache-tomcat-8.5.13.tar.gz

为了简短方便重命名下

-bash-4.1$ mv apache-tomcat-8.5.13 tomcat8

启动tomcat测试看运行是否正常

-bash-4.1$ cd tomcat8/bin/
-bash-4.1$ ./startup.sh

打开浏览器http://localhost:8080,如果能看到那只熟悉的汤姆猫说明tomcat可以正常启动

tomcat优化部分

tomcat有三种运行模式:BIO、NIO、APR,简单说下这三种模式

1、BIO(Blocking I/O):默认的模式,性能非常低下,没有经过任何优化处理和支持。

2、NIO(Non-blocking I/O):利用java的异步io护理技术,noblocking IO技术。想运行在该模式下,直接修改conf/server.xml里的Connector节点,修改protocol为:

<Connector port=”8080″
protocol=”org.apache.coyote.http11.Http11NioProtocol”
connectionTimeout=”20000″
redirectPort=”8443″
URIEncoding=”UTF-8″ />

启动后,就可以生效。

3、APR(Apache Portable Runtime/Apache可移植运行库):是Apache HTTP服务器的支持库,从操作系统级别来解决异步的IO问题,大幅度的提高性能。你可以简单地理解为,Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能。 Tomcat apr也是在Tomcat上运行高并发应用的首选模式。

官方对比图:

根据官方文档,建立tc-native必须满足三个要求:

  • APR library
  • OpenSSL libraries
  • Java SE Development Kit (JDK)

 #安装APR

系统源里安装的版本太低,自己去官网下载编译安装
下载APR:http://apr.apache.org/download.cgi

  • apr:apr-1.5.2.tar.bz2
  • apr-util:apr-util-1.5.4.tar.bz2

*截止目前(20170724)官网最新APR版本是:APR-1.6.2
下载到一个目录后解压缩开始编译安装

[root@localhost apr-1.5.2]# ./configure --prefix=/usr/local/apr
[root@localhost apr-1.5.2]# make && make install
[root@localhost apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@localhost apr-util-1.5.4]# make && make install

apr跟apr-util都指定安装到/usr/local对应目录下面

[root@localhost native]# ./configure --with-apr=/usr/local/apr  --with-ssl=yes --prefix=/opt/tomcat/tomcat8

checking OpenSSL library version >= 1.0.2... 

Found   OPENSSL_VERSION_NUMBER 0x1000105f (OpenSSL 1.0.1e 11 Feb 2013)
Require OPENSSL_VERSION_NUMBER 0x1000200f or greater (1.0.2)

这里建立tc-native时提示系统自带的openssl版本不满足要求,还是去OpenSSL官网下载手动编译安装

#安装OpenSSL

下载OpenSSL:https://www.openssl.org/source/

  • OpenSSL:openssl-1.1.0e

*截止目前(20170724)官网最新OpenSSL版本是:openssl-1.1.0f

mkdir /usr/local/openssl
[root@localhost openssl-1.1.0e]# ./config --prefix=/usr/local/openssl -fPIC
[root@localhost openssl-1.1.0e]# make && make install

*注意加上后面的参数-fPIC

#建立tc-native

在Tomcat项目里已经包含了tomcat-native,解压出来编译安装即可

[root@localhost native]# ./configure --with-apr=/usr/local/apr  --with-ssl=/usr/local/openssl --prefix=/opt/tomcat/tomcat8
[root@localhost native]# make && make install

编辑conf/server.xml:
<Listener className=”org.apache.catalina.core.AprLifecycleListener” SSLEngine=”on” />
……
<Connector port=”8080″
protocol=”org.apache.coyote.http11.Http11AprProtocol”
connectionTimeout=”20000″
redirectPort=”8443″
URIEncoding=”UTF-8″ />

有时候项目上线发现页面出现乱码,可在服务端加入URIEncoding=”UTF-8″统一编码

编辑$CATALINA_HOME/bin/setenv.sh(没有就创建一个)添加如下内容:

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/tomcat/tomcat8/lib
export LD_LIBRARY_PATH

启动并检查输出日志,看到如下信息说明apr模式配置启动成功

24-Jul-2017 08:06:55.946 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded APR based Apache Tomcat Native library 1.2.12 using APR version 1.5.2.
24-Jul-2017 08:06:55.946 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
24-Jul-2017 08:06:55.947 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
24-Jul-2017 08:06:55.984 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized (OpenSSL 1.1.0e 16 Feb 2017)
24-Jul-2017 08:06:56.669 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-apr-8080"]

 #Tomcat开机自启动

查看网上资料tomcat在Linux系统下开机自启动大致有两种办法:

1、最简单的在系统启动运行配置里面加载Tomcat启动脚本
编辑/etc/rc.d/rc.local文件,在文件最下面添加如下两行

export JAVA_HOME=/opt/java/jdk1.8.0_121
/opt/tomcat/tomcat8/bin startup.sh

其中,JAVA_HOME是Java安装路径,根据你实际Java安装路径修改。第二行是Tomcat安装路径,也是根据你实际Tomcat安装路径修改

2、上面第一种情况虽然简单,但是一个它默认以root权限运行,存在安全隐患,另外一个系统关机它不会自动停止服务,会造成下次开机Tomcat出错服务不启动。在Linux下可以借助commons-daemon项目的jsvc工具来让Tomcat以daemon模式运行服务,Tomcat安装包里已经自带jsvc工具源码,直接解压出来编译安装

cd /opt/tomcat/tomcat8/bin
tar -zxvf commons-daemon-native.tar.gz
cd commons-daemon-1.0.15-native-src/unix
./configure --with-java=/opt/java/jdk1.8.0_121
make
cp jsvc ../..
cd ../..

*–with-java不添加不能以普通用户启动

编辑daemon.sh,在开始增加一行,支持chkconfig,增加后的样子如下:

#!/bin/sh
#
# chkconfig: - 80 20
#
# Licensed to the Apache Software Foundation (ASF) under one or more

80是启动优先级,20是停止优先级,优先级范围是0-100,数字越大,优先级越低。

在脚本注释后,执行命令前面增加下面两行:

JAVA_HOME=/opt/java/jdk1.8.0_121
CATALINA_HOME=/opt/tomcat/tomcat8
TOMCAT_USER=tomcat

参数TOMCAT_USER=tomcat指定Tomcat服务以tomcat普通用户运行

修改ARG0的值为如下:

ARG0="/opt/tomcat/tomcat8"

创建daemon.sh软连接到/etc/init.d中,并且配置服务自启动

[root@localhost ~]# ln -s /opt/tomcat/tomcat8/bin/daemon.sh /etc/init.d/tomcatd
[root@localhost ~]# chkconfig --add tomcatd
[root@localhost ~]# chkconfig --level 2345 tomcatd on

上面最后这句是让tomcat在linux2、3、4、5启动级别自启动,查看chkconfig状态

[root@localhost ~]# chkconfig --list tomcatd
tomcatd 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭

启动Tomcat

[root@localhost ~]# service tomcatd start

至此,CentOS6下Java跟tomcat的安装配置完成,以上很多地方都是实际项目部署上线时遇到的一些问题,现在一起整理出来。tomcat还有很多地方可以进行优化,看以后有时间再整理更新。

参考文档:

http://tomcat.apache.org/tomcat-8.0-doc/
http://tomcat.apache.org/tomcat-8.0-doc/config/http.html
http://tomcat.apache.org/native-doc/
http://www.linuxidc.com/Linux/2014-08/105238.htm
http://snowolf.iteye.com/blog/145770
http://www.zhixing123.cn/jsp/48969.html
http://blog.csdn.net/hxyerui/article/details/52448387

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据