系统环境: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

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

linux下jvm优化、tomcat调优的更多相关文章

  1. Linux下jvm、tomcat、mysql、log4j优化配置笔记

    小菜一直对操作系统心存畏惧,以前也很少接触,这次创业购买了Linux云主机,由于木有人帮忙,只能自己动手优化服务器了.... 小菜的云主机配置大致为:centeos6(32位),4核心cpu,4G内存 ...

  2. Linux下jvm、tomcat、mysql、log4j优化配置

    小菜一直对操作系统心存畏惧,以前也很少接触,这次创业购买了Linux云主机,由于木有人帮忙,只能自己动手优化服务器了.... 小菜的云主机配置大致为:centeos6(32位),4核心cpu,4G内存 ...

  3. Linux下jvm、tomcat、mysql、log4j优化配置笔记[转]

    小菜一直对操作系统心存畏惧,以前也很少接触,这次创业购买了Linux云主机,由于木有人帮忙,只能自己动手优化服务器了.... 小菜的云主机配置大致为:centeos6(32位),4核心cpu,4G内存 ...

  4. linux+jre+apache+mysql+tomcat调优

    一.不再为Apache进程淤积.耗尽内存而困扰 0. /etc/my.cnf,在mysqld那一段加上如下一行: log-slow-queries=queries-slow.log 重启MySQL 酌 ...

  5. linux下mysql安装和调优

    1.yum yum -y install mysql-server mysql 2.RPM安装 http://dev.mysql.com/downloads/ 下载RPM包,请确认服务器版本,我的是红 ...

  6. Tomcat调优总结(Tomcat自身优化、Linux内核优化、JVM优化)

    Tomcat自身的调优是针对conf/server.xml中的几个参数的调优设置.首先是对这几个参数的含义要有深刻而清楚的理解.以tomcat8.5为例,讲解参数. 同时也得认识到一点,tomcat调 ...

  7. Tomcat 调优及 JVM 参数优化

    Tomcat 本身与 JVM 优化 Tomcat:调整Server.xml JVM:bat启动服务方式的话修改catalina.bat 服务式启动的话参考:http://www.cnblogs.com ...

  8. 服务器的tomcat调优和jvm调化

    下面讲述的是tomcat的优化,及jvm的优化 Tomcat 的缺省配置是不能稳定长期运行的,也就是不适合生产环境,它会死机,让你不断重新启动,甚至在午夜时分唤醒你.对于操作系统优化来说,是尽可能的增 ...

  9. Tomcat性能调优-JVM监控与调优

    参数设置 在Java虚拟机的参数中,有3种表示方法用"ps -ef |grep "java"命令,可以得到当前Java进程的所有启动参数和配置参数: 标准参数(-),所有 ...

随机推荐

  1. 简单的python购物车

                 这几天,一直在学python,跟着视频老师做了一个比较简单的python购物车,感觉不错,分享一下 products = [['Iphone8',6888],['MacPro ...

  2. nginx 判断移动端或者PC端 进入不同域名

    自己最近用node.js + react 做了个网站.在PC端上的访问是这样的: 手机访问居然是这样的: 这样用户体验很不好. 所以做了一个移动端的版本. 需求: 需要判断用户是否手机还是电脑 访问网 ...

  3. mysql权限参考

    mysql日常管理和应用工作中,大家经常会涉及到授权问题,下面,我们就列举下权限相关的参考. 1.管理权限(Administrative Privileges) Privilege Name      ...

  4. 学号 2018-2019-20175212 童皓桢《Java程序设计》第5周学习总结

    学号 2018-2019-20175212 <Java程序设计>第5周学习总结 教材学习内容总结 接口 声明接口: interface 名字: 接口体:接口体中只有常量无变量,只有抽象方法 ...

  5. windows下Redis安装及利用java操作Redis

    一.windows下Redis安装 1.Redis下载 下载地址:https://github.com/MicrosoftArchive/redis 打开下载地址后,选择版本 然后选择压缩包 下载 R ...

  6. 网络传输数据序列化工具Protostuff

    一直在物色比较好用的网络传输数据序列化工具,看了诸如marshalling,protobuff等,但是均有一个共同特点,使用起来异常繁杂,有没有比较好用同时性能又不会太差的组件呢?答案当然是有的,那就 ...

  7. css三种基本选着器

    <!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...

  8. 利用IIS部署WEB网站以及解决CSS/JS不能显示问题

    利用IIS部署WEB网站以及解决CSS/JS不能显示问题 转载声明:http://blog.sina.com.cn/s/blog_a001e5980101b4kt.html vs中正常IIS发布网站后 ...

  9. HTCVIVE定位器更新之后,定位器指示灯不亮,重置基站固件操作指南。

    HTCVIVE定位器更新之后,定位器指示灯不亮,固件修复指南 建议您重置基站固件,操作如下:请您使用手机来拍照运行中基站的“激光发射器”面板,并且数一下是否有17颗LED灯,如果没有17颗,则基本可以 ...

  10. JS-5-循环

    循环结构 循环:反复执行有关操作 * for循环 for(var i=1; i<=50; i++) { console.log("第"+i+"次说我爱你" ...