tomcat笔记
同一个端口,可以通过域名来区分部署不同的应用
一个tomcat可以配置多个端口
tomcat正常关闭(非控制台突停),seeion会保存到work目录相应项目下
集群session方案:
1 请求分配到固定的机器
2 服务器session复制
3 cookie保存数据(加密)
4 session集中存储(redis)
sessionid主动取session问题?
通过sessionId获得session,是服务器底层实现,并没有给予客户接口.
服务器根据cookie或者url里的sessionID来获得相应的session.
虚拟机参数设置:
内存分为:栈,堆,方法区(永久区)
方法区也是jvm内存区中非常重要的一块内存区域,它是被jvm所有线程所共享的,方法区主要保存的信息是类的元数据。
java堆是java运行时内存最重要的部分,几乎所有的对象和数组都是在堆内存中分配空间。java堆分为新生代和老年代。新生代主要存储刚刚产生的对象,如果对象的生命足够长,就把老年对象移入老年代。
新生大分为三级:eden(刚出生)、survivor space0(幸存者0)、survivor space1(幸存者1)。
JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。
默认空余堆内存小于 40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。
因此服务器一般设置-Xms、 -Xmx相等以避免在每次GC 后调整堆的大小。
Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同堆内存分配 (访问量比较大时设为一致)
-Xms:设置java应用程序启动时的初始堆大小
-Xmx:设置java应用程序能获得的最大堆大小
-Xss:设置线程栈的大小
-XX:MinHeapFreeRatio:设置堆空间的最小空间比例。当堆空间的空闲内存小于这个数值时,jvm便会扩展堆空间。
-XX:MaxHeapFreeRatio:设置堆空间的最大空间比例。当堆空间的空闲内存大于这个数值时,jvm便会缩小堆空间。
XX:NewSize : 设置新生代的大小
XX:NewRatio:设置老年代与新生代的比例,即老年代除以新生代大小
XX:SurviorRatio:新生代中eden区与survivior 区的比例
-XX:PermSize:设置永久区的大小
-XX:TargetSurvivorRatio:设置survivior 的使用率。当达到这个空间使用率时,会将对象送入老年代。
JAVA_OPTS=-server -XX:PermSize=256M -XX:MaxPermSize=1024m -Xms1024M -Xmx1024M -XX:MaxNewSize=256m
windows
修改TOMCAT_HOME/bin/catalina.bat,在最前面加入
set JAVA_OPTS=-server -XX:PermSize=512M -XX:MaxPermSize=512m -Xms2024M -Xmx2024M -XX:MaxNewSize=256m (以8G内存为例)
set JAVA_OPTS="-server -XX:PermSize=512M -XX:MaxPermSize=512m -Xms1024M -Xmx1024M -XX:MaxNewSize=256m" (linux)
tomcat增加线程数:
主要修改了maxThreads、acceptCount。Google资料说“如果要加大并发连接数,应同时加大这两个参数。
共享jar:
修改catalina.properties中的common.loader属性。在common.loader属性原值基础上追加
“${catalina.home}/lib/shared/*.jar”,然后启动tomcat。很显然,
需要将共享的jar包放到一个
shared目录里,然后将shared目录放到tomcat下lib目录里。
建立好共享文件夹之后,把相同的包都放在共享文件夹,每个项目WEB-INF下的lib放各自独有的。
验证设置的jvm参数设置是否生效
命令JAVA_HOME/bin:
jps 显示进程
7828 Bootstrap
jmap 观察运行中的JVM 物理内存的占用情况
jmap -heap 7828
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" maxHttpHeaderSize="8192" maxThreads="1000" minSpareThreads="100" maxSpareThreads="1000" minProcessors="100" maxProcessors="1000" enableLookups="false" compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" connectionTimeout="60000" URIEncoding="utf-8" acceptCount="1000" redirectPort="8443" disableUploadTimeout="true" />
参数说明:
maxHttpHeaderSize:请求和响应的HTTP头的最大大小,以字节为单位指定。如果没有指定,这个属性被设置为8192(8 KB)。
maxThreads 客户请求最大线程数
minSpareThreads Tomcat初始化时创建的 socket 线程数
maxSpareThreads Tomcat连接器的最大空闲 socket 线程数
redirectPort 在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口
enableLookups 若设为true, 则支持域名解析,可把 ip 地址解析为主机名
当web应用程序向要记录客户端的信息时,它也会记录客户端的IP地址或者通过域名服务器查找机器名转换为IP地址。DNS查询需要占用网络,并且包括可能从很多很远的服务器或者不起作用的服务器上去获取对应的IP的过程,这样会消耗一定的时间。为了消除DNS查询对性能的影响我们可以关闭 DNS查询,方式是修改server.xml文件中的enableLookups参数值: 将其设置为false
acceptAccount 监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads )
connectionTimeout 定义建立客户连接超时的时间. 如果为 -1, 表示不限制建立客户连接的时间
minProcessors 服务器创建时的最小处理线程数
maxProcessors 服务器同时最大处理线程数
URIEncoding URL统一编码
compression 打开压缩功能
compressionMinSize 启用压缩的输出内容大小,这里面默认为2KB
compressableMimeType 压缩类型
windows服务执行的是bin\tomcat.exe.他读取注册表中的值,而不是catalina.bat的设置.。
解决办法:
修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat Service Manager\Tomcat7\Parameters\JavaOptions
原值为
-Dcatalina.home="C:\ApacheGroup\Tomcat 7.0.42"
-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat 7.0.42\common\endorsed"
-Xrs
加入 -Xms1024m -Xmx2048m
#负载均衡
应用服务分流
数据库分流
#http设置
keytool -genkey -alias ssodemo -keyalg RSA -keysize 1024 -keypass chenjinhui -validity 365 -keystore c:\cjh.keystore -storepass chenjinhui
导出证书:
keytool -export -alias ssodemo -keystore c:\cjh.keystore -file c:\ssodemo.crt -storepass chenjinhui
客户端导入证书
keytool -import -keystore %JAVA_HOME%\jre\lib\security\cacerts -file c:\ssodemo.crt -alias ssodemo
密码必须要输入changeit
定时清理toncat日志:
新建编辑clean.sh文件内容
#!/bin/sh
logs_path=$1
find $logs_path -mtime +7 -name "localhost.*.log" -exec rm -rf {} \;
find $logs_path -mtime +7 -name "localhost_access_log.*.txt" -exec rm -rf {} \;
find $logs_path -mtime +7 -name "catalina.*.log" -exec rm -rf {} \;
find $logs_path -mtime +7 -name "manager.*.log" -exec rm -rf {} \;
find $logs_path -mtime +7 -name "host-manager.*.log" -exec rm -rf {} \;
find $logs_path -mtime +7 -name "fileservice.log.*" -exec rm -rf {} \;
>$logs_path/catalina.out;
echo "finish at "`date`
#编辑定时任务
crontab -e
00 02 * * * /bin/sh /opt/tomcat7/logs/clean.sh /opt/tomcat7/logs > /opt/tomcat7/logs/crond.log 2>&1
#查看定时任务
crontab -l