KNOWEDGE+SOLUTION
java开发性能调优
//www.toadstooLcomics.com
 

从总体上来看,关于大型网站,比方门户网站,在面临很多用户拜访、高并发恳求方面,底子的处理方案会集在这样几个环节:
1.首要需求处理网络带宽和web恳求的高并发,需求合理的加大服务器和带宽的投入,而且需求充沛的k8凯发官方app运用体系中软件、硬件的缓存机制,将能缓存的内容都进行缓存存储,削减核算层和存储层的压力。


2.其次需求对事务服务器和事务支撑服务器进行合理的分层,而且选用并行核算和散布式算法对很多核算进行处理,而且在开发的进程中需求选用java sdk中并发包进行编码完结。

3.存储层需求选用散布式文件服务器和列式的存储服务器进行构建,支撑海量数据的寄存和读取,而且还要对联系型数据进行深层次的装备参数优化。

4.咱们还需求清楚的认识到,将来依据体系运转的状况以及平台中不同的事务场景按部就班的进行调整和优化。

关于大型体系来说,选用的技能是涉及面十分广,从硬件到软件、编程言语、数据库、webserver、防火墙等各个范畴都有了很高的要求。在面临很多用户拜访、高并发恳求方面,底子的处理方案会集在这样几个环节:将会运用高功能的服务器、高功能的数据库、高功率的编程言语、还有高功能的web容器。可是除了这几个方面,还无法底子处理面临的高负载和高并发问题,所以需求将核算和负载的压力分载到每个核算机上,运用不同的服务器集群机组进行散布式和并行核算,面临所发作的压力。

详细每个环节的一些常用手法:

一、运用服务器负载均衡 
1、链路负载均衡 
经过dns解析域名时,将客户端的拜访解析成不同的ip,分配到不同的进口,一起尽或许确保所拜访的进口是一切进口中或许较快的一个。 
2、软件负载均衡 
拜访时生成页面的使命会被分配给其间一台服务器完结,这个进程要确保公正、公正、均匀。软件四层交流咱们能够运用linux上常用的lvs来处理,lvs便是linux virtual server。 
3、硬件负载均衡 






第四层交流运用第三层和第四层信息包的报头信息,依据运用区间辨认事务流,将整个区间段的事务流分配到适宜的运用服务器进行处理。在第四层交流中的运用区间则由源端和终端ip地址、tcp和udp端口一起决议。在硬件四层交流产品范畴,有一些闻名的产品能够挑选,比方alteon、f5等。

最新:cdn加速技能。cdn的全称是内容分发网络。其意图是经过在现有的internet中添加一层新的网络架构,将网站的内容发布到最接近用户的网络 边际 ,运用户能够就近获得所需的内容,进步用户拜访网站的响应速度。

二、图片服务器别离

关于web服务器来说,不管是apache、iis仍是其他容器,图片是最耗费资源的,所以咱们有必要将图片与页面进行别离,这是底子上大型网站都会选用的战略,他们都有独立的、乃至很多台的图片服务器。这样的架构能够下降供给页面拜访恳求的服务器体系压力,而且能够确保体系不会由于图片问题而溃散。在运用服务器和图片服务器上,能够进行不同的装备优化,比方apache在装备contenttype的时分能够尽量少支撑、尽或许少的loadmodule,确保更高的体系耗费和履行功率。


三、页面优化 
1、削减恳求次数 
经过兼并css和javascript文件来削减恳求次数或是将资源文件散布在多个域名下来绕过浏览器并发加载的约束。 
2、紧缩css和javascript代码。 
经过对文件代码内容删去换行和空格来削减代码存储空间。 
3、优化图片 
经过对图片进行截取和缩放巨细来优化图片,加速图片加载速度。 
4、html静态化 
运用freemarker将数据库数据静态化成html文件来进步拜访速度。适用场合:关于含有不要求实时性的内容的网页可运用,如网站主页,各模块主页的新闻,布告等等。 

