当前位置: 移动技术网 > 科技>操作系统>Linux > linux下jvm优化、tomcat调优

linux下jvm优化、tomcat调优

2019年02月23日  | 移动技术网科技  | 我要评论

九三天气预报,日本人竟这样玩学生妹,电网关帝庙

 

系统环境:jdk1.8,apache-tomcat-8.5.35

一、jvm优化

进入 bin/catalina.sh,修改java_opts配置:

java_opts="-server -xms8192m -xmx8192m -xx:newratio=4 -xx:survivorratio=8 -xx:+useconcmarksweepgc -xx:parallelgcthreads=8 -xx:+heapdumponoutofmemoryerror -xx:heapdumppath=/usr/local/javamemorylogs/dump -xx:+printgcdetails -xx:+printgcdatestamps -xloggc:/usr/local/javamemorylogs/gclog -xx:+disableexplicitgc"

各参数含义:
(1)-server:表示这是应用于服务器的配置,jvm 内部会有特殊处理的 。
(2)-xms8192m:设置jvm最小内存。此值可以设置与-xmx相同,以避免每次垃圾回收完成后jvm重新分配内存。
(3)-xmx8192m:设置jvm最大可用内存。
(4):-xx:newratio=4:设置年轻代(包括 eden 和两个 survivor 区)与终身代的比值(除去永久代)。设置为 4,则年轻代与终身代所占比值为 1:4,年轻代占整个堆栈的 1/5 。
(4)-xx:survivorratio=8:年轻代中eden区与两个survivor区的比值。注意survivor区有两个。如:8,表示eden:survivor=8:2,一个survivor区占整个年轻代的1/10。
(5)-xx:+useconcmarksweepgc:cms收集,设置年老代为并发收集。它的主要适合场景是对响应时间的重要性需求大于对吞吐量的需求,能够承受垃圾回收线程和应用线程共享cpu资源,并且应用中存在比较多的长生命周期对象。cms收集的目标是尽量减少应用的暂停时间,减少full gc发生的几率,利用和应用程序线程并发的垃圾回收线程来标记清除年老代内存。
(6)-xx:parallelgcthreads=8:表示jvm在进行并行gc的时候,用于gc的线程数。
(7)-xx:+heapdumponoutofmemoryerror:可以让jvm在出现内存溢出时候dump出当前的内存转储快照。
(8)xx:heapdumppath:生成dump文件的路径,如不设置,默认存储在jvm 运行环境目录。
(9)-xx:+printgcdetails:打印gc详细信息。
(10)-xx:+printgcdatestamps:记录gc日志并不会特别地影响java程序性能,推荐你尽可能记录日志。
(11)-xloggc:指定gc log的位置,以文件输出。帮助开发人员分析问题。
(12)-xx:+disableexplicitgc:这个将会忽略手动调用 gc 的代码使得 system.gc() 的调用就会变成一个空调用,完全不会触发任何 gc。

二、tomcat优化

1.修改conf/server.xml如下两段配置:

<executor name="tomcatthreadpool" nameprefix="catalina-exec-"
maxthreads="700" minsparethreads="100" maxsparethreads="400" prestartminsparethreads = "true" maxqueuesize = "300"/>
 
<connector executor="tomcatthreadpool"
port="80"
protocol="org.apache.coyote.http11.http11nio2protocol"
acceptcount="500"
connectiontimeout="20000"
redirectport="8443"
compression="on"
disableuploadtimeout="true"
compressionminsize="2048"
acceptorthreadcount="2" compressablemimetype="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript"
uriencoding="utf-8"
enablelookups="false"
useurivalidationhack="false"
maxconnections="1000"
tcpnodelay="true"
/>
重点参数解释
(1)maxthreads:最大并发数,默认设置 200,一般建议在 500 ~ 800,根据硬件设施和业务来判断
(2)minsparethreads:tomcat 初始化时创建的线程数,默认设置 25
(3)prestartminsparethreads:在 tomcat 初始化的时候就初始化 minsparethreads 的参数值,如果不等于 true,minsparethreads 的值就没啥效果了
(4)maxqueuesize:最大的等待队列数,超过则拒绝请求
(5)acceptcount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理,默认设置 100
(6)maxconnections:服务器在任何给定时间将接受和处理的最大连接数。当达到这个数字时,服务器将接受,但不处理另一个连接。这个额外的连接将被阻塞,直到正在处理的连接数量低于maxconnections,此时服务器将开始接受并再次处理新的连接。请注意,一旦达到限制,操作系统仍然可以接受基于acceptcount设置的连接。默认值因连接器类型而异。对于bio,默认值是maxthreads的值,除非使用executor,在这种情况下,默认值将是执行者的maxthreads的值。对于nio和nio2,默认值为10000.对于apr/native,默认值为8192。简单来说就是nio使用maxconnections代替maxthreads。
(7)enablelookups:禁用dns查询

2.关闭shutdown端口

shown端口是写在server参数里的,直接去掉是不管用,也是会默认启动的,一般在安全设置时候建议把端口修改为其他端口,shutdown修改为其他复杂字串。实际上这个端口是可以直接屏蔽不监听的。设置时候将其port值修改为-1即可:
<server port="-1" shutdown="shutdown">

3、禁用tomcat manager管理入口

为防止从tomcat web管理界面上传文件,破坏运行环境,可以手动删除tomcat自带的管理界面。
进入tomcat默认页面时有“server status”、“manager app”、“host manager”。
如果修改conf/tomcat-users.xml,配置后:
<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="admin"/>
<user username="user" password="password" roles="admin,manager,manager-gui"/>

访问tomcat web页面,用上面配置的用户名密码登录将会出现如下界面,一旦用户名密码泄露或被攻击,服务器很容易被破坏。

server status

manager app

 

host manager

避免如上界面入口引发问题,操作如下:
1、进入tomcat/webapps目录
2、只保留manager,root,以及项目相关文件,删除其他包含docs、examples、host-manager文件(rm -rf 目录名称),如果怕出错,请先备份要删除的文件

重新启动tomcat后,tomcat manager web将如下:

server status

 

manager app

host manager

恭喜!优化设置到此结束,赶紧尝试一下吧!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网