• tomcat性能优化梳理


    tomcat性能优化

    Tomcat本身优化
    • Tomcat内存优化
      • 启动时告诉JVM我要一块大内存(调优内存是最直接的方式)
      • 我们可以在 tomcat 的启动脚本 catalina.sh 中设置 java_OPTS 参数
      • JAVA_OPTS参数说明
        • server 启用jdk 的 server 版
        • Xms java虚拟机初始化时的最小内存
        • Xmx java虚拟机可使用的最大内存
        • XX: PermSize 内存永久保留区域
        • XX:MaxPermSize 内存最大永久保留区域
      • 配置示例:
        JAVA_OPTS=’-Xms1024m -Xmx2048m -XX: PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m’
        说明:其内存的配置需要根据服务器(或虚拟机)的实际内存来配置
      • 重启tomcat生效
    • Tomcat IO优化
      • 如何必要可以使用APR来从操作系统级别来解决异步的IO问题。次之使用NIO。
      • 在server.xml中
    • Tomcat 线程优化


    - maxThreads="600" ///最大线程数
    minSpareThreads="100"///初始化时创建的线程数
    maxSpareThreads="500"///一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。
    acceptCount="700"//指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理

    • 使用线程池
      • 在server.xml中增加executor节点,然后配置connector的executor属性,
      • namePrefix:线程池中线程的命名前缀
        maxThreads:线程池的最大线程数
        minSpareThreads:线程池的最小空闲线程数
        maxIdleTime:超过最小空闲线程数时,多的线程会等待这个时间长度,然后关闭
        threadPriority:线程优先级
    <Executor name="tomcatThreadPool" namePrefix="req-exec-"maxThreads="1000" minSpareThreads="50"maxIdleTime="60000"/>
    <Connector port="8080" protocol="HTTP/1.1"executor="tomcatThreadPool"/>
    
    • 禁用DNS查询
      • 当web应用程序向要记录客户端的信息时,它也会记录客户端的IP地址或者通过域名服务器查找机器名转换为IP地址。DNS查询需要占用网络,并且包括可能从很多很远的服务器或者不起作用的服务器上去获取对应的IP的过程,这样会消耗一定的时间。为了消除DNS查询对性能的影响我们可以关闭DNS查询,方式是修改server.xml文件中的enableLookups参数值
    • 缓存优化
      • 对于静态页面最好是能够缓存起来,这样就不必每次从磁盘上读。这里我们采用了Nginx作为缓存服务器,将图片、css、js文件都进行了缓存,有效的减少了后端tomcat的访问。
    • Tomcat启用GZIP压缩,提升web性能
      • 修改%TOMCAT_HOME%/conf/server.xml,修订节点如下:
      • GZIP的缺点。相对于没有进行GZIP的工程来说,使用GZIP要增加服务器压缩的压力(cpu消耗)、客户端解压缩的压力,故而对服务器的配置需求更高。另外压缩也要耗费时间,想占用更小的空间,得到高压缩比率,肯定要牺牲较长的时间;反之,如果时间较为宝贵,要求快速,那么所得的压缩比率一定较小,当然会占用更大的空间了(压缩比率=原内容大小/压缩后大小,压缩比率越大,则表明压缩后占用空间的压缩包越小),这就是物理空间与时间的矛盾。
    • 配合nginx做集群
    jvm虚拟机调优
    操作系统调优
    • 对于操作系统优化来说,是尽可能的增大可使用的内存容量、提高CPU的频率,保证文件系统的读写速率等。
  • 相关阅读:
    request.getParameter() 、 request.getInputStream()和request.getReader() 使用体会
    HTTP之Content-Length
    关于spring3中No Session found for current thread!and Transaction的配置和管理(转)
    Java数据类型和MySql数据类型对应一览
    Spring MVC 解读——View,ViewResolver(转)
    LeetCode 441. Arranging Coins
    LeetCode 415. Add Strings
    LeetCode 400. Nth Digit
    LeetCode 367. Valid Perfect Square
    LeetCode 326. Power of Three
  • 原文地址:https://www.cnblogs.com/frankltf/p/10382617.html
Copyright © 2020-2023  润新知