- 博客(100)
- 收藏
- 关注
原创 jvm文章摘要
Java内存区域与OOM http://www.iteye.com/topic/802573·程序计数器:保留线程执行到的指令·栈:编译期间预期的变量表。层次深:栈溢出;无法创建更多的栈OOM;线程个数=(系统内存-堆-年老代-保留区域)/每个栈空间·本地栈:native,也会OOM·堆(eden、s0、s1+old):生成大量无法回收的对象OOM·方法区:加载类过多OOM...
2011-12-02 01:10:23
192
原创 系统的性能优化--记项目总结
项目过去都3个多月了,也没系统的总结,今天总结一下 系统背景:1.访问量大:每天承受20亿+服务调用2.海量数据:核心表都是5亿条数据,而且每天还在以几十万的速度增加3.之前架构:由于读写比例很高,已经采用分布式cache--db单点的架构4.db负载高:在小机上,业务高峰期时,db的cpu的占用率曾达到70%-80%,响应明显变慢5.业务特性:读写比例高,大部分业务可...
2011-09-06 00:40:20
233
原创 转载:面向程序员的数据库访问性能优化法则
http://blog.csdn.net/yzsind/archive/2010/12/06/6059209.aspx
2010-12-22 00:06:11
201
原创 主题:关于系统性能的思考-----回复
看了《关于系统性能的思考》,结合自己平时的工作和身边的教训,谈谈自己的一些关于性能的想法 1.性能和容量不是一个概念,在相同条件下,当然性能如果越好,容量会越高 2.性能优化真的不是定式的,还需要相当丰富的经验去解决。以自己身边的系统为例,从Apache、Jboss、F5、网络、应用系统、到最后的DB,就如同是一条回家的路,任何一个环节处理慢了,都可能成为性能的瓶颈 3.一...
2010-07-21 02:34:06
204
原创 logger的功能
1.最明显的功能,排查线上问题。 平时遇到bug时,要相信“人走过,必留下痕迹”,没有什么事情是没有原因的。 2.报警 我们的系统越来越多,业务越来越多,不可能靠人肉每天查询日志以发现问题,还是要利用机器。 针对具体的业务,打印具体格式的日志,通过日志收集系统的规则,发现问题则向相关人员报警。怎么实现日志收集系统呢,可以每隔一段时间,从生产环境中获取指定日志,每次读...
2010-07-19 23:40:15
298
原创 我们需要什么样的logger
在生产环境中,针对具体问题的追踪,没有debug,只有利用logger排查问题,这就要求我们打印logger,具体有哪些logger呢? 1.摘要日志 同步service层摘要日志,打印调用服务,入参,执行时间,执行结果 异步事件接收摘要日志,打印调用服务,入参,执行时间,执行结果 dal层摘要日志 intergration摘要日志 摘要日志,一般由...
2010-07-19 23:28:33
216
原创 大资源的分配与控制
在应用中,总有一些业务操作可能会引起大数据量的查询,基于应用健壮性的考虑,需要对这些业务控制起来。 思路:外围业务每次请求时,应用每次申请一个资源,当超过限定的资源总数时,不允许业务继续进行. try{ applyResource(); do业务(); } finally{ r...
2010-07-19 23:13:32
152
原创 缓存小技巧--实现cache的锁
在有些业务背景下,需要cache防止并发的情况,然后cache却不能提供锁的功能,可以由应用代为实现 1.第一次存入cache的数据时,加一个modifiedTime的时间戳2.下次更新的时候,必须保证取到当前的时间戳和cache中数据的时间戳一致,这样才可以更新;否则直接removecache,不要影响到正常业务。 其实,这种乐观锁的实现,和DB层的乐观锁实现原理是一样的,即...
2010-07-19 22:34:47
599
原创 缓存小技巧--缓存的分级
在大型的互联网应用中,如果缓存的是大量的数据,可以考虑多级缓存数据1.第一级cache:本地线程cache 每次将数据放入线程cache(利用ThreadLocal)中,可以避免同一个线程中对同一个缓存数据的访问 2.第二级cache:本地内存cache 利用appserver的内存,将数据放入本地的内存缓存,可以用的工具有EHCache 3.第三级cache:...
2010-07-19 22:22:19
940
原创 缓存小技巧--缓存key的分组
这篇没有任何技术含量,仅仅是一个良好的编程习惯 随着应用中缓存的业务数据越来越多,为了防止不同业务的key相互覆盖的情况,有个简单的办法,对不用的业务的数据分组,比如:业务1 prefix1+key业务3 prefix2+key业务2 prefix3+key 这样之后,即时各个业务的key相同,也可以防止数据被相互覆盖的情况 ...
2010-07-19 22:15:44
489
原创 缓存小技巧--key的关联性
如果我们对一个比较复杂的模型做cache,会有如下需求:1. 利用多个key去查询这一模型的cache2. 继而要求可以利用多个key去删除cache时 如果按照最简单的模型,每个key对应一个cache数据,这样当某一个key对应cache中的数据变动时,另外一个key对应的cache数据必定成为脏数据。举例:key1->cacheObject,key2->cac...
2010-07-19 22:11:20
271
原创 缓存小技巧--NullObject模式&&表识cache
在我们的应用中,有一张表的查询量非常之大,高峰期时6000次/second查询,而且更新很少,于是我们的改造来了: 第一次优化:方法:每次从cache中读取,如果cache中没有命中,则从DB读取,如果有值将此值放入cache中。效果:上线后效果并不是特别明显,高峰期仍有3000次/second的查询,原因在哪里呢?此表只有700w的数据量,但是对于3亿用户,每个用户都要查询此表,...
2010-07-19 22:01:52
224
原创 缓存小技巧--异步更新缓存时remove cache数据
在支撑大规模、高并发、高可用的互联网应用中,异步更新分布式缓存的应用已经越来越多了(为什么是异步更新缓存,因为异步不仅可以提高系统性能,而且提高系统的伸缩性和可用性),由于缓存的更新是异步的,可能由于多个更新缓存的并发线程而导致的脏数据。 举例,有下面2个线程A、B同时执行业务,执行完业务之后,会产生2个异步的线程A1、B1去更新缓存,在理想情况下,A1和B1应该保持顺序性,即A1先更新缓...
2010-07-12 23:24:22
491
原创 这是一个非常值得记忆的时刻
2008年12月份收费改造,第一次通宵发布系统;这是刚毕业不久后进入公司,抱着对学习饥渴的心态,申请晚上通宵留守,发布成功,晚上12点吃了一顿烧烤,4点发布完成后监控没有问题,6点和若干开发还在局域网内打了几盘cs,7点pm把热腾腾的豆浆煎饺送上,上午9点和其他开发交接后,10点回家睡觉 2009年11月份新的个人版发布,作为核心业务的提供方,留守发布,这次同样有烧烤,我们的系统发...
2010-07-07 21:51:19
161
原创 冗余的粒度问题
以前谈过重用的粒度问题,今天也谈谈冗余的粒度。 1. 数据库字段的冗余 好处1:合适字段的冗余,对于提供数据库的查询速度会有很大提升,因为可以不用于其他表join去获取数据 好处2:在垂直分库的情况下,丧失了join数据表的能力,为了不让业务受伤害,在表上加上一些冗余,同样可以满足业务的需求 坏处:需要在多个表中维护数据的一致性2. 业务中多个表的冗余...
2010-06-26 16:12:24
198
原创 AOP应用
AOP应用已经很广了,谈一谈平时工作用到的地方:1. 打印摘要日志 打印调用服务时的调用的服务、方法、参数、执行结果、消耗时间2. 详细的入参出参 打印调用服务时调用的参数列表,以及返回结果。基于日志量的考虑,对于频繁调用的查询类可能不需要打印;对于操作类服务,可以打印出入参出参3. 性能监控 对于每个服务的调用、异步消息的处理、DAO的调用,以及对外围系...
2010-06-26 15:51:59
133
原创 差点导致系统挂掉,可用率啊可用率!
早上我们线的架构找到我,由于一张表被频繁查询,险些导致系统挂掉(还好现在只有每天几千的查询量,数据量不大,不过过段时间,当一个新业务上线时,会有每天1000w--5000w的量,就是说每天查询1000w次),现在打字时还有些腿软,可用率啊可用率! 上下文是这样的:原因:系统中有些配置数据会被频繁查询,所以我们将之纳入缓存,用于提升系统的性能,缓解数据库的压力。 措施:因此每次系统...
2010-06-11 11:20:19
305
重用的粒度问题
面向对象的一个重要特征就是封装和继承,其实就包含了代码的复用。继承、委托等方式(is a/has a/use a)都是代码复用的方式。 在软件开发中,有条原则就是DRY--dont repeat yourself,刚开始接触计算机时的理解是把公用的代码抽象到一个方法中,其他外围类调用此方法,其实除了这种方法级别的复用,还有更高的层次。1.代码的copy\paste,最低级的复用。 ...
2010-04-15 23:01:13
295
原创 如何计算java内存大小--谁吃了对象引用的16byte?
public class ResidenceRulesDO { /** * This property corresponds to db column <tt>BEGIN_CODE</tt>. */ private long beginCode; /** * This pr...
2010-01-13 21:53:30
113
hashmap学习
1.数据结构数组+链表的形式 【】【】【】【】【】 | | | | | 【】【】【】【】【】数组长度:固定,即初始化HashMap时的capacity。当需要数组长度时,会rehash,重新计...
2009-12-09 23:57:50
86
原创 探寻ThoughtWorks的敏捷实践,专访ThoughtWorks咨询师 <摘要>
敏捷包括TDD、重构、简单设计、持续集成等。TDD确保编码前理解需要,并保持简单设计;同时TDD自身的大量自动化测试为持续集成提供了保证;在重构代码时保证代码质量,达到简单设计。 敏捷思想提倡以人为本,持续改进,通过快速迭代实现频繁交互,保证与客户的沟通,减少对需求理解的不一致,客户也可以及时调整需求来满足业务的变化。每一个迭代过程都是一个完整的瀑布流程,包括分析、设计、编...
2009-11-24 13:52:23
227
原创 Don’t Ask, Tell
Don’t Ask, Tell 先举一个计算工资的老例子. 不同的员工有各种不同的工资计算方法, 这种情况下如何为全公司的员工计算呢? 想想现实中的情况, 在公司可能有一个会计部,每到发薪的日子. 会计部就会把全公司的员工资料集中到一起, 看看张三是什么类型的员工, 如果是小时工就按小时工来计算,如果是办公室主任就按主任的方法来计算. 基于这样的考虑, 我们在建模的时候也会相应的建立一个类...
2009-11-17 02:55:57
127
原创 Java对象的强、软、弱和虚引用
在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及状态,程序才能使用它。这 就像在日常生活中,从商店购买了某样物品后,如果有用,就一直保留它,否则就把它扔到垃圾箱,由清洁工人收走。一般说来,如果物品已经被扔到垃圾箱,想再 把它捡回来使用就不可能了。 但有时候情况并不这么简单,你可能会遇到类似鸡肋一样的物品,食之无味,弃之可惜。这...
2009-11-12 20:03:40
102
复杂对象的输出--定制toString
先来看一个类public class ComplexObject implements Serializable { private static final long serialVersionUID = -3986831089858789914L; private int id; private...
2009-10-28 20:50:13
259
原创 java序列化总结
1.Serializable接口只是一个表识接口,仅仅是告诉jvm这是一个可以序列化的接口。2.serialVersionUID只要这个UID的值不变,在序列化的版本中增加属性或者减少属性就不会报错;否则当版本变更后,再反序列会报错;如果自己不定义,每次在编译的时候,编译器会自动生成一个值,但是不能保证每次编译时的值都一样,所以务必自己定义! 3.readResolve、rea...
2009-10-26 23:10:54
106
原创 罗素语录
1. 对爱情的渴望,对知识的追求,对人类苦难不可遏制的同情,是支配我一生的单纯而强烈的三种感情。2.幸福生活在很大程度上必然是恬静的生活,因为真正的快乐只能存在于恬静的气氛中。 3. 一直向着自己目标前进的人,那么整个世界都会为他让路。 4. 罗素 说: 爱情只有当它是自由自在时,...
2009-10-14 13:09:22
237
这段代码不是我写的
刚刚看了9月份刚刚出版的《架构师》的篇首语,技术人员要注意沟通。是的,我就是书中所说的那种人,我害怕沟通,和人打交道远远不如和机器打交道那么自如。和人打交道,最重要的是沟通,一句不妥的用语,小到会引起对方的误解,大到任何可以想象的不堪后果。 是的,我有责任,重构代码是我的职责,但是代码混乱的历史原因不应该压在我身上。我心中只是想表达此意思,心中并没有推脱的意思,错就错在自己的表...
2009-09-16 15:58:02
211
原创 可伸缩性最佳实践:来自eBay的经验
在eBay,可伸缩性是我们每天奋力抵抗的一大架构压力。我们所做的每一项架构及设计决策,身前身后都能看到它的踪影。当我们面对的是全世界数以亿计的用户,每天的页面浏览量超过10亿,系统中的数据量要用皮字节(1015 或250 )来计算——可伸缩性是生死交关的问题。 在一个可伸缩的架构中,资源的消耗应该随负载线性(或更佳)上升,负载可由用户流量、数据量等测量。如果说性能衡量的是每一工作单元所需的...
2009-09-15 21:37:50
84
原创 领域模型分类
一、失血模型 只有getter和setter方法的实体类,所有的业务逻辑完全由Service层来完成。 代码示例: Domain:Java代码 public class Person { private long id; private String name; private int age; //getter and s...
2009-08-11 17:26:01
140
我们依赖的是流程保证质量,不是依赖个人保证质量
在新的个人版中,为了重用校验码的逻辑,网站系分主导,将校验码的生成、验证规则放在会员核心中(包含错误三次以上删除校验码,一分钟只能发送一次等规则),具体影响验证找回密码申请、手机绑定、手机解绑、激活增加登录号、注册时的激活等业务。这是事前有pa、pd、网站前台、会员核心几方在一起商定的。 由于这些工作本不在个人版项目的范围之内,测试决定在sit回归的情况下测试老前台,以防止验证码部分...
2009-08-11 15:35:44
100
大道至简与过度设计
前段时间,由于系统需要扩展一下发送事件通知,一个服务可以发送多个通知,而且通知里需要有一些逻辑判断。冥思苦想后,在抽象模板方法中增加了一个扩展点,又通过interceptor拦截服务的方法名,当时还在为自己高深的设计窃喜。1. 找了一位同事帮我review下代码。大概1分钟之后,给出的评价是设计比较抽象,太复杂了。回头好好想了想,软件系统中的设计是干嘛的?搞的那么花花稍稍,真的可以通过花哨...
2009-07-30 14:01:45
134
可伸缩性的艺术(2)
本来翻译出来想放在技术部知识库上的,担心太烂被人拍死,放在javaeye吧,欢迎斧正:) 原文地址http://www.hfadeel.com/Blog/?p=122可伸缩性的艺术(2)我打算写两至三篇关于可伸缩性的文章。其中第一篇文章叫做‘可伸缩性原则’——介绍可伸缩性的概念及其原则,接下来我会介绍可伸缩性模式、相关反模式以及一些指南。我们现在开始吧!Go to : 第一篇-...
2009-07-26 16:41:28
176
可伸缩性的艺术(1)
本来翻译出来想放在技术部知识库上的,担心太烂被人拍死,放在javaeye吧,欢迎斧正:)原文链接:http://www.hfadeel.com/Blog/?p=120 可伸缩性的艺术(1)我打算写两至三篇关于可伸缩性的文章。其中第一篇文章叫做‘可伸缩性原则’——介绍可伸缩性的概念及其原则,接下来我会介绍可伸缩性模式、相关反模式以及下一篇文章准备介绍的一些可伸缩性准则。我们现在开始吧...
2009-07-26 16:36:25
213
重读martin大师的《重构--提高既有代码的设计》第一章
重新翻了这本圣经级的关于重构的书籍,把第一章关影片租赁的例子在eclipse里重构了一把,总结一下用到的重构原则: 1. extractMethod 本例将switch和ifesle2个计算影片价格和计算影片积分的代码段提取出来,专门放入一个小方法中。其实提取出来的每一个方法都应具有一个明确的业务意义。所以欲所重构,必先熟悉业务,否则没有办法提取出小方法。 2. 代码代码命名rename和...
2009-07-26 14:45:19
169
如何重构可以不影响到正常业务的进行?
昨天主管和我review了Q2的kpi 主管:你觉得你写的代码怎么样?我:感觉一般,看了程立写的代码,是种享受,和其比起来,差距还很大。其实大部人程序员都是以最小代价完成布置的任务,完成的代码。我完成了任务,胡总你可能只关心功能,又不知道我的代码质量如何。还是看自己的责任心和时间吧,有时间也许会不断重构自己的代码,但有些自己也有些惰性。 主管:前段时间,我找程立看了下你在企业版...
2009-07-25 13:49:28
371
一些实用命令
1.windows下的删除还在为windows下删除大文件夹的弹出框烦恼吗?这里有个cmd下的rd命令,系统会在后台自动删除,免除弹出框的烦恼用法: rd /s /q 文件夹名称 2.linux下删除rm -rf * 3.linux下的rz和sz命令rz(receive):上传文件到linux服务器sz(send):从linux服务器下载文件到本地 4...
2009-05-26 11:05:45
101
原创 架构师书单 2nd Edition zz
作者:江南白衣,原文出处: http://blog.csdn.net/calvinxiu/archive/2007/03/06/1522032.aspx,转载请保留。 为了2007年的目标,列了下面待读或重读的书单。 "其实中国程序员,现在最需要的是一张安静的书桌。",的确,中国架构师大多缺乏系统的基础知识,与其自欺欺人的宣扬"读书无用,重在实践变通,修身立命哲学书更重要",把大好时...
2008-07-15 18:04:12
110
转载 ant教程详解--javac,java,jar,war,delete,copy,mkdir,move等指令 zz
原文地址:http://tech.it168.com/j/2007-11-09/200711091344781.shtml 本文请勿转载! Ant是一个Apache基金会下的跨平台的构件工具,它可以实现项目的自动构建和部署等功能。在本文中,主要让读者熟悉怎样将Ant应用到Java项目中,让它简化构建和部署操作。一. 安装与配置下载
2007-12-21 01:19:00
11151
1
转载 漫谈应用缓存的命中率问题 zz javaeye
这篇文章源自于: http://www.javaeye.com/topic/77195 其中很多人谈到了缓存命中率的问题,应用缓存的命中率取决于很多的因素: 1、应用场景 是OLTP还是OLAP应用,即使是OLTP,也要看访问的频
2007-12-15 03:00:00
868
转载 为什么ORM性能比iBATIS好? zz javaeye
缓存是有很多层次的,有web server前端缓存,有动态页面静态化,有页面片断缓存,有查询缓存,也有对象缓存。不同层面的缓存适用于不同的应用场景,作用也各自不同,如果可以,你全部一起用上,他们不矛盾,但这个话题比较大,现在不展开谈。 针对OLTP类型的web应用,只要代码写的质量
2007-12-15 02:36:00
1022
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人