linux运维、架构之路-tomcat服务
一、tomcat介绍
Tomcat服务器是一个免费的开放源代码的Web应用服务器,即能处理静态页面,又能处理动态的java页面
Tomcat版本及其区别介绍
- Tomcat本身的技术演进,包括性能的不断提高,功能的增加增强,甚至于重构
- 因为Tomcat本身是Servlet容器,所以他的版本是跟Servlet和JSP的规范一起发展
官方文档
http://tomcat.apache.org/whichversion.html
二、JDK安装
jdk是java开发工具包,也可以叫java虚拟机jvm,jvm会将一份代码自动转换成不同平台的代码,类似php功能
1、系统环境
[root@tomcat ~]# cat /etc/redhat-release
CentOS Linux release 7.2. (Core)
[root@tomcat ~]# uname -r
3.10.-.el7.x86_64
[root@tomcat ~]# getenforce
Disabled
[root@tomcat ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
[root@tomcat ~]# hostname -I
172.19.5.10 172.16.1.10
2、安装JDK
cd /application/tools/
#上传jdk-8u60-linux-x64.tar.gz
tar xf jdk-8u60-linux-x64.tar.gz -C /application/
ln -s /application/jdk1..0_60 /application/jdk
sed -i.ori '$a export JAVA_HOME=/application/jdk\nexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH\nexport CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar' /etc/profile
source /etc/profile
检查JDK版本信息
[root@tomcat ~]# java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
三、部署tomcat
tomcat .x:http://tomcat.apache.org/download-60.cgi
tomcat .x:http://tomcat.apache.org/download-70.cgi
tomcat .x:http://tomcat.apache.org/download-80.cgi
tomcat .x:http://tomcat.apache.org/download-90.cgi
1、安装tomcat
cd /application/tools/
#上传apache-tomcat-8.0..tar.gz
tar xf apache-tomcat-8.0..tar.gz -C /application/
ln -s /application/apache-tomcat-8.0. /application/tomcat
echo 'export TOMCAT_HOME=/application/tomcat'>>/etc/profile
source /etc/profile
chown -R root.root /application/jdk/ /application/tomcat/
检查tomcat版信息
[root@tomcat ~]# /application/tomcat/bin/version.sh
Using CATALINA_BASE: /application/tomcat
Using CATALINA_HOME: /application/tomcat
Using CATALINA_TMPDIR: /application/tomcat/temp
Using JRE_HOME: /application/jdk
Using CLASSPATH: /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar
Server version: Apache Tomcat/8.0.27
Server built: Sep 28 2015 08:17:25 UTC
Server number: 8.0.27.0
OS Name: Linux
OS Version: 3.10.0-327.el7.x86_64
Architecture: amd64
JVM Version: 1.8.0_60-b27
JVM Vendor: Oracle Corporation
2、tomcat目录介绍
[root@tomcat ~]# tree /application/tomcat -L 1
/application/tomcat
├── bin #启动,关闭命令
├── conf #配置文件
├── lib
├── LICENSE
├── logs #日志文件
├── NOTICE
├── RELEASE-NOTES
├── RUNNING.txt
├── temp
├── webapps #站点目录
└── work
3、tomcat相关命令
/application/tomcat/bin/startup.sh #启动程序
/application/tomcat/bin/shutdown.sh #关闭程序
netstat -tunlp|grep java #查看tomcat端口信息
http://172.19.5.10:8080/
/logs/catalina.out #tomcat实时日志,此文件会越来越大,记得清空
4、配置tomcat管理
①service服务配置参数
port="" protocol="HTTP/1.1" #port 端口配置
connectionTimeout="" #connectionTimeout指定超时的时间数(以毫秒为单位)
maxThreads="" #tomcat起动的最大线程数,即同时处理的任务个数,默认值为200
minSpareThreads="" #初始化时创建的线程数
acceptCount="" #指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理
maxKeepAliveRequests="" #表示该连接最大支持的请求数。超过该请求数的连接也将被关闭(此时就会返回一个Connection: close头给客户端)。 URIEncoding="UTF-8" #指定字符集
redirectPort="" /> #指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号
②设置Tomcat 内存限制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" server:一定要作为第一个参数,在多个CPU时性能佳
-Xms:初始堆内存Heap大小,使用的最小内存,cpu性能高时此值应设的大一些
-Xmx:初始堆内存heap最大值,使用的最大内存
上面两个值是分配JVM的最小和最大内存,取决于硬件物理内存的大小,建议均设为物理内存的一半。
-XX:PermSize:设定内存的永久保存区域
-XX:MaxPermSize:设定最大内存的永久保存区域
-XX:MaxNewSize:
-Xss 这使得JBoss每增加一个线程(thread)就会立即消耗15M内存,而最佳值应该是128K,默认值好像是512k.
+XX:AggressiveHeap 会使得 Xms没有意义。这个参数让jvm忽略Xmx参数,疯狂地吃完一个G物理内存,再吃尽一个G的swap。
-Xss:每个线程的Stack大小
-verbose:gc 现实垃圾收集信息
-Xloggc:gc.log 指定垃圾收集日志文件
-Xmn:young generation的heap大小,一般设置为Xmx的3、4分之一
-XX:+UseParNewGC :缩短minor收集的时间
-XX:+UseConcMarkSweepGC :缩短major收集的时间
③Tomcat配置获取用户IP地址server.xml
className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t %r %s %b" />
###前面有负载均衡的时候,获取真实IP可以使用下面的配置###
className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%{X-Forwarded-For}i %h %l %u %t %r %s %b" />
④配置UI页面管理用户,生产环境务配置
[root@tomcat ~]# tail - /application/tomcat/conf/tomcat-users.xml
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>
</tomcat-users>
/application/tomcat/bin/shutdown.sh
/application/tomcat/bin/startup.sh
http://172.19.5.10:8080/manager/status
注:适合测试环境,线上最好不用
5、自定义站点目录
vim /application/tomcat/conf/server.xml #124行后加入以下内容
<Context path="" docBase="/application/tomcat/webapps/memtest" debug="" reloadable="false" crossContext="true"/>
<Context path="37team" docBase="/application/tomcat/webapps/memtest" debug="" reloadable="false" crossContext="true"/>
6、tomcat多实例
cd /application/tools/
tar xf apache-tomcat-8.0..tar.gz
cp -a apache-tomcat-8.0. tomcat8_1
cp -a apache-tomcat-8.0. tomcat8_2
sed -i 's#8005#8011#;s#8080#8081#' tomcat8_1/conf/server.xml
sed -i 's#8005#8012#;s#8080#8082#' tomcat8_2/conf/server.xml
cp -a tomcat8_1 tomcat8_2 /application/
#tar zcf muti.tomcat.tar.gz ./tomcat8_1 ./tomcat8_2打包,以后用直接解压
7、nginx反向代理tomcat
#yum安装nginx
yum -y install nginx
/usr/share/nginx/html #yum安装nginx的站点目录
/etc/nginx/nginx.conf #yum安装nginx的配置文件
vim /etc/nginx/nginx.conf #配置nginx负载均衡
upstream web_pools {
server 172.19.5.10:;
server 172.19.5.10:;
}
server {
listen ;
server_name localhost;
location / {
index index.jsp index.html index.htm;
proxy_pass http://web_pools;
}
}
模拟数据
echo >/application/tomcat8_1/webapps/ROOT/index.jsp
echo >/application/tomcat8_2/webapps/ROOT/index.jsp
测试负载均衡效果
8、jpress部署
yum -y install mariadb-server#数据库在7上面已改名
systemctl start mariadb.service
mysql#登录mysql
create database jpress DEFAULT CHARACTER SET utf8;
grant all on jpress.* to jpress@'localhost' identified by '';
#上传代码到站点目录
/application/tomcat8_1/webapps
mv jpress-web-newest jpress
mv jpress-web-newest.war /tmp/
http://172.19.5.10:8081/jpress/install
http://172.19.5.10:8081/jpress/admin/login
war包手动解压:
jar -xf memtest.war
9、tomcat监控
①直接获取tomcat的pid值
jps -lvm #快速获取Java进程的pid,不用ps和grep
②windows监控tomcat工具
C:\Program Files\Java\jdk1..0_31\bin
jconsole.exe
jvisualvm.exe
③配置tomcat支持远监控功能
vim /application/tomcat/bin/catalina.sh
CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=172.19.5.10" netstat -lntup|grep
遇到报错
错误: 代理抛出异常错误: java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException: tomcat: tomcat: unknown error
解决:主机名域名解析解决tomcat无法启动
④使用zabbix监控tomcat
yum install -y zabbix-java-gateway#前面已安装
#配置
/etc/init.d/zabbix-java-gateway start
sed -i -e '217a JavaGateway=127.0.0.1' -e '225a JavaGatewayPort=10052' -e '235a StartJavaPollers=5' /etc/zabbix/zabbix_server.conf
/etc/init.d/zabbix-server restart
⑤zabbix网页添加监控tomcat
四、tomcat优化
1、安全优化
①关闭管理端口保护
<Server port="8005" shutdown="SHUTDOWN"> #修改默认的8005端口,"SHUTDOWN"字符串也要改
②注释ajp连接端口保护
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> #注释此行
③禁用管理端
#webapps下面只保留一个ROOT空目录,其余的都清除
④tomcat降权启动
#降权,降低权限,像nginx,tomcat等都支持以普通用户的方式启动
useradd tomcat
cp -a /application/tools/tomcat8_1 /home/tomcat/
chown -R tomcat.tomcat /home/tomcat/tomcat8_1/
su -c '/home/tomcat/tomcat8_1/bin/startup.sh' tomcat
⑤生产环境关闭自动部署功能
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"> #true改为false
2、tomcat性能优化
Tomcat是最消耗内存的,如果有无限大的内存,tomcat就跑的特别快,优化方法如下:
①加大内存
②减少内存的消耗量:开发写得代码只是不停消耗内存,但是从来不释放
垃圾回收机制:定期扫描内存使用情况,找到未被使用的内存,回收周期性,一定内存使用量,每次垃圾回收都会使业务停止文档,jvm优化主要从垃圾回收策略开始阐述
③定期重启Tomcat
3、修改tomcat使用内存,tomcat默认消耗系统内存的1/4
vim /home/tomcat/tomcat8_1/bin/catalina.sh #97行
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms3072m -Xmx3072m -XX:NewSize=1536m -XX:MaxNewSize=1536m -XX:PermSize=1536m -XX:MaxPermSize=1536m"
访问测试
http://172.19.5.10:8081/meminfo.jsp
4、Tomcat获取用户IP地址
①tomcat配置文件/conf/server.xml
下配置
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t %r %s %b" />
②前面有负载均衡的时候,获取真实IP可以使用下面的配置
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%{X-Forwarded-For}i %h %l %u %t %r %s %b" />
五、tomcat启动脚本开发
[root@tomcat scripts]# cat tomcat.sh
#!/bin/sh Tomcat_Path=/application/tomcat/ usage() {
echo "usage: $0 [start|stop|status|restart]"
} status_tomcat() {
ps aux|grep java|grep tomcat|grep -v grep
} start_tomcat() {
/application/tomcat/bin/startup.sh
echo "tomcat is starting"
} stop_tomcat() { TomcatPid=$(ps aux|grep java|grep tomcat|grep -v grep|awk '{print $2}')
kill -9 $TomcatPid
sleep 5 TSTAT=$(ps aux|grep java|grep tomcat|grep -v grep|awk '{print $2}')
if [ -z $TSTAT ];then
echo "tomcat is stopped"
else
kill -9 $TSTAT
fi
cd ${Tomcat_Path}
rm -fr temp/*
rm -fr work/*
}
main() {
case $1 in
start)
start_tomcat;;
stop)
stop_tomcat;;
status)
status_tomcat;;
restart)
stop_tomcat && start_tomcat;;
*)
usage;
esac
}
main $1
六、tomcat在CentOS7系统上启动慢
1、tomcat启动慢原因现象
在CentOS7启动Tomcat时,启动过程很慢,需要几分钟,经过查看日志,发现耗时在这里:是session引起的随机数问题导致的
2、解决办法
①方法
vim $JAVA_HOME/jre/lib/security/java.security
securerandom.source=file:/dev/random
#改为
securerandom.source=file:/dev/urandom
②方法
vim $TOMCAT_HOME/bin/catalina.sh
if [[ "$JAVA_OPTS" != *-Djava.security.egd=* ]]; then
JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/urandom"
fi
③方法
yum install rng-tools -y
systemctl start rngd.service
systemctl enable rngd.service
七、Jar包介绍
很多时候开发会给我们一个jar包,让我们运行,启动命令如下:
nohup java -jar jar包名称.jar > user.out &
linux运维、架构之路-tomcat服务的更多相关文章
- linux运维架构师职业规划
1.假如你从来未接触过Linux的话,首先要做的就找一本指导书来学习.现在公认的Linux的入门书籍是“鸟哥的私房菜”,讲的很全面,鸟哥的私房菜一共分为两部,一部是基础篇,一部是服务器篇.“鸟哥的私房 ...
- Linux运维五:定时任务crond服务
一.crond简介 crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动cro ...
- 从苦逼到牛逼,详解Linux运维工程师的打怪升级之路
做运维也快四年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点. 运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感 ...
- Linux运维企业架构实战系列
Linux运维企业架构项目实战系列 项目实战1-LNMP的搭建.nginx的ssl加密.权限控制的实现 项目实战2-LVS.nginx实现负载均衡系列 2.1 项目实战2.1-实现基于LVS负载均衡集 ...
- Linux运维企业架构项目实战系列
Linux运维企业架构项目实战系列 项目实战1—LNMP的搭建.nginx的ssl加密.权限控制的实现 项目实战2—LVS.nginx实现负载均衡系列2.1 项目实战2.1—实现基于LVS负载均衡集群 ...
- Linux 运维入门到跑路书单推荐
一.基础入门 <鸟哥的Linux私房菜基础学习篇>:最具知名度的Linux入门书<鸟哥的Linux私房菜基础学习篇>,全面而详细地介绍了Linux操作系统. https://b ...
- Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Discuz!
Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Disc ...
- 运维架构服务监控Open-Falcon
一. 介绍 监控系统是整个运维环节,乃至整个产品生命周期中最重要的一环,事前及时预警发现故障,事后提供翔实的数据用于追查定位问题.监控系统作为一个成熟的运维产品,业界有很多开源的实现可供选择.当公司刚 ...
- Linux运维工程师成长必经之路
本路线图是从0基础开始,全方位由浅入深,按照多年Linux培训经验和优秀教学方法制定的学习思路和学习方法,路线图包括初级入门.中级进阶.高级提升和资深冲刺四个阶段,每阶段对应着不同优秀的课程和学习方法 ...
随机推荐
- windows 下使用Linux子系统
在 Windows 上进行 web 开发,比较普遍的方案是使用 phpstudy 或者别的一些集成环境软件进行环境搭建,写好代码后将代码上传至版本管理工具 git/svn,再将代码同步到 Linux ...
- JavaScript对象之--- RegExp
1.概述 正则表达式是描述字符模式的对象. 正则表达式用于对字符串模式匹配以及检索替换: 2.语法 前者为模式,后者为修饰符. var reg = new RegExp( "xyz" ...
- 【MM系列】SAP MM模块-配置PO的创建时间
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MM模块-配置PO的创建时间 ...
- cocos2dx基础篇(20) 扩展动作CCGridAction
[3.x] (1)去掉"CC" [CCGridAction] CCGridAction有两个子类:CCGrid3DAction.CCTiledGrid3DAction.而我 ...
- Go语言入门篇-Golang之文本编码处理
Golang之文本编码处理
- 删除MicrosoftOffice2016的扫尾工作
因为用到一些画流程图之类的工具,想到以前用的Visio挺好用的,就找来安装一下,结果因为装了Microsoft Office2016在安装时报错不断,先说下网上的帖子:用OfficeDeploymen ...
- 【监控笔记】【3.1】DML(CDC)、DDL(DDL触发器)跟踪数据更改,数据库审计
关键词:数据库审计.DDL审计.DML审计 [监控笔记][3.1]DML(CDC).DDL(DDL触发器)跟踪数据更改 [1]DML(CDC) 2008及以上 https://www.cnblogs. ...
- typescript是否可以直接编译执行?
算是个有趣的小问题,由于必须依赖node.js,typescript理论上是不能不转成js直接运行的.
- AcWing 875. 快速幂
题目链接:https://www.acwing.com/problem/content/description/877/ 快速幂模板题,计算ab mod p 的值,a,b,p大概1e9左右,可以快速计 ...
- 区间gcd
http://codeforces.com/problemset/problem/914/D 题意:给你n个数,两种操作:1.询问区间[l,r]在至多一次修改一个数的条件下区间gcd是否等于x. 2. ...