四、java规划优化 
1、规划形式 
单例形式、署理形式、享元形式、装修者形式、观察者形式。 
2、缓存 
如:运用ehcache能够结合aop,做事务层的办法缓存,以类名、办法名、参数名作为key,成果方针作为value。适用场合:对数据不常常更新,查询办法比较固定。 
3、缓冲 
如:jdk的io包中bufferedwriter 
4、多线程 
适用场合:群发邮件,大批量处理图片,写日志。典型的顾客生产者形式 
5、方针池 
如:数据库衔接池c3p0、线程池executors、apache的方针池jakarta commons pool 
6、散布式缓存 
散布式缓存结构terracotta,可完结散布式session、ehcachc等同享。 

五、java程序编码优化 
1、string 
string的replace、substring办法会有内存走漏问题,用stringtokenizer替代split办法,charat办法替代startswith、endswith办法,stringbuilder替代string并初始化预估的capacity。 
2、list 
查询优先运用arraylist,刺进删去优先运用linkedlist。假如刺进数据在数组最终一位,则arraylist功能好于linkedlist。






























遍历完结了randomaccess接口的调集功能由高到低顺次排序:索引下标 迭代器 增强for 
3、map 
map方针里key值的hashcode办法决议调集的功能。 
4、优化调集拜访代码 
创立调集方针时,初始化预估的capacity可进步功能。尽量运用内部元从来替代办法调用。 
5、nio 
运用mappedbytebuffer来替代传统io来进行文件读写。 
6、引证 
在恰当时分缓存能够用弱引证或是软引证来完结,如:weakhashmap。 
7、反常 
尽量防止在循环体内运用反常捕获。 
8、位运算替代乘除运算

六、数据库优化 
1、分表 
经过对记载id取模或时刻维度的规矩进行分表。 
2、分区 
oracle数据库支撑分区,能够依据某个列的数据规矩进行分区。 
3、中心表 
将原数据依据想得到的方针数据进行一系列的处理做出一套中心表,直接从中心表中进行查询,经过守时调度守时更新中心表。适用场合:对数据内容实时性要求不高,如:数据剖析。 
4、前史归档 
可依据时刻整理出很少用到的数据集抽到前史表中,数据表只留常用数据,能够运用方针序列化反序列化来完结。适用场合:对前史数据很少拜访。 
5、列式存储 
mysql开源数据仓库infobright,对高紧缩比数据存储,查询速度可进步5~60倍,免费版不支撑dml句子,不支撑高并发,只能支撑10多个并发查询,可经过load导入csv数据文件。适用场合:对数据不常常更新而且实时性要求不高,如:数据剖析。 
6、查询缓存 
mysql query cache,oracle result cache,可经过修正数据库装备文件来完结查询缓存,sql句子作为key,成果作为value的缓存办法,当数据表发作改动时相应的cache就会失效。适用场合:对数据不常常更新,查询办法比较固定。注:支撑表衔接,但不支撑函数 
7、建索引 
关于运用较杂乱的sql,对大数据量表查询时分,可选用建索引的办法,将涉及到的查询条件字段,可进步查询速度。 
8、sql优化 
sql句子中,select后尽量清晰字段名来替代*来削减查询列。尽量少运用in关键字,可经过left join和exists关键字替代。 
9、存储进程 
存储进程只需编译一次,适用场合:当对数据库进行杂乱操作时。如:多表的查询,核算,更新。 
10、数据库服务器集群,读写别离。 

七、jvm调优。 
1、确认堆内存巨细。 
2、合理分配新生代和老时代。 
3、确认永久区巨细。 
4、挑选废物收集器、对废物收集器合理设置。 
5、禁用显现gc。 
6、禁用类元数据收回。 
7、禁用类验证。 
8、jvm添加内存参数-xms256m -xmx1024m  -xx:maxnewsize=512m -xx:maxpermsize=512m 

七、需求上处理:假如功能瓶颈的模块的需求是可有可无,能够考虑屏蔽掉此需求。 

八、功能调优东西 
1.jmeter、loadrunner:功能测验、压力测验。 
2.jconsole、jprofiler:监控堆信息、线程、永久区运用状况、类加载状况等。 
3.visual vm:故障诊断、功能监控。


















































CONTACT
工作时间(Working Hours):周一至周五(Mon-Fri): 9:00-18:00 周末及节假日(Weekend & Holidays): 9:00-12:00
ADDRESS: 广东省湛江市开发区金地花园11栋

E-MAIL:13030199666@qq.com
PHONE: 13030199666
QQ: 13030199666

LEAVE A MESSAGE
You can say something,or design service and consulting