以前面试的时候,总被面试官问及性能调优的问题,今天按我的理解总结一下。 \r\n性能调优牵扯的地方很多,具体要根据实际项目应用入手,大体上分下面几个方向:\r\n\n硬件 硬件扩容,投入很多 \r\n软件 \r\n\n\njava\r\n\n\r\njava调优一般是指参数调优,代码方面尽量用工厂模式,特别对于一些大的对象,gc回收会很耗时间,这点effective \r\njava里讲了很多。多使用jdk自带的工具类,多...
以前面试的时候,总被面试官问及性能调优的问题,今天按我的理解总结一下。
性能调优牵扯的地方很多,具体要根据实际项目应用入手,大体上分下面几个方向:
硬件 硬件扩容,投入很多 软件
java
java调优一般是指参数调优,代码方面尽量用工厂模式,特别对于一些大的对象,gc回收会很耗时间,这点effective java里讲了很多。多使用jdk自带的工具类,多线程方面可以考虑util下面的concurrent集合包。GC回收一般是回收堆里的数据,堆分 new区,old区,静态方法区,对于频繁生成对象的项目可以把new区设置的大一些,对对象变化不大,设置old区大一些。垃圾回收方式分串行,并行, 并发,要根据项目紧急程序选择。最后还要分析gc回收日志,可以利用jdk自带的工具,像jstack.jmap,jconsole等,还可以使用 jprofiler,这个很强大,不过是收费的。
大表尽量少关联,提前对表analysis,分表分区,大表要建索引,查询数据尽量走索引,减少full table 的查询,对于必须要进行的大表关联,可以提前一天生成view 。定期对索引重建 。
架构方面一般是:
DNS IP段分发:有效的分发请求。
LP:软件负载通过现有的工具取余或者轮询等,硬件F5负载,听说新浪是通过这个实现的。
动静分离:配合apache静态文件搞笑支持,可以让中间件更好的的处理动态内容。
读写分离:配合缓存能加大关键字命中率 。
水平分库:表数据过多可以根据关键字分区。
垂直分库:有些数据不是很长用,但是占用的字节又很多,可以分割一下,等使用的时候再关联,这样可以减少查询时间,看过robbin的文章,iteye也经历过这个过程。
分布式存储:业务分离,跨平台,更好的利用外部资源。
缓存:能够大幅度降低DB IO的次数。
缓存一般分:
页面缓存:多存储一些图片 js css等静态的东西
服务器缓存:自定义比较多,使用一些现有的集合框架,像MAP List等等存储在session中
数据库缓存:oracle等自带
专用缓存: memcache,OSCache等
专用缓存位于服务器与数据库之间,如memcache,它是单线程,根据字节长度把内存划分为不同的段,这样虽然会降低内存利用率。但是会很高的提高数据命中率,查询复杂度为O(1).
本站主要用于日常笔记的记录和生活日志。本站不保证所有内容信息可靠!(大多数文章属于搬运!)如有版权问题,请联系我立即删除:“abcdsjx@126.com”。
QQ: 1164453243
邮箱: abcdsjx@126.com