Web应用服务器Tomcat

总结 tomcat实现多虚拟机

[root@centos8 tomcat]#pwd
/usr/local/tomcat
[root@centos8 tomcat]#vim conf/server.xml
[root@centos8 tomcat]#tail conf/server.xml
pattern="%h %l %u %t "%r" %s %b" />
</Host>
#添加以下行
<Host name="node1.example.org" appBase="/data/webapps1/" unpackWARs="true"
autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="node1_access_log" suffix=".txt"
pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>
<Host name="node2.example.org" appBase="/data/webapps2/" unpackWARs="true"
autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="node2_access_log" suffix=".txt"
pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>
</Engine>
</Service>
</Server>
#对每个虚拟主机,准备数据
[root@centos8 ~]#mkdir /data/webapps{1,2}/ROOT -pv
mkdir: created directory '/data/webapps1/ROOT'
mkdir: created directory '/data/webapps2/ROOT'

[root@centos8 ~]#cat /data/webapps1/ROOT/index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jsp例子</title>
</head>
<body>
后面的内容是服务器端动态生成字符串,最后拼接在一起
<br>
<%=request.getRequestURL()%>
</body>
</html>
[root@centos8 ~]#cat /data/webapps2/ROOT/index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jsp例子</title>
</head>
<body>
后面的内容是服务器端动态生成字符串,最后拼接在一起
<br>
<%=request.getRequestURL()%>
</body>
</html>
[root@centos8 ~]#
#设置权限
[root@centos8 ~]#chown -R tomcat.tomcat /data/webapps{1,2}/
#准备虚拟主机的名称解析
[root@centos8 ~]#cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
centos8.localdomain
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.152 node1.example.org node2.example.org
#对部署完成的网页进行测试
[root@centos8 ~]#curl http://node1.example.org:8080/
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jsp例子</title>
</head>
<body>
后面的内容是服务器端动态生成字符串,最后拼接在一起
http://node1.example.org:8080/
</body>
</html>
[root@centos8 ~]#curl http://node2.example.org:8080/
   
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jsp例子</title>
</head>
<body>
后面的内容是服务器端动态生成字符串,最后拼接在一起
http://node2.example.org:8080/
</body>
</html>

总结 tomcat定制访问日志格式和反向代理tomcat

Tomcat定制访问日志格式

Tomcat的访问日志是服务器管理和性能优化的重要工具,它记录了客户端对服务器的访问请求和响应信息。Tomcat允许用户根据需求定制访问日志的格式,以便更好地理解和分析日志数据。

定制步骤
  1. 编辑server.xml文件
    Tomcat的主配置文件是conf/server.xml。要定制访问日志格式,需要编辑该文件中的<Host>元素内的<Valve>子元素。<Valve>元素用于定义日志记录的行为,其中className属性指定了日志阀门的类名(通常为org.apache.catalina.valves.AccessLogValve),而pattern属性则用于定义日志的格式。

  2. 配置pattern属性
    pattern属性支持多种预定义的格式串,如%h(客户端IP地址)、%l(远程登录名)、%u(认证用户名)、%t(请求时间)、"%r"(请求行)、%s(状态码)、%b(响应大小)等。用户可以根据需要选择这些格式串,并通过自定义组合来定义日志格式。

  3. 示例

    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"  
           prefix="localhost_access_log" suffix=".txt"  
           pattern="%h %l %u %t "%r" %s %b" />
    

    这个示例中的日志格式将包含客户端IP地址、远程登录名、认证用户名、请求时间、请求行、状态码和响应大小。

反向代理的实现方式
  1. 使用Nginx作为反向代理
    Nginx是一款高性能的HTTP和反向代理服务器,也是邮件代理服务器和通用的TCP/UDP代理服务器。通过配置Nginx,可以轻松实现Tomcat的反向代理。

  2. 配置Nginx
    在Nginx的配置文件中(通常是nginx.conf或位于conf.d/目录下的某个文件),需要定义一个server块来监听客户端的请求,并在location块中使用proxy_pass指令将请求转发到Tomcat服务器。

    server {  
        listen 80;  
        server_name www.example.com;  
     
        location / {  
            proxy_pass http://10.0.0.152:8080;  
            proxy_set_header Host $host;  
            proxy_set_header X-Real-IP $remote_addr;  
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
            proxy_set_header X-Forwarded-Proto $scheme;  
        }  
    }
    

    在这个示例中,Nginx监听80端口,并将所有请求转发到本地Tomcat服务器的8080端口。同时,还设置了一些HTTP头信息,以便Tomcat能够获取到原始请求的一些重要信息。

总结 JVM垃圾回收算法和分代

JVM垃圾回收(Garbage Collection,简称GC)是Java虚拟机的一个重要特性,用于自动回收不再使用的对象所占用的内存。Java的垃圾回收器通过各种算法和策略来有效地回收内存,以保持JVM的性能和稳定性。

