Tomcat安装-多实例

1、安装JDK
tar xf jdk-8u60-linux-x64.tar.gz -C /usr/local/
ln -s /usr/local/jdk1.8.0_60 /usr/local/jdk


2、添加java环境变量
sed -i '$a export JAVA_HOME=/usr/local/jdk' /etc/profile
sed -i '$a export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH' /etc/profile
sed -i '$a export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar' /etc/profile
source /etc/profile
关于上面那个sed命令的说明:sed -i.ori :-i表示对文件本身操作,
.ori表示修改的同时备份源文件表示文件内容的最后一行,
a表示在下面进行数据插入
\n :表示插入数据时换行


3、查看java正确安装
which java      #有安装目录
java -version #有java信息输出


4、解压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


5、添加tomcat环境变量
echo 'export TOMCAT_HOME=/usr/local/tomcat' >> /etc/profile
source /etc/profile


6、修改tomcat中目录权限 #修改俩处
chown -R root.root /usr/local/jdk/ /usr/local/tomcat/

6-1、tomcat目录结构
[root@localhost tomcat]# tree -L 1
.
├── bin #用以启动,关闭Tomcat或者其他功能的脚本(.bat文件和.sh文件)
├── conf #用以配置Tomcat的XML及DTD文件
├── lib #存放web应用能访问的JAR包
├── LICENSE
├── logs #Catalina和其他Web应用程序的日志文件
├── NOTICE
├── RELEASE-NOTES
├── RUNNING.txt
├── temp #临时文件
├── webapps #Web应用程序根目录
└── work #用以产生有JSP编译出的Servlet的.java和.class文件


7 directories, 4 files


7、tomcat启动与关闭:
启动程序:/usr/local/tomcat/bin/startup.sh
关闭程序:/usr/local/tomcat/bin/shutdown.sh


7-1、正确启动输出的信息
[root@data-01 webapps]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
7-2、测试访问
[root@data-01 webapps]# curl -I http://localhost:8080
HTTP/1.1 200 OK   #200 表示请求成功
netstat -antup | grep java  #查看java进程 有3个


8、tomcat配置文件目录
cd /usr/local/tomcat/conf/
server.xml #主配置文件
tomcat-users.xml #Tomcat管理用户配置文件


8-1、修改tomcat管理配置文件---默认是禁用的。推荐禁用--优化之一禁用管理界面。
在<tomcat-users>标签内添加,这个标签在配置文件最后

<role rolename="manager-gui"/> #加入此行
<role rolename="admin-gui"/> #加入此行
<user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/> #加入此行


9、重启---重启后即可登录到管理界面
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh

10、测试访问--登录到管理界面
http://192.168.88.66:8080/manager/status
提示输入用户及密码 上:8-1 设置的username、password


========================================================
========tomcat多实例操作:多实例出2个,共3个实例。
========================================================
1、拷贝/usr/local/下的tomcat源码包
cd /usr/local/
cp -a apache-tomcat-8.0.27 tomcat8_1
cp -a apache-tomcat-8.0.27 tomcat8_2


2、创建多实例的网页根目录
mkdir -p /data/www/www/ROOT


3、修改对应实例目录下的配置文件 server.html 中的端口以及网页根目录路径
<Server port="8011" shutdown="SHUTDOWN">
  <Connector port="8081" protocol="HTTP/1.1"
 <Host name="localhost"  appBase="/data/www/www"
 
123       <Host name="localhost"  appBase="webapps"
124             unpackWARs="true" autoDeploy="true">
125             <Context path="" docBase="/data/www/www"
126                             debug="0" reloadable="false" crossContext="true" />


4、启动多实例tomcat
/usr/local/tomcat8_1/bin/startup.sh  #启动第一个实例
/usr/local/tomcat8_2/bin/startup.sh  #启动第二个实例


5、查看对应的端口是否启用
netstat -antup | grep java 
========================================================================================
6、Nginx+Tomcat反向代理集群


