- 浏览: 1051978 次
- 性别:
- 来自: 郑州
文章分类
- 全部博客 (605)
- 数据挖掘 (22)
- spring (40)
- 工具使用 (39)
- java (137)
- JavaScript (40)
- webwork (12)
- web (120)
- 资源 (7)
- SSH (5)
- oracle (20)
- J2ME (1)
- 环境配置 (37)
- 项目管理 (29)
- mysql (14)
- struts (4)
- 项目总结 (27)
- ibatis学习 (33)
- 学习计划 (2)
- 缓存 (7)
- 重构 (3)
- Android (1)
- jquery (12)
- UML (3)
- 用户体验 (4)
- 习惯 (7)
- sakai (1)
- urlrewrite (4)
- rss (5)
- C plus plus (5)
- 算法 (5)
- 海量数据处理 (7)
- office(word、excel) (1)
- 面试题 (3)
- solr (8)
- 大数据 (2)
最新评论
-
hujin19861102:
截图看不见,最后一个webwrok的配置看不见
Ext+Webwork+Json 实现分页表格查询效果 -
蜗牛笔:
弱弱的问一句,要是分出来的词在词典中没有,那么两部分的pos- ...
ICTCLAS 中科院分词系统 -
weipeng1986:
授人予鱼不如授人予鱼,我想问你的是你是怎么总结的。比如第四种情 ...
JAVA中字符串连接效率的测试 -
xiaoqiang2008:
执行两次的原因是什么,好像楼主没弄清楚啊!是不是在web.xm ...
关于Spring中用quartz定时器在定时到达时同时执行两次的问题 -
Kent_Mu:
...
ibatis-dynamic的用法
前两天跟同事讨论,说到高并发系统如何做优化,提到这个问题,他说他有些茫然,有点不知道该如何下手。
我想了想这几年做的各种系统优化工作,正好也简单总结一下,总结起来就是:一个核心,N种手段。
一个核心就是:多、快、准。
N种手段就要围绕上面的核心做的各种处理。
上面这个核心字多点说也就是:更多用户访问、更短响应时间、数据正确性。
优化的过程,我的想法就是先顺藤摸瓜,沿着一个请求发生的路径一路看过去,测量一下每个点上消耗的时间,会发现很多消耗时间多的点,都是值得你去优化的地方。然后再考虑在每个点上发生了拥挤导致响应时间变长了又该怎么解决。
当然也不需要一上来就全面优化,连影响最小的地方也不放过。先优化对你的性能影响最大的地方,效果是最好的,解决主要矛盾才是关键。不同的情况下,会有不同的优化方式。
简单地来看一个浏览器用户访问的流程:
浏览器->服务器->返回结果显示
这么简单地看,可能想得到的优化手段很少,常见的可能就是优化sql,加快数据库处理;加个缓存,加快返回;使用静态文件,减少动态计算。
细分开来看每一个步骤:
1 浏览器发起一个请求,如果本地有缓存会请求本地缓存文件,没有缓存会请求服务器。所以这里就有一个优化点:需要把常用的css和js文件独立成独立的静态文件,一次加载以后,后面直接加载本地缓存。另外IE浏览器内核在请求图片下载时会限制一次只能同时从同一个域名下载两个文件,这里又有优化点,分散图片存储的域名。使用静态文件,减少计算的同时增加本地缓存的使用,减少请求。静态化是常见的一种优化手段。
2 浏览器真实发起请求服务器时,首先被请求到的是服务器的操作系统层,那么服务器的操作系统对外界连接的响应能力,就是你需要了解的东西了。比如linux的内核参数的调整如何影响最大连接数,简单的一个例子就是在一个默认最大文件句柄数只有1024的服务器上,超过这个压力的时候,你如何优化你的程序,也都没有意义。入口只有那么窄,你得把口给扩开。熟悉服务器的性能,调优系统内核也是一个必要的手段。
3 系统层再把连接交给你的server做处理的时候,server的配置这个时候也相当重要。比如apache的最大连接数,tomcat的最大连接数。对server的配置调优很影响性能。比如tomcat在处理静态文件上的能力比apache要差很多,所以在apache+tomcat的负载均衡就能很好地进行动静请求的分离,提高响应速度。又比如tomcat新版本里的NIO技术又比普通IO性能好上不少。对server的了解,要保持跟踪最新动态。
4 server再把数据交给你的程序处理的时候,就到了考验你编程能力的时候了。你得对你的程序的执行效率非常清楚。必须保证每个响应都在尽量短的时间内执行成功。还有比较常见的一些对不常更新的数据使用内存缓存来加快访问。内存永远是最快的。这方面的优化也有非常非常多的事情可以去做,而且跟你的编程息息相关。
5 程序处理的时候,数据库连接池的使用,连接池大小的配置,连接池性能的优化,sql语句的优化,等等都可能影响你的程序的效率,这些地方永远是值得关注的。当然,优秀的算法在这个地方是少不了的。一个好的业务逻辑设计,可能极大提升你的程序性能。对数据库操作的调优也是一个永远的话题。
6 数据传递到数据库进行保存和查询的时候,你就必须对你的数据库的使用有所了解,知道数据库本身的哪些配置可以优化从而带来性能的提升。一个简单的例子就是在内存足够大的时候,增大mysql的内存缓存就可以极大提升它的响应速度。
7 现在server把数据返回给用户了,那么返回的数据的大小又同样影响着结果的显示速度。尽量减小数据的大小,比如开启apache的gzip就能极大压缩常见的静态文件,可以保证用户更快完出数据的下载,同时节省你的服务器使用带宽,老板一定会很高兴的。
8 用户下次访问的时候,同样面临一个优化的方式:是利用上次跟服务器建立好的连接再次通讯呢?还是重现跟服务器建立连接?这就是在server端做配置要考虑的一个问题,在低并发下,保持跟用户建立的socket连接,并且让用户通过这个连接来多次访问,可以提高速度。但是在高并发下,大量这种建立好的连接就意味着其他用户失去了进来的机会。所以这个是需要权衡的。一般情况下最好可以预估一下一个用户可能在多长的时间里连续发起多少个请求,然后可以把用户断开,把资源用来服务其他用户。
9 ajax技术也是在减少大请求,使用更小的局部数据更新来代替整个页面的刷新,加快用户的响应速度,结合静态化能完美改善性能。
这是对一个用户的访问的时候的考虑,然后就要考虑多用户情况的问题(有些是上面提到过的):
1 操作系统对多用户访问时的一些限制的优化
2 server的并发量的优化
3 多用户并发下,更多地要仔细考虑程序在数据操作的并发上的问题。比如对象的锁,数据库的锁,事务,等待处理的数据的排队方式等等。你需要知道读写分离的好处,应该隔离不同操作间的等待。另外并发带来的锁等待问题需要极大地关注,往往不是在内存就是在数据库里,发生着大量并发锁等待,导致你的程序缓慢。
4 对数据库的锁的机制必须深入了解,比如mysql不同引擎的带来的锁表和行级锁对性能的影响。同时要在自己的逻辑处理上要控制好不同用户同时操作的问题,时刻要绷紧这个弦。多数据集群,读写分离等等机制也是需要深入了解的。
以上是我一些简单的零碎总结,并不全面,也不细致,主要想表达一个思考的过程。不在于你都学会了什么,发现问题,研究问题,解决问题的能力,才是最重要的。
其实每一个点上,基本上你都可以找到N多牛人写的很牛很细致的书来讲具体怎么优化的,需要的时候可以好好去找书来研究一下。
深入去了解每一个点上的优化,你会发现,互联网的魅力真的是奇妙无穷!
发表评论
-
fork/join框架
2017-03-09 11:03 498http://blog.csdn.net/ye1992/art ... -
protobuffer
2017-03-09 10:54 695http://blog.csdn.net/antgan/art ... -
整理上传代码容易忽略的注意事项
2013-08-31 11:28 1161每个公司都有自己的代码代码上传流程:如果打包发布的话,是不存 ... -
mysql版本升级引发的问题
2013-05-16 15:25 1655问题描述: 1. ibatis 中 mysql语 ... -
网站的记住密码功能设计
2013-02-27 19:09 1309http://greenyouyou.blog.163 ... -
大型网站架构演变之路
2013-02-27 19:08 1147http://www.cnblogs.com/ivanjack ... -
使用Filter统计Java(J2EE)的web程序http请求响应时间
2013-02-27 19:07 1389http://www.cnblogs.com/ivan ... -
java bean与xml相互转换
2013-02-06 10:27 2050最近在做的项目,在各个平台之间需要大量传输数据,且结构比较 ... -
java 反射
2013-01-14 18:21 830http://www.cnblogs.com/rollenh ... -
字符串替换
2012-12-17 11:17 1160高效的字符串模式替换实现效果如下 String str ... -
httpURLConnection获取网络数据:XML格式返回与Json格式返回
2012-12-15 16:57 149251.服务器端代码样例: public class ... -
利用Freemarker实现表到功能界面的一键生成
2012-11-22 18:03 1020利用Freemarker实现表到功能界面的一键生成 h ... -
ibatis in ##的问题
2012-11-02 13:25 854http://www.hake.cc/a/biancheng/ ... -
ibatis缓存强制刷新与命中率
2012-10-19 19:06 1393缓存强制刷新: // spring注入 private Sq ... -
eclipse 的一些设置
2012-08-16 22:06 17611. 控制台信息太多,程序跑完后只能保留最后的一部分之前的 ... -
jdk1.5 System.arraycopy与jdk1.6 中Arrays.copyOf()&Arrays.copyOfRange()
2012-08-16 21:56 3288在JDK1.5的类System类中有方法 ... -
Eclipse报Java heap space错误的解决方案
2012-08-16 16:43 12073当运行大数量的数据时: (1) 如果是java 应用程 ... -
求两个字符串的最大公共字符串
2012-08-10 20:41 1065http://blog.csdn.net/wangcj625/ ... -
ffmpeg 截取视频 播放中的图片
2012-06-19 09:14 1315http://www.cnblogs.com/live365w ... -
memcached 项目中的使用
2012-06-13 09:29 1067http://ljh2008.iteye.com/blog/6 ...
相关推荐
需要注意的是,在进行系统优化之前,建议用户备份重要数据,以防万一。 总的来说,神州网信系统优化v0.1.2是一款实用的系统维护工具,它以用户需求为导向,通过智能化的优化策略,帮助用户解决系统性能下降的问题,...
Deepin XP 模式优化工具定位于...可以在不影响正常使用的情况下帮助用户快速进行系统优化,同时,能够自动判断内存大小优化系统参数(对256M以下系统内置特别优化参数),上网痕迹清理、IE故障修复和快速垃圾文件清理。
"小鱼儿yr系统封装优化设置辅助工具V2.10.3"是一款专为Windows 11设计的封装工具,它能够帮助用户高效地进行系统优化和设置,以便快速创建适合不同应用场景的系统镜像。 首先,我们需要理解什么是系统封装。系统...
3. **备份重要数据**:在进行系统优化之前,尤其是涉及到注册表清理或磁盘整理时,一定要备份重要数据,以防意外丢失。 4. **了解每个命令的作用**:对于不熟悉的命令,建议在运行前进行学习,了解其功能和可能产生...
例如,在云计算环境中进行系统优化时,除了要关注计算效率和存储成本外,还需考虑到网络传输速率、数据安全性和用户体验等因素,这往往需要跨学科团队的协作与创新思维。 ### 应用实例 #### 非线性优化 非线性...
"系统优化工具.rar"这个压缩包文件提供了一种批处理(Batch)解决方案,帮助用户进行系统优化。 批处理是一种在DOS或Windows操作系统中执行一系列命令的脚本方式。SMOpti.bat文件很可能就是一个批处理脚本,包含了...
HD2V5系统优化是一个针对特定型号或系列的硬件设备,可能是电脑或其他电子设备的系统优化工具。"HD2"可能代表硬件的型号或者版本,而"V5"则...在进行系统优化之前,最好创建系统还原点,以便在出现问题时可以轻松回滚。
进行系统优化时,需谨慎对待每个键值的修改,因为错误的操作可能导致系统不稳定甚至崩溃。因此,建议在修改前做好备份,并确保了解每个键值的作用。对于初学者,可以借助一些专业的系统优化工具,它们通常会提供友好...
这款软件以简洁的操作界面和高效的功能为特点,让用户无需专业知识即可轻松进行系统优化。 该工具的核心功能包括: 1. **智能系统分析**:一键系统优化能够自动检测并分析用户的Windows系统,识别出可能导致系统...
下面将详细介绍这款软件的工作原理、功能以及如何利用C语言进行系统优化。 一、C语言在系统优化中的应用 C语言作为一种底层编程语言,因其高效、灵活的特点,常被用于系统级别的开发。在系统优化中,C语言能够直接...
9. **备份与恢复**:在进行系统优化前,最好备份重要数据,以防意外情况导致数据丢失。同时,一些工具可能提供系统还原点的功能,方便在优化后出现问题时恢复到优化前的状态。 10. **自定义设置**:优秀的系统优化...
使用优化大师进行系统优化时,应遵循适度原则,避免过度优化,因为某些系统设置的改变可能会影响特定程序的运行。同时,定期更新软件,获取最新的优化技术和修复补丁,以保持最佳效果。 总的来说,"优化大师"是一款...
在IT领域,系统优化是一个广泛讨论的话题,尤其...在使用时,用户应注意定期进行系统优化,并根据个人需求调整优化设置,以达到最佳效果。同时,为了确保数据安全,建议在进行任何优化操作前,都先备份重要的个人文件。
然而,随着岁月的流逝,XP系统可能会出现运行缓慢、资源占用过高、启动时间过长等问题,这时就需要进行系统优化来提升其性能。 "WINXP服务优化.bat"文件是一个批处理文件,通常用于自动化执行一系列命令,例如关闭...
在电力系统优化规划中,首要任务是对电力系统的各种组成部分进行合理配置,包括发电厂的位置选择、容量设定、输电线路的设计等。这些都需要考虑到经济效益、环境影响、供电可靠性等多种因素,形成一个多目标的复杂...
根据文档的概述,文件系统优化涵盖了多个方面,包括但不限于: 1. 文件系统的类型选择:不同的文件系统拥有不同的特性,如ext3/ext4是广泛使用在Linux系统上的文件系统,提供了良好的性能和兼容性;BTRFS(B-Tree ...
总的来说,Win7服务优化大师提取版是针对Windows 7用户的一款实用工具,它简化了服务管理过程,使普通用户也能轻松进行系统优化,提升电脑的运行速度。不过,为了确保系统的稳定运行,建议在进行任何优化操作之前,...
6. **系统还原点创建**:在进行系统优化前,自动创建系统还原点,若优化后出现异常,可以快速回滚到优化前的状态。 7. **网络优化**:调整网络设置,优化网络连接,提升上网速度和稳定性。 8. **硬件信息查看**:...
"龙族系统优化一条龙"是一个专门针对计算机系统进行优化的工具包,主要通过批处理(.bat)文件的形式实现。批处理文件是一种基于DOS命令的脚本文件,它可以自动执行一系列操作,简化用户对系统的调整过程。在这个...
然而,使用任何系统优化工具时都应注意,不恰当的操作可能会对系统造成负面影响,因此在进行深度优化或修改系统设置前,最好先备份重要数据,并确保下载的工具来自可信赖的源。同时,保持操作系统和应用程序的更新也...