一 前端性能优化
1.页面的HTTP请求数量
2.使用CDN网络
3.是否使用压缩,对于前段样式文件与脚本文件,可将其中空格、注释等不必要的字符去掉,并且通过使用gzip压缩来减少网络上传输的字节数。
二 java程序优化
1.使用单例,如饿汉
2.future编程
3.线程池。明明是多核CPU,但程序中却是用单线程串行操作,这种情况下可以将原来的串行操作改成多线程并发,以提高执行效率。
4.选择就绪。也就是使用NIO编程,代替阻塞IO能提高程序的并发吞吐能力,降低系统的开销。
5.减少上下文切换。程序在进行锁等待或者被阻塞时,当前线程会挂起。因此,如果锁的竞争激烈,或者线程频繁IO阻塞,就可能导致上下文切换过于频繁,从而增加调度开销,并且降低程序的吞吐量。
6.降低锁竞争。具体的就是synchronized锁从方法级降低,可以在具体方法内需要进行代码块同步的地方再加synchronized。
三 压缩
在进行数据传输之前,可以将数据进行压缩,以减少网络传输的字节数,提升数据传输的速度,
四 结果缓存
对于相同的用户请求,如果每次都重复地查询数据库,重复地进行计算,将浪费很多的时间和资源。将计算后的结果缓存到本地内存,或者是通过分布式缓存来进行结果的缓存,可以节约宝贵的CPU资源,减少重复的数据库查询或者磁盘IO,将原本磁头的物理转动变成内存的电子运动,提高应用的响应速度,并且线程的迅速释放也使得应用的吞吐能力得到了提升。
五 数据库的查询性能优化
1.合理使用索引。
2.反范式设计。将一些常用的需要关联查询的列进行冗余存储,以便减少表关联带来的随机IO和全表扫描。
3.使用查询缓存。通过修改配置文件来配置缓存的大小和阈值。
4.使用搜索引擎。
5.使用key-value数据库。将数据进行扁平化存储。
六 GC优化
通过GC日志能够看出一些端倪,包括minor gc的频率,full gc的频率,gc导致的停顿时间以及gc发生的原因等。可以通过这些信息来解决GC所导致的一些问题,已经对应用性能进行优化。
一般看日志就可以进行一些参数调节,比如方法区太小那就调方法区默认大小,如果想注重GC吞吐量或者是暂停时间,可以选用相应的垃圾收集器组合。
七 硬件提升性能
分布式缓存集群来说,希望内存越大越好。
磁盘IO选用SSD硬盘。
采用nginx软件负载均衡策略的网络节点来说,那网卡的吞吐能力就是性能的瓶颈。
多线程并发的时候更注重CPU的多核,越多越好。
https://www.liangzl.com/get-article-detail-16566.html
GC 日志解读
https://blog.csdn.net/renfufei/article/details/49230943
调优实战
https://blog.csdn.net/renfufei/article/details/61924893
https://blog.csdn.net/u012257955/article/details/75050893full
full GC 实战分析
https://blog.csdn.net/zawdd/article/details/50888430