博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Tomcat

Posted on 2018-11-21 16:48  Tang&An  阅读(186)  评论(0编辑  收藏  举报

Tomcat

一、Tomcat简介

Tomcat是Apache软件基金会(ApacheSoftwareFoundation)的Jakarta项目中的一个核心项目,由Apache,Sun和其他一些公司及个人共同开发而成。

Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。

Tomcat和Nginx,APache(httpd),lighttpd等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Nginx/Apache服务器。

Java的容器,运行的是java代码

二、Tomcat安装

需要安装java环境(JDK)

JDK下载:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Tomcat下载:http://tomcat.apache.org/

部署java环境jdk

jdk的解压安装

tar xf jdk-8u60-linux-x64.tar.gz -C /usr/local/

做软链接方便使用

ln -s /usr/local/jdk1.8.0_60 /usr/local/jdk

添加java环境变量

sed -i.ori '$a export JAVA_HOME=/usr/local/jdk\nexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH\nexport CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar' /etc/profile

重启环境变量

source /etc/profile

检查java环境安装情况
which java
java -version查看版本

解压安装Tomcat

tar xf apache-tomcat-8.0.27.tar.gz -C /usr/local

做软链接方便使用

ln -s /usr/local/apache-tomcat-8.0.27 /usr/local/tomcat

配置tomcat环境变量

echo 'export TOMCAT_HOME=/usr/local/tomcat' >> /etc/profile

重启环境变量

source /etc/profile

查看jdk及tomcat目录的属主属组,都修改成root

启动tomcat:

/usr/local/tomcat/bin/startup.sh

tomcat默认监听端口:8080

 tomcat主配置文件

/usr/local/tomcat/conf/server.xml

进入tomcat管理端的配置文件

vim /usr/local/tomcat/conf/tomcat-users.xml

在第三十八行上面添加三行代码,开启管理功能,一般不用,开启后登录网页时会输入账号密码

<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>

==>开启管理端的功能
==>开启管理员的功能

重启tomcat:

/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh

通过浏览器登录tomcat:192.168.200.101:8080/manager/status
输入账号密码:tomcat tomcat
然后进入tomcat管理端

tomcat主配置文件:/usr/local/tomcat/conf/server.xml

tomcat可以自己解压war包,将war包扔到/usr/local/tomcat/webapps
重启tomcat可以发现webapps多了war包解压后的目录
(webapps为tomcat主页目录,除了root目录不能删,其他的都可以删掉)

使用浏览器进行测试
192.168.200.101:8080/memtest/meminfo.jsp(java都是以jsp结尾)

自定义网站目录,想要直接访问meminfo.jsp没有中间memtest子目录
只要将向访问的东西扔到webapps主页目录里的ROOT目录下即可

 三、Tomcat多实例

复制Tomcat目录,再做两个Tomcat,名为tomcat8_1和tomcat8_2

cd /usr/local
cp -a apache-tomcat-8.0.27 tomcat8_1
cp -a apache-tomcat-8.0.27 tomcat8_2

修改多实例配置文件

创建多实例的网页跟目录

mkdir -p /data/www/www/ROOT

将网页程序拷贝到,多实例根目录ROOT下

cp /usr/local/tomcat/webapps/memtest/meminfo.jsp /data/www/www/ROOT/

修改多实例配置文件的一下三行

vim /usr/local/tomcat8_1/conf/server.xml

第22行 端口==>监听端口不能相同
第69行 端口
第123行 Host name="域名" appBase="网页根目录路径"

两个多实例都需要修改
将两个实例tomcat服务启动
打开浏览器测试,记得输入域名时输入修改后的端口

四、Tomcat集群

使用nginx+Tomcat反向代理集群

安装nginx

复制代码
yum -y install pcre-devel openssl-devel
wget -q http://nginx.org/download/nginx-1.10.2.tar.gz
useradd -s /sbin/nologin -M nginx
tar xf nginx-1.10.2.tar.gz -C /usr/src
cd /usr/src/nginx-1.10.2/
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make && make install
复制代码

修改Nginx配置文件

创建配置文件模板

egrep -v "#|^$" /usr/local/nginx/conf/nginx.conf.default > /usr/local/nginx/conf/nginx.conf

修改配置文件内容如下

  1. cat /usr/local/nginx/conf/nginx.conf
  2. worker_processes 1;
  3. events {
  4. worker_connections 1024;
  5. }
  6. http {
  7. include mime.types;
  8. default_type application/octet-stream;
  9. sendfile on;
  10. keepalive_timeout 65;
  11. upstream web_pools {
  12. server 127.0.0.1:8081;
  13. server 127.0.0.1:8082;
  14. }
  15. server {
  16. listen 80;
  17. server_name localhost;
  18. location / {
  19. root html;
  20. index index.jsp index.html index.htm;
  21. proxy_pass http://web_pools;
  22. }
  23. }
  24. }

检测语法并启动Nginx

/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx
netstat -antup | grep nginx

五、部署JPress博客
JPress:一个wordpress的java替代版本,使用JFinal开发,需要maven支持

需要apache-maven-3.3.9-bin.tar.gz

解压apache-maven-3.3.9-bin.tar.gz

tar xf apache-maven-3.3.9-bin.tar.gz -C /usr/local

做软链接

ln -s /usr/local/apache-maven-3.3.9 /usr/local/maven

添加环境变量

echo "export MAVEN_HOME=/usr/local/maven" >> /etc/profile
echo 'export PATH="$MAVEN_HOME/bin:$PATH"' >> /etc/profile

测试:mvn -version

将jpress-web-newest.war包放到Tomcat网站根目录下

mv jpress-web-newest.war /usr/local/tomcat/webapps/ROOT/

解压war包:which jar==>jar是war包的解压命令

cd /usr/local/tomcat/webapps/ROOT/
jar xf jpress-web-newest.war

安装MySQL

安装mysql二进制
直接解压即可:解压到/usr/local/
创建用户:

useradd -s /sbin/nologin -M mysql

进入/usr/local/mysql-5.5.32-linux/
做个软连接方便使用==>

ln -s mysql-5.5.32-linux /usr/local/mysql

复制配置文件:

/bin/cp support-files/my-small.cnf /etc/my.cnf

  做初始化:

映射==>

echo "192.168.200.131 LNMP" > /etc/hosts

创建mysql数据文件目录==>

mkdir -p /usr/local/mysql/data

授权mysql用户管理mysql的安装目录==>

chown -R mysql.mysql /usr/local/mysql

安装初始化mysql依赖包==>

yum -y install libaio

初始化mysql数据库文件==>

/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql

复制mysql启动脚本到mysql的命令路径==>

cd /usr/local/mysql
cp support-files/mysql.server /etc/init.d/mysqld

加x权限,使脚本可执行==>

chmod +x /etc/init.d/mysqld

启动mysql==>

/etc/init.d/mysqld start

给mysql命令做软连接==>

ln -s /usr/local/mysql/bin/* /usr/local/bin

给mysql添加密码==>

mysqladmin -uroot password '123123'

先在mysql创建专用数据库jpress,用于存放blog数据

登录mysql:mysql -uroot -p123123

create database jpress;

创建一个jpress专用管理用户

grant all on jpress.* to jpress@’localhost’ identified by ‘123123’;

 用浏览器访问192.168.200.101:8080/install进入jpress安装向导

 

六、Tomcat相关优化

安全优化

最重要的优化为如下四项,但不止四种
降权启动(用普通用户启动Tomcat)
telnet管理端口保护(修改8005端口,防止别人知道)
ajp连接端口保护(将8009的注释掉,大约在91行)
禁用管理端(webapps首页清空只留ROOT,ROOT目录里的也清空)

性能优化

屏蔽DNS查询enableLookups="false"
默认没有,需添加配置文件如下代码段,在Connector标签位置。表示禁止DNS查询
<Connector port="8081" protocol="HTTP/1.1"
  connectionTimeout="6000" enableLookups="false" acceptCount="800"
  redirectPort="8443" />

jvm调优

Tomcat最吃内存,只要内存足够,这只猫就跑的快
如果系统资源有限,那就需要进行调优,提高资源使用率
#优化catalina.sh初始化脚本。在catalina.sh初始化脚本中添加以下代码:
#catalina.sh的路径为:/usr/local/tomcat/bin/catalina.sh
#此行优化代码需要加载甲苯的最开始,声明位置。不要放在后边

JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m"

JVM的调优比较复杂,对于初学的同学们来说掌握这些就足够了。
如果想更详细的理解JVM如何调优,那么请参考网友文章。
http://www.cnblogs.com/xingzc/p/5756119.html

企业案例

Linux下java/http进程高解决案例
生产环境下某台tomcat7服务器,在刚发布的时候一切都很正常,
在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高。
问题分析:
(1)程序属于CPU密集型,和开发沟通过,排除此类情况
(2)程序代码有问题,出现死循环,可能性极大
问题解决:
(1)开发那边无法排查代码某个模块有问题,从日志上也无法分析得出
(2)我们可以尝试通过jstack命令来精确定位出现错误的代码段,从而拿给开发排查
(1)首先查找进程高的PID号(先找到是哪个PID号的进程导致的)
  top -H
(2)查看这个进程所有系统调用(再找到是哪个PID号的线程导致的)
  strace -p 进程的PID
(3)如果是web应用,可以继续打印该线程的堆栈信息(找出有问题的代码块)
  printf "%x\n" 线程的PID——>将有问题的线程PID号转换成16进制格式
  jstack 进程的PID | grep 线程PID号的十六进制格式 -A 30——>过滤出有问题的线程的堆栈信息,找出问题代码块