摘要

上一篇,一个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.22\webapps\manager

我们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

可以看到以下信息

看到“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

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

  1. 一个Web报表项目的性能分析和优化实践(四):MySQL建立索引,唯一索引和组合索引

    先大致介绍下项目的数据库信息. 数据库A:主要存放的通用的表,如User.Project.Report等. 数据库B.C.D:一个项目对应一个数据库,而且这几个项目的表是完全一样的. 数据库表的特点 ...

  2. 一个Web报表项目的性能分析和优化实践(五):重构有助于性能优化么?

    项目从初次开发到现在,已经快3年了.期间,有N个工程师参与过. 需求方面:增加减少,反反复复,无数次:人力方面:增加减少,不稳定:时间方面:功能开发着急上线,Bug开发紧急修复. 因此,代码臃肿,问题 ...

  3. 一个Web报表项目的性能分析和优化实践(六):设置MySQL的最大连接数(max_connections)

    在上一篇文章中"一个Web报表项目的性能分析和优化实践(二):MySQL数据库连接不够用(TooManyConnections)问题的一次分析和解决案例"提到,项目中新增几个数据库 ...

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

    最近,在开发和优化一个报表型的Web项目,底层是Hibernate和MySQL. 当报表数据量大的时候,一个图表要花4秒以上的时间. 以下是我的分析和体会.  1.我首先需要知道哪些函数执行了多少时间 ...

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

    最近,在开发和优化一个报表型的Web项目,底层是Hibernate和MySQL. 当报表数据量大的时候,一个图表要花4秒以上的时间. 以下是我的分析和体会.  1.我首先需要知道哪些函数执行了多少时间 ...

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

    最近,项目中遇到了数据库连接不够的问题. 异常信息com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data ...

  7. 一个Web报表项目的性能分析和优化实践(七):性能监测工具JavaMelody

    简介 JavaMelody 能够监测Java或Java EE应用程序服务器,并以图表的方式显示:Java内存和Java CPU使用情况,用户Session数量,JDBC连接数,和http请求.sql请 ...

  8. 前端开发,页面加载速度性能优化,如何提高web页面加载速度

    一个网页访问速度的快慢,  不仅看它服务器的配置,这里除去你空间主机配置很烂的情况以外,我们从网站开发方面来探讨,前端技术需要从哪些方面提高访问的速度,需要用到哪些技术手段. 文件的加载 图标的加载: ...

  9. Python 项目实践三(Web应用程序)第三篇

    接着上节的继续学习,现在要显示所有主题的页面 有了高效的网页创建方法,就能专注于另外两个网页了:显示全部主题的网页以及显示特定主题中条目的网页.所有主题页面显示用户创建的所有主题,它是第一个需要使用数 ...

随机推荐

  1. (转载) 清理缓存 IPackageStatsObserver

    清理缓存 IPackageStatsObserver 2016-04-10 13:40 2288人阅读 评论(0) 收藏 举报  分类: android(59)  版权声明:本文为博主原创文章,未经博 ...

  2. Git 环境安装

    本文环境: 操作系统:Windows XP SP3 Git客户端:TortoiseGit-1.8.14.0-32bit 一.安装Git客户端 全部安装均采用默认! 1. 安装支撑软件 msysgit: ...

  3. Jlink如何校验Hex

    打开SEGGER J-Flash ARM,记住必须设置好工程属性后才能校验,否则校验和为0 设置好工程属性后,直接将Hex拖入到工程中即可.在LOG窗口中会显示CRC的值 如何校验芯片中的程序的版本号 ...

  4. css 禁止文本被选中复制代码

    css 禁止文本被选中复制代码: .cus-text{ -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none ...

  5. js中获取数据类型

    ES5中,js中数据类型:number.string.boolean.undefined.null.object js中获取数据类型常用的四种方式 实例: var a = 123, b = true, ...

  6. (QT)在命令行编译ui文件和程序

    1.新建helloworld_2文件夹,将helloworld里的main.cpp和hellodialog.cpp两个文件复制过来. 2.打开控制台.此时不能用cmd,否则不能出最后的结果(lz在运行 ...

  7. filezilla server配置为 passive mode

    首先要配置filezilla的setting里面的Passive mode setting选项 (2)关键部分,打开win8.1下的防火墙,新建入站规则 注意,要打开80,443端口.已经passiv ...

  8. 在Windows上面安装多个Memcached

    在Windows上面安装多个Memcached sc create "memcached Server3" start= auto binPath= "D:\memcac ...

  9. _00020 妳那伊抹微笑_谁的异常最诡异第一期之 SqlServer RSA premaster secret error

    博文作者:妳那伊抹微笑 博客地址:http://blog.csdn.net/u012185296 博文标题:_00020 妳那伊抹微笑_谁的异常最诡异第一期之 SqlServer RSA premas ...

  10. 海思 3520D 移植Qt4.5.3 一

    一.移植Qt4.5.3  1.获得 Qt4.5.3 的源码Qt4.5.3源码的原始包 qt-embedded-opensource-src-4.5.3.tar.gz 将其复制到 /opt 下,     ...