• 一个Web报表项目的性能分析和优化实践(三) :提高Web应用服务器Tomcat的内存配置,并确认配置正确


    摘要

    上一篇,一个Web报表项目的性能分析和优化实践(一):小试牛刀,统一显示SQL语句执行时间 ,讲述了项目优化的整体背景,重点讲述了统一显示了Web项目SQL语句的执行时间。

    本篇,将重点介绍提高Web应用服务器Tomcat的内存配置,并确认配置正确的方法。

    背景

    这个Web报表项目,用的Linux系统,Web应用服务器使用的是Tomcat7.0。

    根据已有程序开发的经验,我认为手动分配和提高Tomcat的内存,能够降低Web请求响应时间,提高系统的性能。

    手动提高Tomcat内存前后的响应时间,没有记录和进行对比,因此“提高了系统的性能”现在只能算是一种“感觉”。

    实际提升了多大幅度的性能,还需要有真实数据进行对比才能知道。

    本文,不再探讨此问题,重点阐述如何配置Linux下的Tomcat的内存。

    1.配置方法

    Linux系统

    在/usr/local/tomcat/bin 目录下的catalina.sh添加:

    JAVA_OPTS='-Xms512m -Xmx1024m'
    要加“m”说明是MB,否则就是KB了,在启动tomcat时会 报内存不足。

    -Xms:初始值
    -Xmx:最大值
    -Xmn:最小值

    注:Tomcat的路径可能有所不同。

    catalina.sh

    # -----------------------------------------------------------------------------(上面还有很多#开头的注释)

    # OS specific support.  $var _must_ be set to either true or false.
    JAVA_OPTS= ‘-Xms512m -Xmx1024m’
    cygwin=false
    darwin=false
    os400=false
    case "`uname`" in
    CYGWIN*) cygwin=true;;
    Darwin*) darwin=true;;
    OS400*) os400=true;;
    esac

    Windows系统
    在catalina.bat最前面加入
    set JAVA_OPTS=-Xms128m -Xmx350m

    经验教训

    Linux下的配置方法和Windows下的是不一样的。

    这类问题是很常见的,总结成文,而不是放在大脑里,很有必要。

    2.查看Tomcat的内存配置

    如果,我们只是根据自己的或者网友的方法,配置了参数,就认为“万事大吉”,是非常不科学的,是不负责任的表现。

    Tomcat完整的压缩包中,webapps目录含有manager这个项目。

    比如C:apache-tomcat-7.0.22webappsmanager

    我们Linux系统的项目中,已经把这个模块删除了。

    现在,重新拷贝这个模块到Tomcat的webapps目录。

    第一次访问的时候,没有权限。

    需要修改tomcat的conf目录下的tomcat-users.xml这个配置文件,增加以下配置

    <tomcat-users>

      <role rolename="manager-gui"/>

      <user username="username" password="123456" roles="manager-gui"/>

    </tomcat-uses>

    然后,使用配置的用户名和密码,访问 http://ip:port/manager

    点击Server Status 超链接,或者直接访问 http://ip:port/manager/status

    可以看到以下信息

    TomcatServerStatus

    看到“Free memory: 268.18 MB Total memory: 970.18 MB Max memory: 1758.25 MB”才真正表明,我们的配置成功了。

    3.真相何在

      细心的读者可能会发现,“Free memory: 268.18 MB Total memory: 970.18 MB Max memory: 1758.25 MB”与我们配置的 ‘-Xms512m -Xmx1024m’不完全吻合。
      从上面的参数中,我们只能知道Tomcat的内存确实增大了,但是增大的规则和我们预期的不完全一样。

      Total memory和Max memory等具体表示啥含义,为什么会是这样,我现在还不是很清楚。

      这个问题暂时不再深究,今后,再看Tomcat的书籍和文档,可能能够找到这个问题的答案。

      知道的同学,可以留言告诉我下。

    4.回答一个热心网友的评论

    评论内容

    我没有仔细看你写的代码,但是看你的标题之后,我处理的流程会是:
    在程序没有错的情况下,
    一、看hql语句是否被滥用了,该用select col from table的写成select * from table了
    二、看where子句的执行顺序,一般最后面的条件是过滤掉大部分数据的条件,以次类推。看看是否改用join的地方使用了select col from table where col in (select ...)的语句,检查视图的sql语句
    三、给表的列适当建立索引
    四、再高级一些的就是读写分离或者mysql集群了(我也木有搞过)

    --评论参见:http://blog.csdn.net/fansunion/article/details/13620783

    我的回复

    1."该用select col from table的写成select * from table了"
    查询了过多的字段,这种情况是存在的。
    这个晚点优化。
    2.看where子句的执行顺序。
    咱们用的大多数 关联查询,很少用子查询。
    这个晚点优化。

    3.给表的列适当建立索引。
    这个是本周的重点。
    我们有一个数据库,全是数据和维度,有数据更新的时候,才会插入。
    索引会比较有效。
    4.读写分离或者mysql集群。
    等正式上线,数据量大了之后,应该会弄。
    我也不熟悉,需要边学边用,不会的就去问boss或者公司相关大牛。
     

    相关阅读

    一个Web报表项目的性能分析和优化实践(一):小试牛刀,统一显示SQL语句执行时间

    一个Web报表项目的性能分析和优化实践(二):MySQL数据库连接不够用(TooManyConnections)问题的一次分析和解决案例

    原文参见http://FansUnion.cn/articles/3019

  • 相关阅读:
    【ThreadX】Azure RTOS ThreadX概述
    -- spi flash 擦除接口调用HAL库不同函数的区别
    STM32 芯片锁死解决方法
    【KEIL】User's Guide
    【KEIL】Software Packs
    【KEIL 】Options for File
    使用CubeMX创建TouchGFX工程时LCD死活不显示
    【转】获取本地图片的URL
    printf 函数格式控制
    【集成】touchgfx 之 《Using C code with TouchGFX》
  • 原文地址:https://www.cnblogs.com/qitian1/p/6463488.html
Copyright © 2020-2023  润新知