JVM垃圾回收算法
  1. 标记-清除(Mark-Sweep)
    • 标记阶段:遍历所有的对象,标记出还在使用的对象。
    • 清除阶段:遍历标记阶段未被标记的对象,回收它们的内存。
    • 优点:简单、高效。
    • 缺点:需要进行两阶段扫描,容易产生内存碎片。
  2. 标记-整理(Mark-Compact)
    • 标记阶段:与标记-清除相同,标记出还在使用的对象。
    • 整理阶段:将所有还在使用的对象移动到内存的一端,然后清理掉边界以外的内存。
    • 优点:解决了内存碎片问题。
    • 缺点:移动对象比较耗时。
  3. 复制(Copying)
    • 将可用内存划分为两块,每次只使用其中一块。
    • 当这一块内存用完时,将还存活的对象复制到另一块内存上,然后清理掉已使用的内存。
    • 优点:没有内存碎片,停顿时间短。
    • 缺点:内存利用率低,只有50%。
  4. 分代收集(Generational Collection)
    • 将对象分为新生代和老年代,对不同年代的对象使用不同的回收策略。
    • 新生代:对象生命周期短,采用复制算法,如Scavenge。
    • 老年代:对象生命周期长,采用标记-整理或标记-清除算法,如CMS(Concurrent Mark Sweep)。
分代
  1. 新生代(Young Generation)
    • 对象存活时间短,新生代通常分为Eden区、From Survivor区和To Survivor区。
    • 垃圾回收器会首先在Eden区进行回收,然后根据对象的存活情况,将部分存活的对象移动到From Survivor区或To Survivor区。
    • 经过多次回收后,如果对象仍然存活,就会被移动到老年代。
  2. 老年代(Old Generation)
    • 对象存活时间长,当对象在新生代中经过多次回收后仍然存活,就会被移动到老年代。
    • 老年代通常采用标记-整理或标记-清除算法进行回收。

总结memcache使用,安装和MSM原理

Memcache使用

Memcache是一个自由、源码开放、高性能、分布式的内存对象缓存系统,主要用于动态Web应用以减轻数据库的负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高网站访问的速度。Memcache的设计理念是小而强大,支持Java、C/C++/C#、Perl、Python、PHP、Ruby等大部分流行的程序语言。

基本使用流程
  1. 客户端请求数据:当客户端请求数据时,首先检查Memcached中是否有对应的数据。
  2. 缓存命中:如果Memcached中有对应的数据,则直接返回数据给客户端,结束请求。
  3. 缓存未命中:如果Memcached中没有对应的数据,则去数据库中请求数据。
  4. 数据写入缓存:将从数据库获取的数据写入Memcached中,供下次请求时使用。
  5. 返回数据:将数据返回给客户端,结束请求。
Memcache安装

Memcache的安装过程通常涉及以下几个步骤(以Linux环境为例):

  1. 下载Memcache源码:从Memcache的官方网站或可靠的源下载Memcache的源码包。
  2. 编译安装:解压源码包,使用./configuremakemake install命令进行编译安装。
  3. 启动Memcache服务:使用memcached -d -m 64 -u root -l 127.0.0.1 -p 11211 -c 256 -P /tmp/memcached.pid命令启动Memcache服务,其中-d表示以守护进程方式运行,-m指定分配给Memcache的内存大小(单位MB),-u指定运行Memcache的用户,-l指定监听的IP地址,-p指定监听的端口,-c指定最大同时连接数,-P指定pid文件的保存位置。
  4. 配置客户端:在应用程序中配置Memcache客户端,指定Memcache服务器的IP地址和端口等信息。
MSM(Memcached-Session-Manager)原理

MSM(Memcached-Session-Manager)是一个用于Tomcat与Memcached之间会话管理的工具,它支持Tomcat 6和Tomcat 7。MSM通过Tomcat的Valve对Request进行跟踪,实现Tomcat Session与Memcached之间的同步,以达到Session共享的目的。

MSM的工作流程
  1. Request请求到来时:
    • MSM会从Memcached中加载Session(如果Tomcat的jvmroute发生变化,或者Tomcat中没有该Session)。
    • 如果Memcached中没有找到Session,则直接使用Tomcat中的Session。
  2. Request请求处理过程中:
    • 应用程序对Session进行操作(如读取、修改)。
    • 这些操作实际上是在Tomcat的Session中进行的。
  3. Request请求结束时:
    • MSM将Tomcat中的Session更新到Memcached中,以实现主备同步。
    • 如果配置了多个Memcached节点,MSM还会根据配置进行主备节点的选择和数据同步。
MSM的Session同步策略
  • 主备同步:Tomcat中的Session被视为主Session,Memcached中的Session被视为备Session。在每次Request请求结束时,MSM都会将Tomcat中的Session更新到Memcached中,以保持两者的同步。
  • 容错处理:如果主Memcached节点出现故障,MSM可以自动切换到备Memcached节点,并从备节点中加载Session,以保证应用程序的正常运行。

通过MSM,Tomcat可以轻松地实现Session的分布式共享和容错处理,提高Web应用的可靠性和扩展性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值