- 浏览: 2830093 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (1173)
- 名言警句 (5)
- 心情随笔 (50)
- 数据库 (57)
- Java基础 (241)
- J2EE框架 (91)
- 数据结构 (12)
- 程序设计 (21)
- WEB技术 (128)
- 网络日志 (12)
- IT资讯 (247)
- linux (64)
- solaris (2)
- 其它 (143)
- WebService (4)
- 日语学习 (2)
- 机器人 (5)
- Android (5)
- cgywin (3)
- Game (1)
- DWR (1)
- spring (8)
- canvas (1)
- Guava (3)
- Modbus (5)
- 测试 (6)
- mongodb (9)
- Quartz (2)
- Cron (1)
- windows (2)
- 持续集成 (1)
- bootstrap (3)
- 结对编程 (1)
- nodejs (1)
- Netty (1)
- 安全 (3)
- webstorm (2)
- sparkline (1)
- Job (1)
- git (3)
- Maven (3)
- knockout (5)
- jquery (1)
- bower (1)
- docker (1)
- confluence (4)
- wiki (1)
- GoogleMap (1)
- jekyll (10)
- ruby (2)
- npm (3)
- browserify (1)
- gulp (3)
- openwrt (1)
- discuz (3)
- 输入法 (1)
- JPA (1)
- eclipse (2)
- IntelliJ (1)
- css (1)
- 虚拟机 (1)
- 操作系统 (1)
- azkaban (2)
- scrum (1)
最新评论
-
pangxiea_:
你好, 想请问一下 Linux下 这么使用rxtxcomm 在 ...
使用Java进行串口通信 -
abababudei:
请教一下,这个您是怎么解决的:/dev/ttyS2enteri ...
Java应用程序的MODBUS通讯 -
xuniverse:
hannibal005 写道楼主,我问下 request.se ...
用javascript与java进行RSA加密与解密 -
atxkm:
找了一下午,终于找到了
gulp 拷贝文件时如何移除文件目录结构 -
kalogen:
gtczr 写道非常感谢,经过我自己的修改,已经完美实现。发出 ...
用javascript与java进行RSA加密与解密
【IT168技术文档】
项目情况:是一个大型公司的内部办公系统,该系统有两个和一般企业应用不太一样的特点:一是用户量非常多,人员数达到2W左右,另一个是采用分级管理的形式,各个分公司数据分开管理。
我们的定位:我们是作为业务平台的提供商参与这个项目的,我们提供底层的开发平台,系统集成商在此基础上进行二次开发。
在项目从开发到部署的过程中遇到了很多的问题,也反映出很多问题。
一、怎么回事,跑得比猫还慢
项
目开发完毕后部署在Ibm aix
小型机上,32G内存,16个cpu。应用服务器采用的是weblogic9.2,数据库是oracle10.0.2。上线后发现系统运行的非常缓慢,甚
至比开发环境下的tomcat还要慢。于是开始排查原因,最开始是对SQL进行监控,优先考虑是数据库访问性能产生瓶颈。通过监控,发现很多业务需要执行
大量的SQL语句,查看客户编写的相关代码,发现在查询数据时循环执行了大量SQL。主要原因在于他们在代码中循环调用了我们相关API,一个最典型的例
子是通过用户ID查找用户NAME,他们在业务表格里没有保存用户name,而是在查询的时候通过用户ID查找用户name填充到页面,几乎每一个查询都
是n+1。
另外由于平台使用了hibernate,使得oo编程得非常爽快,导致开发人员完全忽略了相应的数据库操作所带来的压力。很多业务逻辑直接通过PO叠加完成,把一些可以通过很少SQL完成的逻辑全部分散放置到PO里,导致了大量PO的交互和SQL语句。
开
始优化SQL,优化的同时增加大量业务缓存。但优化完毕后运行缓慢的现象依旧存在,性能有了一定的提升但是不是非常明显。继续优化,其中考虑过多频繁访问
的数据使用内存数据库的方式。但是优化过后在tomcat上效果明显,部署到生产环境就问题依旧。于是考虑weblogic的配置问题,作为开发平台提供
商,我们只是提供系统开发相关方面的支持,对于应用服务器和数据库服务器只是做基本的配置系统可运行即可。但是在这个问题上系统集成商咬定是我们平台的问
题不放,并且存在一个很严重的问题:他们使用的是盗版的weblogic,这样根本就没有相应的技术支持。
问题的解决:最后是找了一
个BEA曾经的开发人员,问题实际非常的简单,现场部署的weblogic默认是运行在32位机器上,与64位机器存在一定的不兼容。通过替换相应的
jar包,问题得到了解决,主要是IO方面。替换完毕后,速度提升了进30%
。该开发人员说,如果没有lisence,根本就不会得到这些替换的jar包。
二、内存耗尽了
访问速度的问题解决了,系统的使用量很快上来,马上遇到新的问题:内存耗尽了。严重到几乎每天都要out of memory一次。这种问题在客户现场频繁出现。
本
地测试,tomcat,sun jdk
通过Jprofiler监测内存使用情况。在并发访问门户的情况下,内存确实存在暴涨的情况,100并发,内存使用立刻上升了150m左右,继续并发
100,再增长150m。但是很快在抵达高峰时会有一次gc发生,内存使用稳定在200m,内存里大量char[]数组对象。疲劳测试,内存使用曲线并没
有出现逐渐上升泄露的情况。换weblogic和jrocket测试,gc发生的更加频繁,内存使用稳定。
但是现场依旧频繁当机,内存
根本释放不了,一直逐渐增长,典型的内存泄露。对系统缓存、单态对象包括spring管理的对象、IO流进行了统一排查,依旧没有找到内存泄露的原因。使
用IBM 工具分析heapdump文件,结果还是大量的char[]数组对象占据内存,查找应用,找不到相关业务对象引用。
问题解
决:问题解决是一篇偶尔搜到的oracle论坛的帖子,这里http://forums.oracle.com/forums
/message.jspa?messageID=1040570
。原因在于oracle10的数据库驱动对statement最后执行的结果集有着引用,并且不会释放,目的在于通过内存而换取更好的性能。数据库连接采
用的是weblogic的连接池,关于connection有个相关的statement
cache设定,设定一个connection能够被缓存的statement个数,最大是1024,而现场就被设定为了1024!connection
pool的connection个数被设置为了500
。真是个恐怖的设置。在将1024改为10后,内存使用量轰然倒地,稳定在1g左右。这个设置是在前面系统访问速度存在问题时由系统集成商的开发人员设置
上去的,他们将所有和优化相关的参数全部开到了最大。这个问题要是用户购买的是正版的weblogic和oracle的话,相信也会很快得到解决。
三、线程阻塞
内
存泄露的问题解决后,线程阻塞的问题浮出水面。系统集成商报告是线程死锁,通过分析工具其实是线程阻塞,主要问题在于系统用到了
synchronized关键字,对工作流相关API全部使用了synchronized,原因在这里:http:
//ronghao.iteye.com/blog/205731
。分析发现一个工作项提交的操作在连接数据库时被挂起了20分钟!造成了大量线程的排队阻塞。被挂起的原因有很多种。我们采用的方法是将接口拆分和设置事
务timeout时间。但是这显然不是一个好方法。最后是去掉所有的synchronized关键字,将同步的问题交由数据库解决,问题解决。
四、反思
1、系统集成商为什么不购买正版?
2、开发平台提供商究竟在项目开发中处于一种什么样的位置?开发平台是否对所有软件开发问题都要负责?
3、开发平台是越封装越快乐吗?还是越封装越丑陋?
发表评论
-
前端与后端的测试工具组合
2015-01-15 13:03 2144在Java领域,Apache, Spring, JBoss ... -
Design Pattern Categorization
2014-12-12 15:44 638Learning JavaScript Design P ... -
Java Design Patters Details
2014-12-05 14:10 682By Jason McDonald ABOUT DESIG ... -
单例模式(singleton)的一种写法
2014-12-05 11:26 582public class ModbusDetai ... -
Use Builder pattern to avoid method has too many parameters
2014-01-21 09:44 782sometimes, we have a class ... -
函数和方法的迪米特法则
2013-06-28 10:39 997有一个方法M,它存在于对象O中。对象O的M方法只引用下面几种 ... -
Java编程中“为了性能”尽量要做到的一些地方
2012-03-09 19:07 1136最近的机器内存又爆满了,除了新增机器内存外,还应该好好re ... -
软件天才都是训练出来的
2011-01-03 11:15 1171长期以来,“软件业 ... -
Quest JProbe最佳实践指南
2010-11-25 17:42 18131. 介绍 在Java的广泛 ... -
2010年大规模技术架构的思路
2010-03-21 18:16 932相比其他行业,IT技术由于信息流动便捷,新技术更新非常频繁。架 ... -
领域驱动设计和开发实战
2009-06-05 13:20 1574背景 领域驱动设计(DDD)的中心内容是如何将业务领域概念映 ... -
基于Zigbee协议的OSGi无线家庭网关设计
2009-03-16 10:23 31851 引言 随着internet的 ... -
软件性能问题的几点分析
2009-01-19 15:52 1351【IT168技术分析】 2008年已经过去了,忙忙碌碌的 ... -
怎样成为优秀的软件架构师
2008-12-13 12:39 1702【IT168 评论文章】 近来读了一篇《怎样成 ... -
写给我的团队-代码篇
2008-11-30 23:16 1349看了neora的大作写给我 ... -
各大型网站架构分析收集
2008-11-26 23:24 24601. PlentyOfFish 网站架构学 ... -
domain object模型探讨(robbin原创)
2008-11-05 09:57 2289有兴趣可看此处原文及相关讨论:总结一下最近关于domain o ... -
用户故事估算技巧
2008-09-02 12:47 1599用2的幂进行估算 开始 ... -
ie和firefox中img对象区别的困惑
2008-08-20 16:45 2402在调试js时遇到一些恶心的问题,于是做了一个测试程序,放到网上 ... -
UML我拿什么来用你?
2008-08-04 09:59 1337【IT168分析评论】或许我这样评价不是很公正! 因为UML ...
相关推荐
doc格式的文件 对一次性能调优过程的讲解,描述 能得到不少启发
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。...当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而
, 本书以源码为基础,深入分析Spark内核的设计理念和架构实现,系统讲解各个核心模块的实现,为性能调优、二次开发和系统运维提供理论支持;本文最后以项目实战的方式,系统讲解生产环境下Spark应用的开发、部署和...
, 本书以源码为基础,深入分析Spark内核的设计理念和架构实现,系统讲解各个核心模块的实现,为性能调优、二次开发和系统运维提供理论支持;本文最后以项目实战的方式,系统讲解生产环境下Spark应用的开发、部署和...
5、Spark案例实战的代码,几乎都提供了Java和Scala两个版本和讲解(一次性同时精通Java和Scala开发Spark); 6、大量全网唯一的知识点:基于排序的wordcount,Spark二次排序,Spark分组取topn,DataFrame与RDD的两种...
《Spark技术内幕:深入解析Spark内核架构设计与实现原理》以源码为基础,深入分析Spark内核的设计理念和架构实现,系统讲解各个核心模块的实现,为性能调优、二次开发和系统运维提供理论支持;本文最后以项目实战的...
大数据需要落地,需要开源技术来驱动新一轮的变革,而HBase作为大数据落地过程中的神兵利器,已经一次又一次证明了其巨大价值。本书不同于其他HBase的翻译版书籍,由来自国内互联网最前沿的实战派资深人士撰写而成,...
曾在新浪网、赶集网等公司任系统工程师、系统架构师,工作内容主要涉及:服务器系统架构设计与部署、系统运维与调优、网络故障解决、网站后端以及接口类PHP程序开发、Unix开源软件二次开发、服务器监控系统开发、...
曾在新浪网、赶集网等公司任系统工程师、系统架构师,工作内容主要涉及:服务器系统架构设计与部署、系统运维与调优、网络故障解决、网站后端以及接口类PHP程序开发、Unix开源软件二次开发、服务器监控系统开发、...
4、 作为一个技术架构肯定涉及java性能调优,所以之后会根据图示讲解jvm里的一系列东西,帮助大家充分了解jvm 5、 讲解消息中间件redis,以及高可用集群搭建,以及里面的数据类型,分布式以及一致性问题的讲解 6、 ...
这本书的内容是帮你全面了解java虚拟机,本书第1版两年内印刷近10次,98%以上的评论全部为5星级的好评,是整个Java图书领域公认的经典著作和超级畅销书,繁体版在台湾也十分受欢迎。第2版在第1版的基础上做了很大的...
ASP.Net的快速开发是ASP.Net非常大的一个优点,可以加快开发效率,这是行业的发展趋势,但是局限于这样的“傻瓜化开发方式”的开发人员的竞争力和成长性都是非常有限的,遇到ASP.Net一些高级技术(比如ASP.Net MVC、...
本书从Hadoop的缘起开始,由浅入深,结合理论和实践,全方位地介绍Hadoop这一高性能处理海量数据集的理想工具。全书共16章,3个附录,涉及的主题包括:Haddoop简介;MapReduce简介;Hadoop分布式文件系统;Hadoop...
可恢复性和性能 配置 第15章 开源工具Sqoop 获取Sqoop 一个导入的例子 生成代码 其他序列化系统 深入了解数据库导入 导入控制 导入和一致性 直接模式导入 使用导入的数据 导入的数据与Hive 导入大对象 执行导出 深入...