• tomcat 优化


    安全优化

    1、降权启动,采用普通用户启动tomat服务,这样即使病毒通过http攻击进入tomcat 也不会由最高权限

    2、管理端口8005 改为其他的。8005 端口为关闭命令监听端口,虽然只监听本地但是如果病毒代码入侵到本地也可以关闭服务。“SHUTDOWN”改为其他的字符,注意改完还要更改关闭脚本。

    3、注释掉AJP 的8009 端口,此端口为监听其他apache web server 通信的协议端口,避免入侵关闭即可。

    4、禁用管理端:webaddps 下所有非ROOT 目录删除,ROOT目录下的文件删除,只保留目录即可。

    性能优化

    利用缓存和压缩  

    对于静态页面最好是能够缓存起来,这样就不必每次从磁盘上读。这里我们采用了Nginx作为缓存服务器,将图片、css、js文件都进行了缓存,有效的减少了后端tomcat的访问。
      另外,为了能加快网络传输速度,开启gzip压缩也是必不可少的。但考虑到tomcat已经需要处理很多东西了,所以把这个压缩的工作就交给前端的Nginx来完成。
      除了文本可以用gzip压缩,其实很多图片也可以用图像处理工具预先进行压缩,找到一个平衡点可以让画质损失很小而文件可以减小很多。曾经我就见过一个图片从300多kb压缩到几十kb,自己几乎看不出来区别。

    优化tomcat参数

    <Connector port="8080"   
               protocol="org.apache.coyote.http11.Http11NioProtocol"  
               connectionTimeout="20000"  
               redirectPort="8443"   
               maxThreads="500"              #Tomcat使用线程处理接收的每个请求。这个值表示Tomcat可创建的最大线程数。默认200。可以根据机器的时期性能和内存大小调整,一般在400-500。最大可以800左右。
               minSpareThreads="20"  
               acceptCount="100"               #指定当所有可以使用的处理请求的线程数都被使用时,可传入连接请求的最大队列长度,超过这个数的请求将不予处理,默认为100个。
               disableUploadTimeout="true" 

       compression="on"                  #压缩传输

               enableLookups="false"               ##是否反查域名,默认值为true。为了提高处理能力,应设置为false 
               URIEncoding="UTF-8" /> 

    protocol:协议类型,可选类型有四种,分别为BIO(阻塞型IO),NIO,NIO2和APR

    1)BIO:BIO(Blocking I/O),顾名思义,即阻塞式I/O操作,表示Tomcat使用的是传统的Java I/O操作(即java.io包及其子包)。Tomcat7在默认情况下,是以bio模式运行的,tomcat8默认是NIO模式。遗憾的是,就一般而言,bio模式是三种运行模式中性能最低的一种。BIO配置采用默认即可。

    2)NIO:NIO(New I/O),是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。Java nio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的缩写。它拥有比传统I/O操作(bio)更好的并发运行性能。要让Tomcat以nio模式来运行也比较简单,我们只需要protocol类型修改为:

    Java代码  

      //NIO  
        rotocol="org.apache.coyote.http11.Http11NioProtocol"  
      //NIO2  
        protocol="org.apache.coyote.http11.Http11Nio2Protocol"  
            即可。

     3)APR:APR(Apache Portable Runtime/Apache可移植运行时),是Apache HTTP服务器的支持库。你可以简单地理解为:Tomcat将以JNI的形式调用 Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高 Tomcat对静态文件的处理性能。 

         与配置 NIO运行模式一样,也需要将对应的 Connector节点的 protocol属性值改为:

      Java代码  

        protocol="org.apache.coyote.http11.Http11AprProtocol"  

    内存调优

    内存方式的设置是在catalina.sh中,调整一下JAVA_OPTS变量即可,因为后面的启动参数会把JAVA_OPTS作为JVM的启动参数来处理。
    具体设置如下:
    JAVA_OPTS="$JAVA_OPTS -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4"
    其各项参数如下:
    -Xmx3550m:        设置JVM最大可用内存为3550M。
    -Xms3550m:        设置JVM促使内存为3550m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
    -Xmn2g:          设置年轻代大小为2G。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
    -Xss128k:         设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
    -XX:NewRatio=4:       设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5
    -XX:SurvivorRatio=4:         设置年轻代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6
    -XX:MaxPermSize=16m:      设置持久代大小为16m。
    -XX:MaxTenuringThreshold=0:设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。

  • 相关阅读:
    Java实现数组去除重复数据的方法详解
    java枚举和constant使用区别
    如何健壮你的后端服务
    entityframework学习笔记--001
    MongoDB配置服务--MongoDB安装成为windows服务
    MongoDB基础入门003--使用官方驱动操作mongo,C#
    MongoDB基础入门002--基本操作,增删改查
    MongoDB基础入门001--安装
    webapi的返回类型,webapi返回图片
    C#异步下载文件--基于http请求
  • 原文地址:https://www.cnblogs.com/fanggege/p/11129424.html
Copyright © 2020-2023  润新知