【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
16.4 配置Tomcat监听80端口
16.5/16.6/16.7 配置Tomcat虚拟主机(有如何创建一个zrlog博客)
16.8 Tomcat日志
扩展
邱李的tomcat文档 https://www.linuser.com/forum.php?mod=forumdisplay&fid=37
JAR、WAR包区别 http://blog.csdn.net/lishehe/article/details/41607725
tomcat常见配置汇总 http://blog.sina.com.cn/s/blog_4ab26bdd0100gwpk.html
resin安装 http://fangniuwa.blog.51cto.com/10209030/1763488/
1 tomcat 单机多实例
http://www.ttlsa.com/tomcat/config-multi-tomcat-instance/
2 tomcat的jvm设置和连接数设置
http://www.cnblogs.com/bluestorm/archive/2013/04/23/3037392.html
3 jmx监控tomcat
http://blog.csdn.net/l1028386804/article/details/51547408
4 jvm性能调优监控工具jps/jstack/jmap/jhat/jstat
http://blog.csdn.net/wisgood/article/details/25343845
http://guafei.iteye.com/blog/1815222
5 gvm gc 相关
http://www.cnblogs.com/Mandylover/p/5208055.html
http://blog.csdn.net/yohoph/article/details/42041729
tomcat内存溢出
https://blog.csdn.net/ye1992/article/details/9344807
16.4 配置Tomcat监听80端口:
tomcat监听的是8080。
那么如果想直接访问,不想在浏览器里还要输入8080。也就是直接在浏览器里直接输一个IP或者域名访问的是80端口(80端口是可以省略掉的。其他的就要带上,很不方便)。
所以tomcat也是可以自定义端口的,也就是说把8080改成80的。
以下:
~1.vim /usr/local/tomcat/conf/server.xml tomcat的配置文件
搜索8080
Connector port="8080" protocol="HTTP/1.1"修改为Connector port="80" protocol="HTTP/1.1"
~2./usr/local/tomcat/bin/shutdown.sh
~3./usr/local/tomcat/bin/startup.sh
~4.如果启动了nginx,需要将nginx停掉(etc/init.d/nginx stop)。然后再重启tomcat
实例:
[root@axinlinux-01 src]# vim /usr/local/tomcat/conf/server.xml vimtomcat的配置文件
<Connector port="80" protocol="HTTP/1.1" 将8080改为80
connectionTimeout="20000"
redirectPort="8443" />
[root@axinlinux-01 src]# /usr/local/tomcat/bin/shutdown.sh
更改完肯定要重启服务。不支持restart。先shutdown,再start
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk1.8
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@axinlinux-01 src]# /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/jdk1.8
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@axinlinux-01 src]# ps aux |grep java 查看进程是有的
root 3125 6.6 6.2 2980484 116476 pts/0 Sl 14:50 0:08 /usr/local/jdk1.8/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
root 3177 0.0 0.0 112720 980 pts/0 S+ 14:52 0:00 grep --color=auto java
[root@axinlinux-01 src]# netstat -lntp |grep java 但是80端口还没有出现
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 3125/java
tcp6 0 0 :::8009 :::* LISTEN 3125/java
[root@axinlinux-01 src]# netstat -lntp |grep 80 搜一下80。会发现80是nginx
当nginx监听了80端口,tomcat就不能再监听80端口。这叫做端口占用
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1078/nginx: master
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 3125/java
tcp6 0 0 :::8009 :::* LISTEN 3125/java
[root@axinlinux-01 src]# /etc/init.d/nginx stop 所以先停掉nginx
[root@axinlinux-01 src]# /usr/local/tomcat/bin/shutdown.sh 再来重启tomcat
[root@axinlinux-01 src]# /usr/local/tomcat/bin/startup.sh
[root@axinlinux-01 src]# netstat -lntp |grep java 会发现tomcat已经监听了80
tcp6 0 0 :::80 :::* LISTEN 3280/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 3280/java
tcp6 0 0 :::8009 :::* LISTEN 3280/java
再来用浏览器直接访问192.168.208.128
(需要注意的是,8005启动会比较慢,在8005还没有启动的时候,访问的话会比较慢)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
16.5/16.6/16.7 配置Tomcat虚拟主机:
之前的Apache或者是nginx,他们都属于webserver,都支持虚拟主机配置文件。
虚拟主机配置文件就是说一台服务器上或者说一个webserver可以支持一个IP下面可以访问多个域名,每一个域名代表着一个网站,所以我们可以配置多个网站。那么每一个网站的配置文件都是一个虚拟主机。
tomcat同样也存在这样的概念
~1.
vim /usr/local/tomcat/conf/server.xml 看一下tomcat的配置文件
其中<Host>和</Host>之间的配置为虚拟主机配置部分,name定义域名,
appBase定义应用的目录,Java的应用通常是一个war的压缩包,你只需要将war的压缩包放到appBase目录下面即可。刚刚阿铭访问的Tomcat默认页其实就是在appBase目录下面,不过是在它子目录ROOT里。
docBase,这个参数用来定义网站的文件存放路径,如果不定义,默认是在appBase/ROOT下面,定义了docBase就以该目录为主了,其中appBase和docBase可以一样。在这一步操作过程中很多同学遇到过访问404的问题,其实就是docBase没有定义对。
appBase为应用存放目录,通常是需要把war包直接放到该目录下面,它会自动解压成一个程序目录
实例~1.中有更详细的解释
~2.
增加虚拟主机,编辑server.xml,在</Host>下面增加如下内容
<Host name="www.123.cn" appBase=""
unpackWARs= "true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="/data/wwwroot/123.cn/" debug="0" reloadable="true" crossContext="true"/>
</Host>
~3.
下面我们通过部署一个java的应用来体会appBase和docBase目录的作用
我们下载的项目是java应用是zrlog。
我们搭建php的博客可以用wordpress,博客就是记录文章的,那么这是php的博客。
那么关于java的博客,就是zrlog(当然只是其中的一个)。
1.下载zrlog wget http://dl.zrlog.com/release/zrlog-1.7.1-baaecb9-release.war
2.mv zrlog-1.7.1-baaecb9-release.war /usr/local/tomcat/webapps/
3.mv /usr/local/tomcat/webapps/zrlog-1.7.1-baaecb9-release /usr/local/tomcat/webapps/zrlog
4.create database zrlog; 创建zrlog这个用户
grant all on zrlog.* to 'zrlog'@127.0.0.1 identified by 'wangxin789';
创建zrlog库(库可以不加单引号),指定他的IP和密码
4.浏览器访问 ip:8080/zrlog
5.mv /usr/local/tomcat/webapps/zrlog/* /data/wwwroot/123.cn/
建立doc目录,使博客直接输入IP即可访问
实例:
~1.
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
tomcat的配置文件格式和Apache nginx不太一样,是xml这种形式。那么这部分Host就表示一个虚拟主机。以下,解释这四项:
域名就叫Host name=“localhost”
appBase="webapps"的意思是,只他的应用项目在哪里。比如搭建了一个tomcat,要想用tomcat去跑一个网站,那要把网站放在那里呢?:
首先他的应用不能是传统意义上的目录(比如nginx访问网站的时候,要给他指定一个目录,这个目录里存放着php的文件或者是HTML的文件,然后再去访问)。那tomcat就不太一样,需要提供一个WAR的包(就是一个文件一个压缩包,这个压缩包里面放着运行网站的文件包括配置、gsp的代码,还有一些和数据库相关的,像图片等等),需要打包WAR这样的文件。那么这个文件就要放在"webapps"里面
unpackWARs="true"的意思是,是否自动的解压WAR这个包,"true"就是自动的解压。也就是说,把WAR包放在webapps里面,就自动的解压了。
autoDeploy="true"如果此项设为true,表示Tomcat服务处于运行状态时,能够监测appBase下的文件,如果有新有web应用加入进来,会自运发布这个WEB应用
docbase=“”当然如果不想定义WAR包,还可以单独指定一个目录,这个目录里存放了一些gsp的文件。也就是说给他提供的不是一个WAR包,而是一个目录,这个目录里有gsp的程序。那么如果这样的话,就需要加上docbase来定义。相当于不用WAR包,而是解压完了之后的
appbase与docbase二选一。如果同时存在其中一个为空
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Valve 这一部分是配置日志的
</Host>
~2.
[root@axinlinux-01 src]# vim /usr/local/tomcat/conf/server.xml
</Host> 在第一个Host对应的后面的那个Host。也就是这一行下面加入一个我们自定义的Host
<Host name="www.123.cn" appBase=""
unpackWARs= "true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="/data/wwwroot/123.cn/" debug="0" reloadable="true" crossContext="true"/>
</Host>
我们定义的是docbase,那么appbase相应的为空
~3.
[root@axinlinux-01 src]# wget http://dl.zrlog.com/release/zrlog-1.7.1-baaecb9-release.war
[root@axinlinux-01 src]# du -sh zrlog-1.7.1-baaecb9-release.war
6.8M zrlog-1.7.1-baaecb9-release.war
[root@axinlinux-01 src]# ls /usr/local/tomcat/webapps/ appbase默认的路径实在这个路径下
docs examples host-manager manager ROOT 默认是这5个目录
[root@axinlinux-01 src]# cp zrlog-1.7.1-baaecb9-release.war /usr/local/tomcat/webapps/
可以先做一个实验,我们把下载的这个WAR包,cp到appbase的默认路径下
[root@axinlinux-01 src]# ls /usr/local/tomcat/webapps/ 再来看,发现这个WAR包自动的解压了。就是我们刚才说的unpackWARs="true"定义的,自动的解压了
docs examples host-manager manager ROOT zrlog-1.7.1-baaecb9-release zrlog-1.7.1-baaecb9-release.war
此时要注意,如果删掉这个WAR包,他自动解压的这个目录也会一并删掉
[root@axinlinux-01 src]# cd /usr/local/tomcat/webapps/
[root@axinlinux-01 webapps]# mv zrlog-1.7.1-baaecb9-release zrlog
然后,我们来安装他。用浏览器来安装,输入http://192.168.208.128/zrlog/,会跳出安装向导:
[root@axinlinux-01 webapps]# ps aux |grep mysql 首先检查mysql是否启动
[root@axinlinux-01 webapps]# mysql -uroot -pwangxin789 进入mysql
MySQL [(none)]> create database zrlog; 创建zrlog这个用户
Query OK, 1 row affected (0.00 sec)
MySQL [(none)]> grant all on zrlog.* to 'zrlog'@127.0.0.1 identified by 'wangxin789';
创建zrlog库(库可以不加单引号),指定他的IP和密码
Query OK, 0 rows affected (0.01 sec)
MySQL [(none)]> quit 退出
Bye
[root@axinlinux-01 webapps]# mysql -uzrlog -h127.0.0.7 -pwangxin789 再次登录,检查创建的对不对
MySQL [(none)]> show databases; 看一下是不是有zrlog
+--------------------+
| Database |
+--------------------+
| information_schema |
| test |
| zrlog |
+--------------------+
再回到浏览器上,输入我们刚才mysql设置的用户密码:
完成,点击查看
可以先写个帖子
写完,点击保存
再用浏览器查看一下http://192.168.208.128/zrlog/
就有了我们刚写的帖子
但是,我们访问192.168.208.128/zrlog才能访问到博客。比较麻烦,我们可以设置一下,直接访问域名就可以到博客:
我们设置了docBase="/data/wwwroot/123.cn/。先建一个123.cn的目录
[root@axinlinux-01 ~]# mkdir /data/wwwroot/123.cn
[root@axinlinux-01 ~]# mv /usr/local/tomcat/webapps/zrlog/* /data/wwwroot/123.cn/
再在windows上设置www.123.cn的housts,让www.123.cn访问本机IP
[root@axinlinux-01 ~]# /usr/local/tomcat/bin/shutdown.sh 重启一下
[root@axinlinux-01 ~]# /usr/local/tomcat/bin/startup.sh
[root@axinlinux-01 ~]# ps aux |grep java 查看是否起来
[root@axinlinux-01 ~]# netstat -lntp |grep java 查看端口。等到8005起来才可以
tcp6 0 0 :::80 :::* LISTEN 6185/java
tcp6 0 0 127.0.0.1:41206 :::* LISTEN 6205/java
tcp6 0 0 127.0.0.1:21206 :::* LISTEN 6205/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 6185/java
tcp6 0 0 127.0.0.1:51206 :::* LISTEN 6205/java
tcp6 0 0 :::8009 :::* LISTEN 6185/java
再回到浏览器上,直接www.123.cn。就可以了,如下图:
总结一下:
一开始我们是把zrlog放在appbase目录下,并且是让他自动解压的。而后我们又把解压完的目录放到了docbase目录下,可以直接访问。
再来看比对一下配置文件:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
appBase="webapps"这个实际上是一个路径,是一个相对路径,就是我们/usr/local/tomcat/webapps的这个webapps,也就是说直接写一个webapps,就直接省略掉了前面的/usr/local/tomcat/(比如我们写一个conf,就表示的/usr/local/tomcat/conf)
当我们使用WAR包的时候,才需要把WAR包放到appbase里面,并让他自动解压
如果访问的网站他就是一个目录,就要把涉及到这个文件的所有文件都放到docbase里面
简单讲,appbase是放WAR包的,docbase是放网站程序的
知识点:
当我们访问的时候如果遇到404的问题:
除了考虑appbase和docbase。还要考虑apabase路径涉及到一个默认的目录,就是root。就是webapps下有一个root,这个root是默认的,也就说我们访问一个图片等静态文件就是在root下的。如果我们自定义一个appbase,那他的路径下也应该要有一个root目录,把图片等静态文件放到root目录下才能正常访问
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
16.8 Tomcat日志:
~1.
ls /usr/local/tomcat/logs
其中catalina开头的日志为Tomcat的综合日志,它记录Tomcat服务相关信息,也会记录错误日志。 经常关注
其中catalina.2017-xx-xx.log和catalina.out内容相同,前者会每天生成一个新的日志。
host-manager和manager为管理相关的日志,其中host-manager为虚拟主机的管理日志。 用的很少
localhost和localhost_access为虚拟主机相关日志,其中带access字样的日志为访问日志,不带access字样的为默认虚拟主机的错误日志。
~2.
访问日志默认不会生成,需要在server.xml中配置一下。
具体方法是在对应虚拟主机的<Host></Host>里面加入下面的配置(假如域名为123.cn):
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="123.cn_access" suffix=".log"
pattern="%h %l %u %t "%r" %s %b" />
prefix定义访问日志的前缀,suffix定义日志的后缀,pattern定义日志格式。新增加的虚拟主机默认并不会生成类似默认虚拟主机的那个localhost.日期.log日志,错误日志会统一记录到catalina.out中。关于Tomcat日志,你最需要关注catalina.out,当出现问题时,我们应该第一想到去查看它。
来源:oschina
链接:https://my.oschina.net/u/3866149/blog/1937050