一、Tomcat概念及其应用
1.理解Tomcat
- Tomcat是一款开源免费的Web服务器,主要基于HTTP传输协议发布网页,提供网络信息服务,最终能让用户通过浏览器访问网站页面
- Tomcat默认可以处理静态网页(Nginx、Apache),同时也可以动态网页请求JSP(Java Server Page)是基于Java语言开发的网路程序
2.Java、Tomcat、JDK之间关系
- Java是一门面向对象的开发语言,JDK是Java语言开发所需的工具,同时也算是运行环境所必须的(JRE:jvm虚拟机+java类、库),而Tomcat是Java语言开发出来的
- Java开发人员编写Java程序,可以借助Java工具javac对java源码进行编译得到子字节码件,最终jvm虚拟机去解析Java字节码,映射到cpu指令集或os系统调用
3.Tomcat部署流程
- 由于Tomcat是基于java开发,所以在运行Tomcat之前,需要安装该程序所需的依赖环境
## 下载Jdk压缩包
ls -ld jdk-11.0.10_linux-x64_bin.tar.gz
## 解压ya压缩包
tar -zxf jdk-11.0.10_linux-x64_bin.tar.gz;cd jdk-11.0.10
## 将解压的目录移动到/usr/local下
\mv jdk-11.0.10 /usr/local
## 将Jdk的bin目录加入环境变量(/etc/profile)
export PATH=$PATH:/usr/local/jdk-11.0.10/bin
echo 'export PATH=$PATH:/usr/local/jdk-11.0.10/bin' >> /etc/profile;source /etc/profile;
## 添加Java_Home环境
echo 'export JAVA_HOME=/usr/local/jdk-11.0.10/' >> /etc/profile;source /etc/profile;
## 验证环境
java --version
- 部署Tomcat Web平台
## 下载Tomcat工具包
ls apache-tomcat-9.0.107.tar.gz
## 解压工具包
tar -xzvf apache-tomcat-9.0.107.tar.gz
## 将此目录移动目标目录,并重命名为Tomcat目录下
\mv apache-tomcat-9.0.107 /usr/local/tomcat/
## 查看是否部署成功
ls /usr/local/tomcat/
## 启动Tomcat服务进程
/usr/local/tomcat/bin/startup.sh
## 查看进程状态
ps -ef | grep -aiE tomcat
## 查看监听端口
netstat -tnlp | grep -E "8005|8080|8009"
##8005 Shutdown关闭服务 8080 HTTP协议远程端口 8009 Apache和Tomcat专属端口
测试:通过IP+端口进行访问,即可完成Tomcat Web平台部署
在企业生产环境,通常会给一台Tomcat服务器部署多个web实例,从而提高tomcat整体的性能
## 重命名第一个Tomcat实例为tomcat_v1
mv /usr/local/tomcat/ /usr/local/tomcat_v1/
## 将tomcat_v1实例拷贝一份命名为tomcat_v2
cp /usr/local/tomcat_v1 /usr/local/tomcat_v2/ -a
## 修改第二个tomcat端口(8006,8081)
vim /usr/local/tomcat_v2/server.xml
## 重启两个tomcat服务进程
pkill java
/usr/local/tomcat_v1/bin/startup.sh
/usr/local/tomcat_v2/bin/startup.sh
## 查看Tomcat集群监听端口情况
netstat -tnlp | grep java
在企业生产提供环境tomcat 不会对外提供服务,而是引入了Nginx负载均衡器,这样让Nginx和Tomcat完美结合在一起发挥其作用。
基于Nginx负载均衡,反向代理的2个toimcat服务集群,只需在nginx服务配置文件中加入upstream、proxy_pass参数即可
出现了静态资源找不到的情况
find /usr/local/tomcat_v1/* -type f -name 'tomcat.css'
/usr/local/tomcat_v1/webapps/ROOT/tomcat.css
scp -r /usr/local/tomcat_v1/webapps/ROOT/ 10.0.0.5:/usr/share/nginx/html/
适当提高权限
chown nginx.nginx *
二、Tomact性能优化及其配置详解
1.分析server.xml配置文件
2.分析tomcat日志
/usr/local/tomcat_v1/bin/startup.sh;tail -fn 20 ../logs/catalina.out
错误情况如下
解决报错后访问正常
3.tomcat连接器的选择
Tomcat连接器主要有三种运行方式bio、nio、apr三种方式
bio(阻塞式I/o操作):使用的是传统的I/O操作方法
nio(非阻塞式I/O操作):基于缓冲区提供的非阻塞式i/o操作并发运行性能
使用压力测试工具(如果无法使用ab工具需要根据yum provides ab安装httpd对应工具),测试各个连接器的性能
所使用的压测命令:ab -c 2000 -n 10000 http://10.0.0.6:8082/index.jsp
可以使用以下配置覆盖原发布目录
<Context path="/" docBase="/data/webapps/www" reloadable="true"/>
压测工具使用注意事项
需要注意参数
- NIO测试结果
要修改server.xml配置文件信息
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />
- apr测试结果
利用动态链接库,来处理静态文件,解决了大规模I/O处理问题
要修改server.xml配置文件信息
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8443" />
修改后无法正常启动即需要安装apr和native找到符合apr运行的环境
## 安装apr库包环境
yum -y install apr apr-devel
## 安装native
cd /usr/local/tomcat_v3/bin/
## 解压tomcat-native.tar.gz安装包
tar -zxvf tomcat-native.tar.gz
## 进入运行环境进行预编译操作
cd native;
./configure --with-apr=/usr/bin/apr-1-config
make && make install
## 验证编译生成的库文件
ls -ld /usr/local/apr/lib
## 加入该配置到环境变量
vim /etc/profile
export CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib"
source /etc/profile
4.Jvm虚拟机
Jvm虚拟机包括处理器、堆、栈、寄存器、主要是将字节码文件映射到cpu指令集或os进行系统调用
- 堆:所有new出来的对象都会在堆中分配,堆的大小可以通过-Xmx和-Xms来控制【java出现了内存溢出情况】,堆可以被分为新生代和旧生代,所谓新生代接口新建的对象分配到内存那一部分,而旧生代则是被垃圾回收器回收但仍然存活的那一部分,持久代则是存放已加载的类信息、方法信息、常量池,可通过-XX:PermSize和-XX:MaxPermSize来设置其初始值和最大值
若想使用客户端监控栈、堆、内存使用情况,可以加入如下配置定义10000端口
-Djava.rmi.server.hostname=10.0.0.6 -Dcom.sun.management.jmxremote.port=10000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
配置文件内容如下:
CATALINA_OPTS="-Xms512M -Xmx1024M -Djava.library.path=/usr/local/apr/lib -Djava.rmi.server.hostname=10.0.0.6 -Dcom.sun.management.jmxremote.port=10000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"