运维常见问题汇总-tomcat篇
Posted DevOps和k8s全栈技术
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运维常见问题汇总-tomcat篇相关的知识,希望对你有一定的参考价值。
tomcat介绍
Tomcat 服务器是一个开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet、JSP 程序的首选。
#tomcat 运行环境介绍
1.tomcat本身无法直接在计算机上运行,需要依赖硬件基础上的操作系统和Java虚拟机;
2.Java 程序启动时JVM都会分配一个初始内存和最大内存给这个应用;
3.当应用程序用到最大内存的时刻,就会触发JVM做垃圾回收(GC)动作,释放被占用的内存;
4.因此想要调整Java程序启动时的初始内存和最大内存,需要向JVM申请;
5.如果初始内存大小设置过小,且此时初始化的应用对象过多,虚拟机就必须重复的加载内存来满足使用;
6.基于以上原因,最好把初始内存大小(Xms)和最大内存(Xmx)设置成一样;
7.JVM上所有的对象都在"""堆区(heap)"""上分配内存(也有在"栈"上分配内存的)
8.堆区的大小是可以动态扩展的,但"""堆"""的大小受限于系统使用的物理内存,当应用程序需要的内存超出"堆"的最大值时,JVM虚拟机就会抛出内存溢出异常,并且导致应用程序奔溃;
9.基于以上原因,建议“堆”的大小设置成物理内存的80%
tomcat优化-内存优化
tomcat内存优化主要是对 tomcat 启动参数优化,我们可以在 tomcat 的启动脚本 catalina.sh 中设置 java_OPTS 参数。
JAVA_OPTS参数说明
-server 启用jdk的server版;
-Xms java虚拟机初始化时的最小内存;
-Xmx java虚拟机可使用的最大内存;
-XX: PermSize 内存永久保留区域
-XX:MaxPermSize 内存最大永久保留区域
建议配置:
对于服务器内存2G来说 ,可以采取以下配置:
JAVA_OPTS=’-Xms1024m -Xmx2048m -XX: PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m’
配置完成后可重启Tomcat ,通过以下命令进行查看配置是否生效:
假如查看到Tomcat 进程号是 15242 。
查看是否配置生效:
sudo jmap – heap 15242
我们可以看到MaxHeapSize 等参数已经生效。
tomcat优化-并发优化
调整连接器connector的并发处理能力;在Tomcat 配置文件 server.xml 中的
<Connector port="9027"
protocol="HTTP/1.1"
maxHttpHeaderSize="8192"
minProcessors="100"
maxProcessors="1000"
acceptCount="1000"
redirectPort="8443"
disableUploadTimeout="true"/>
参数说明:
maxThreads 客户请求最大线程数
minSpareThreads Tomcat初始化时创建的 socket 线程数
maxSpareThreads Tomcat连接器的最大空闲 socket 线程数
enableLookups 若设为true, 则支持域名解析,可把 ip 地址解析为主机名
redirectPort 在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口
acceptAccount 监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads )
connectionTimeout 连接超时
minProcessors 服务器创建时的最小处理线程数
maxProcessors 服务器同时最大处理线程数
URIEncoding URL统一编码
tomcat优化-缓存压缩优化
打开tomcat的压缩功能;tomcat的压缩优化就是将返回的html页面等内容经过压缩,压缩成gzip格式之后,发送给浏览器,浏览器在本地解压缩的过程。
<Connector port="9027"
protocol="HTTP/1.1"
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="20000"
URIEncoding="utf-8"
acceptCount="1000"
redirectPort="8443"
disableUploadTimeout="true"/>
其中:
●compression="on" 打开压缩功能
●compressionMinSize="2048"启用压缩的输出内容大小,默认为2KB
●noCompressionUserAgents="gozilla,traviata" 对于以下的浏览器,不启用压缩
●compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 哪些资源类型需要压缩
缓存策略:
开启浏览器的缓存,这样读取存放在webapps文件夹里的静态内容会更快,大大推动整体性能。
1)浏览器第一次请求tomcat服务器某资源
2)tomcat查询到该资源,并将该资源最后修改的时间保存在响应头的Last-Modified中 (Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT)
3)浏览器第二次访问tomcat请求该资源,并将之前该资源的最后修改时间放入If-Modified-Since请求头中
4)服务器收到该请求,比较该请求中的If-Modified-Since与资源最后修改时间Last-Modified是否一致,如果一致则不向其发送该资源并向其发送响应代码304告诉其去本地取缓存。
tomcat优化-安全优化
#降权启动
以普通用户启动tomcat,降权启动,防止不法分子通过tomcat获得root权限。
#修改端口号
修改tomcat配置文件server.xml中的全球人都知道的http连接器端口号,防止黑客攻击。
#更改关闭Tomcat的指令
这个端口是有安全隐患的,直接Telnet远程连接主机,输入shutdown即可关闭tomcat。shown端口是写在Server参数里的,直接去掉是不管用,也是会默认启动的,一般在安全设置时候建议把端口修改为其他端口,shutdown修改为其他复杂字串。实际上这个端口是可以直接屏蔽不监听的。设置时候将其port值修改为-1即可:
<Server port="-1" shutdown="SHUTDOWN">
#修改管理员用户名,密码
修改tomcat-user.xml中默认的Manager用户名和密码
<tomcat-users>
<role rolename=”manager”/>
<user username=”temobi” password=”temobi8090” roles=”manager”/>
</tomcat-users>
#清空站点目录下ROOT下管理页面等文件
ROOT下有一些站点的管理程序可以查看tomcat的各种信息及配置,因此我们需要清空这些文件或者将站点目录更改。
生产环境一般不适用Tomcat默认的管理界面,这些页面存放在Tomcat 的webapps安装目录下,把该目录下的所有文件删除即可:rm -rf /usr/local/tomcat8/webapps/*
tomcat优化-数据库性能调优
tomcat性能在等待数据库查询被执行期间会降低。如今大多数应用程序都是使用可能包含“命名查询”的关系型数据库。如果是那样的话,Tomcat会在启动时默认加载命名查询,这个可能会提升性能。另一件重要事是确保所有数据库连接正确地关闭。给数据库连接池设置正确值也是十分重要的。我所说的值是指Resource要素的最大空闲数(maxIdle),最大连接数(maxActive),最大建立连接等待时间(maxWait)属性的值。因为配置依赖与应用要求,我也不能在本文指定正确的值。你可以通过调用数据库性能测试来找到正确的值。
tomcat优化-其他优化
#错误页面优雅显示
#隐藏版本号
#禁用DNS查询
为了消除DNS查询对性能的影响我们可以关闭DNS查询,方式是修改server.xml文件中的enableLookups参数值改为
false:enableLookups="false"
#设置session过期时间
Tomcat采用数据库连接池技术,当用户在一定时间不对数据库有操作时间后,就自动关闭这个连接,这是为了更好的利用资源,防止浪费宝贵的数据库连接资源。
以下是设置session时间的3个方法:
1. 在tomcat——>conf——>servler.xml文件中定义:
<Context path="/test" docBase="/test"
defaultSessionTimeOut="3600" isWARExpanded="true"
isWARValidated="false" isInvokerEnabled="true"
isWorkDirPersistent="false"/>
defaultSessionTimeOut="3600"
2. 项目所在目录下的 web.xml中定义:
<session-config>
<session-timeout>20</session-timeout>
</session-config>
3. 在程序中定义:
session.setMaxInactiveInterval(30*60);
设置单位为秒,设置为-1永不过期
技术交流
学无止境,了解更多关于kubernetes/docker/devops/openstack/openshift/linux/IaaS/PaaS相关内容,想要获取更多资料和免费视频,可按如下方式进入技术交流群
微信:luckylucky421302
按如下指纹可关注公众
本文参考链接如下:
https://www.cnblogs.com/dadonggg/p/8668386.html
以上是关于运维常见问题汇总-tomcat篇的主要内容,如果未能解决你的问题,请参考以下文章