6-1、修改Nginx配置文件,添加upstream模块对应实例中的tomcat实例;
upstream web_pools { 
server 127.0.0.1:8081; 
server 127.0.0.1:8082; 

6-2、location匹配中: 添加
proxy_pass http://web_pools;
========================================================================================


一、maven搭建:
1、tar xf apache-maven-3.3.9-bin.tar.gz -C /usr/local/ 
2、ln -s /usr/local/apache-maven-3.3.9 /usr/local/maven 
tail -2 /etc/profile 
export MAVEN_HOME=/usr/local/maven 
export PATH="$MAVEN_HOME/bin:$PATH" 
source /etc/profile 


 mvn -version #查询版本
 
Java环境变量配置:
JAVA_HOME=/usr/local/jdk/jdk1.8.0_131




export JAVA_HOME=/usr/local/jdk/jdk1.8.0_131
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH




export MAVEN_HOME=/usr/local/maven
export PATH="$MAVEN_HOME/bin:$PATH"


安装jenkins后“可选插件”列表为空 
解决方案
选择插件管理-高级-升级站点-更改URL为
[http://mirror.xmission.com/jenkins/updates/update-center.json]-点击提交即可
 


=========================================================================================
 
二、使用Tomcat安装Jpress,类似于wordpress个人博客。


1、解压:apache-maven
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 


2、添加环境变量
vim /etc/profile
export MAVEN_HOME=/usr/local/maven 
export PATH="$MAVEN_HOME/bin:$PATH" 
source /etc/profile 


3、检测是否安装成功
mvn -version        #出现这个表示成功 


4、将jpress的war拷贝到tomcat的根目录下
ls -l jpress-web-newest.war 
mv jpress-web-newest.war /data/www/www/ROOT/ 

5、解压jpress的war包
cd /data/www/www/ROOT/ 
jar xf jpress-web-newest.war 
 
6、浏览器直接访问::http://192.168.88.66/install   进入jpress安装向导


虽然,Tomcat已经打开了自动解压缩war包的功能,但是细心的同学会发现我并没有 重启Tomcat服务,
因此,war包并没有被自动解压缩。故,我们需要通过jar命令进行 解压缩,命令的参数和tar是一样的




==============================================================================================
============   Tomcat优化 --- 负载:说的只有CPU
==============================================================================================
1、telnet管理端口保护,将默认的管理端口修改-最好是将整个管理端口禁用掉
22 <Server port="8005" shutdown="SHUTDOWN">
#表示通过8005端口来接受SHUTDOW N,用来停止Tomcat进程。默认的方式是非常危险的。需要进行修改 
Tomcat默认通过8005端口来接收SHUTDOWN这个字符串来关闭Tomcat进程,
但这是非常危险的,因此需要修改端口号来防护。否则,通过telnet命令即可强行关闭Tomcat 进程

2、将原生的 ROOT 也就是没用的文件删除。
cd /usr/local/tomcat/webapps/ 
#有 、很多多余的东西,只留下ROOT目录,其他都删掉或者mv移走
 
ls ROOT/  
#很多多余的东西,因此清空本目录,或者都移 走 


3、将 AJP 端口禁用,也就是:不要的端口都禁用掉,加强系统的安全性。
91  <!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->
#这是AJP协议打开的端口,我们并不需要开启这个端口,因此注释掉本行

4、自定义webapps的目录,也就是:将tomcat中所有默认的信息全部修改掉。
在 Host 标签中添加,重新制定web的根目录  
4-1、server.xml 文件中限制web站点的根目录路径,path表示此web应用程序的url的前缀,这样请求的url为 : http://localhost:8080/path/****
125     <Context path="" docBase="/usr/local/tomcat/webapps/memtest"
126       debug="0" reloadable="false" crossContext="true" />
提示:运行的java的war包,就需要放到 docBase 中才能够被tomcat识别。


5、降权,使用普通用户启动: tomcat 服务
   降权的原则就是利用普通用户来启动Tomcat 
(1)将Tomcat程序目录拷贝到普通用户家目录下 
(2)修改家目录下程序的配置文件(启动端口,检测端口等),并重新指定网页根目录 路径。 
(3)递归授权拷贝后的Tomcat程序的属主属组为普通用户。 
(4)用su命令切换为普通用户,启动Tomcat进程 
(5)此时Tomcat进程的权限为普通用户权限 
(6)如果利用/etc/rc.local文件配置普通用户程序的开机启动,那么需要利用su -c临时 切换身份启动。具体可参考linux基础教案里的用户管理部分


====================================================================================================


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


2、 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-Xms1 024m -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 15120 这使得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收集的时间


==========================================================================================================
==========================================================================================================


:Linux下java/http进程高解决案例
问题分析:
(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 #过滤出有问题的线程的堆栈信息,找出问题代码块


实际操作演示:
 1、pgrep -l java   #java进程及对应PID号 
 
 2、strace -p 2031       #查看PID号为2031的java进程的所有线程调用情况 
 
 3、printf "%x\n" 2032   #将线程的PID号2032转换成十六进制格式 


 4、jstack 2031 | grep 7f0 -A 30 #追踪进称号为2031的进程的所有线程调用,从里面过滤出16进制为7f0的线程的代码调用情况
at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl. java:409)    #圆括号里显示的是(代码类名:具体调用的代码行号


=====================
jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,
如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使用方式只支持以下的 这种方式: jstack [-l] pid 


(2)命令格式
jstack [ option ] pid 
jstack [ option ] executable core 
jstack [ option ] [server-id@]remote-hostname-or-IP
1)、options:
executable Java executable from which the core dump was produced. 
(可能是产生core dump的java可执行程序) 
core 将被打印信息的core dump文件 remote-hostname-or-IP 远程debug服务的主机名或ip server-id 唯一id,假如一台主机上多个远程debug服务

2)、基本参数:
-F:当’jstack [-l] pid’没有相应的时候强制打印栈信息 
-l:长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表. 
-m:打印java和native c/c++框架的所有栈信息. 
-h | -help:打印帮助信息 
pid :需要被打印配置信息的java进程id,可以用jps查询.



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值