1. 总结 tomcat实现多虚拟机
在Tomcat服务器配置server.xml文件中添加Host配置块
name:定义虚拟机服务器名称,也就是网站域名
appBase:定义存放网站内容的文件目录
prefix:定义虚拟机的访问日志名称,每个虚拟机建议都单独存放一份访问日志
pattren:定义访问日志的格式
2. 总结 tomcat定制访问日志格式和反向代理tomcat
Tomcat日志格式的定义在server.xml配置文件中,Host配置块,pattern项中, 由于考虑到Tomcat工作负载很重,访问日志可以定义在反向代理的Nginx服务器上,以缓解Tomcat的工作压力。
实现Tomcat的反向代理,可以使用Nginx实现。在Nginx代理服务器上主配置文件中定义字配置文件目录,创建子配置文件Tomcat.conf
upstream定义被代理的服务器tomcat:10.0.0.201和10.0.0.202,在server中定义代理的域名和端口,proxy_pass引用被代理的集群
3. 完成 tomcat实现MSM集群
部署规划:10.0.0.201 Tomcat1服务器
10.0.0.202 Tomcat2服务器
10.0.0.100 memcached1数据库
10.0.0.101 memcached2数据库
10.0.0.200 做Nginx代理服务器
1.安装Tomcat1服务和Tomcat2服务,启用Nginx代理
2.在Tomcat服务器上安装mem的java库文件
3.准备memcached数据库
采用包安装
Rocky安装:yum install -y memcached
Ubuntu安装:apt update && apt install -y memcached
4.修改每台Tomcat服务器的/usr/local/tomcat/conf/context.xml配置文件
打开浏览器刷新访问,实现session的会话保持
4. 总结 JVM垃圾回收算法和分代
垃圾回收算法:
标记清楚算法:标记阶段,将所有标记存活的对象逐个标记,清理阶段,遍历整个堆,将未标记的对象逐一清除。优点是算法简单效率高,缺点是会造成内存碎片,内存空间不连续。
标记压缩算法:标记阶段,将所有访问的对象逐个标记。内存清理阶段时,整理时将标记存活对象向内存一端移动,整理后存活对象连续的集中在内存一端。优点是没有内存碎片,内存空间连续,缺点是垃圾回收效率低。
复制算法:将可用内存分为大小相同两块区域A和B,每次只用其中一块,A用完后,则将A中存活的对象复制到B。复制到B的时候连续的使用内存,最后将A一次性清除干净。优点是垃圾回收效率高,也没有内存碎片,缺点是浪费内存,资源消耗大
堆内存空间分为三个不同的类别:
年轻代,老年代,持久代
年轻代又分为伊甸园区(刚刚创建的对象)和幸存区(幸存区分为from和to,地位相同,可以互相转换)。年轻代的对象存活时长低,适合使用复制算法。
老年区(长时间存活的对象)。老年代区域大,对象存活时间长,适合标记压缩算法。
5. 总结memcache使用,安装和MSM原理
memcached可以包安装:Rocky(yum install -y memcached)Ubuntu(apt install -y memcached)
编译安装:在memcached官网下载源码包,并安装编译依赖包(gcc make libevent-dev),解压,执行./configure,make && make install
安装完成后,修改配置文件,允许远程连接memcached数据库,启动服务,端口号11211
memcached在运行时必须使用普通用户,远程连接可以使用nc命令指定mem地址和端口号
memcached的工作机制采用了Slab Allocator机制来分配、管理内存。获取一块1M的内存空间后,Slab分配内存按照固定的字节大小等分成为chunk,memcached会根据数据的大小决定选择存到哪个chunk中。
Slab按照Chunk的大小分组,就组成不同的Slab Class, 第一个Chunk大小为 96B的Slab为Class1,第二个Chunk大小为 120B为Class 2,如果有100bytes要存,那么Memcached会选择下图中SlabClass 2 存储。Slab之间的差异可以使用Growth Factor(因子)控制,默认1.25