设为首页 收藏本站
查看: 640|回复: 0

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

[复制链接]

尚未签到

发表于 2017-2-10 09:05:29 | 显示全部楼层 |阅读模式
  摘要
  上一篇,一个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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-339968-1-1.html 上篇帖子: 使用 CAS 在 Tomcat 中实现单点登录(部署客户端应用) 下篇帖子: [How Tomcat Works]第2章 一个简单的Servlet容器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表