1、tomcat session cluster的实现。
Tomcat集群Session同步方案
(1)使用Tomcat自带的Cluster方式
(2)利用Nginx的基于访问IP地址的Hash路由策略
(3)利用Nginx插件实现Tomcat集群和Session同步
(4)利用Memcached实现(MSM工具)
(5)利用Redis实现
基础环境
ip 主机名 应用 端口
192.168.10.100 Nginx-node nginx1.20.1 80
192.168.10.101 Tomcat-node1 java8.131、tomcat8.5.71 8080
192.168.10.102 Tomcat-node2 java8.131、tomcat8.5.71 8080
tomcat的安装使用一键安装。
现在开始进行tomcat自带cluster方式的session共享配置:
1、[root@tomcat]# vi /usr/local/tomcat/conf/server.xml
“< Engine name=“Catalina” defaultHost=“localhost”>”
找到上面这一行,在此行的下面直接复制以下内容,不用修改,直接复制就可以
<Manager className="org.apache.catalina.ha.session.BackupManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"
mapSendOptions="6"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="**192.168.10.100**"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="**192.168.10.102**"
port="5000"
selectorTimeout="100"
maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
记得多个tomcat都需要配置,同一个集群里面配置信息保持一直就可以了。如果是其他集群,修改一下address就好了。
另一个tomcat节点直接拷贝这个server.xml文件,然后将address修改为192.168.10.102就可以了
2、然后还有一个重要配置不要忘记了!否则session将不能实现共享!!
在tomcat项目的WEB-INF/web.xml文件中添加 < distributable/>.
参考文档:
https://www.cnblogs.com/kevingrace/p/9541551.html
https://www.sohu.com/a/309573317_120104204
https://www.cnblogs.com/kevingrace/p/9539005.html
2、JVM性能调优总结
JVM调优目标
何时需要做jvm调优?
什么情况下需要对jvm做调优?
1.heap 内存(老年代)持续上涨达到设置的最大内存值;
2. Full GC 次数频繁;
3. GC 停顿时间过长(超过1秒);
4. 应用出现OutOfMemory 等内存异常;
5. 应用中有使用本地缓存且占用大量内存空间;
6. 系统吞吐量与响应性能不高或下降。
JVM调优原则
JVM调优原则:
1.多数的Java应用不需要在服务器上进行JVM优化;
2.多数导致GC问题的Java应用,都不是因为我们参数设置错误,而是代码问题;
3.在应用上线之前,先考虑将机器的JVM参数设置到最优(最适合);
4.减少创建对象的数量;
5.减少使用全局变量和大对象;
6.JVM优化是到最后不得已才采用的手段;
7.在实际使用中,分析GC情况优化代码比优化JVM参数更好;
JVM调优目标
JVM调优目标 :
1.GC低停顿;
2. GC低频率;
3. 低内存占用;
4. 高吞吐量;
JVM调优量化目标(示例):
1.Heap 内存使用率 <= 70%;
2. Old generation内存使用率<= 70%;
3. avgpause <= 1秒;
4. Full gc 次数0 或 avg pause interval >= 24小时 ;
注意:不同应用,其JVM调优量化目标是不一样的。
调优经验总结
JVM调优步骤
JVM调优的一般步骤为:
第1步:分析GC日志及dump文件,判断是否需要优化,确定瓶颈问题点;
第2步:确定JVM调优量化目标;
第3步:确定JVM调优参数(根据历史JVM参数来调整);
第4步:调优一台服务器,对比观察调优前后的差异;
第5步:不断的分析和调整,直到找到合适的JVM参数配置;
第6步:找到最合适的参数,将这些参数应用到所有服务器,并进行后续跟踪。
参考文档:
https://blog.csdn.net/mocas_wang/article/details/109604710
3、实现zabbix主动模式监控tomcat及所在主机
安装zabbix
安装JDK(参见往期文档)
安装TOMCAT(参见往期文档)
安装JAVA GATEWAY
yum -y install http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-java-gateway-4.0.9-3.el7.x86_64.rpm
修改zabbix agent为主动模式。
https://blog.z0ukun.com/?p=1470 (https://blog.z0ukun.com/ 推荐)
https://www.cnblogs.com/zhangcheng94/p/12122977.html
https://www.cnblogs.com/struggle-1216/p/12354813.html
https://www.cnblogs.com/yinzhengjie2020/p/12318937.html