欧易

欧易(OKX)

国内用户最喜爱的合约交易所

火币

火币(HTX )

全球知名的比特币交易所

币安

币安(Binance)

全球用户最多的交易所

浅谈数据库、JVM、缓存、SQL等性能调优方法和原则

时间:2022-10-10 18:09:13 | 浏览:363

性能优化基本是BAT等一线互联网公司程序员必备的技能,以下为大家完整揭晓性能完整的优化方案和方法:包含web网站调优、数据库、JVM调优、架构调优等方案。第一:Web网站调优1、尽可能减少HTTP请求:图片合并 (css sprites),

性能优化基本是BAT等一线互联网公司程序员必备的技能,以下为大家完整揭晓性能完整的优化方案和方法:包含web网站调优、数据库、JVM调优、架构调优等方案。

第一:Web网站调优

1、尽可能减少HTTP请求:图片合并 (css sprites),Js脚本文件合并、css文件合并。

2、减少DNS查询

3、将css放在页面最上面,将js放在页面最下面

4、压缩js和css

减少文件体积,去除不必要的空白符、格式符、注释(即对代码进行格式化)

5、把js和css提取出来放在外部文件中

这一条要灵活运用,把js和css提取出来放在外部文件的优点是:减少html体积,提高了js和css的复用性,提高日后的可维护性

缺点:增加了http请求,不过这一点可以通过缓存来解决。

什么情况下将js和css写在页面内呢,可以分为几种情况:js和css代码比较少;这个页面不怎么会访问

6、避免重定向

重定向就是用户请求的页面被转移到了别的地方,浏览器向服务请请求一个页面,服务器告诉浏览器请求的页面已经被转移到另外一个页面,并告知另一个页面地址,浏览器就再发送请求到重定向的地址。这样会增加服务器和浏览器之间的往返次数,影响网站性能。

重定向状态码有:301永久重定向 302临时重定向。304 not modified 并不是真的重定向,它是用来告诉浏览器get请求的文件在缓存中,避免重新下载。

7、移除重复脚本

8、使用ajax缓存

ajax的get和post方法:

只要是浏览器的get请求,浏览器都会使用缓存,对于同一地址的请求,服务器会发送304状态码到浏览器,浏览器就会使用缓存中的数据

post的请求每次都会被执行,浏览器不会缓存

9、使用Gzip压缩

10、使用CDN(内容分发网络)

第二:数据库调优

数据库的调优,总的来说分为以下三部分:

1.SQL调优:主要集中在索引、减少跨表与大数据join查询等。

2.数据库端架构设计优化:

通过读写分离调整对数据库的写操作,通过垂直拆分以及水平拆分(分库分表)来解决数据库端连接池瓶颈等问题。

3.连接池调优

可以通过熟悉连接池的原理,以及具体的连接池监控数据,来不断调试出最终的连接池参数。

第三:通过缓存减少后端压力

目前分布式缓存已经比较成熟,常见的有redis、memcached以及开源的淘宝分布式tair等。

选型考虑

如果数据量小,并且不会频繁地增长又清空(这会导致频繁地垃圾回收),那么可以选择本地缓存。具体的话,如果需要一些策略的支持(比如缓存满的逐出策略),可以考虑Ehcache;如不需要,可以考虑HashMap;如需要考虑多线程并发的场景,可以考虑ConcurentHashMap。

缓存是否会满,缓存满了怎么办?

对于一个缓存服务,理论上来说,随着缓存数据的日益增多,在容量有限的情况下,缓存肯定有一天会满的。如何应对?

① 给缓存服务,选择合适的缓存逐出算法,比如最常见的LRU。

② 针对当前设置的容量,设置适当的警戒值,比如10G的缓存,当缓存数据达到8G的时候,就开始发出报警,提前排查问题或者扩容。

③ 给一些没有必要长期保存的key,尽量设置过期时间。

第四:数据请求改造为异步

使用场景

用户并不关心或者用户不需要立即拿到这些事情的处理结果,这种情况就比较适合用异步的方式处理,这里的原则就是能异步就异步。

常见做法

一种做法,是额外开辟线程,这里可以采用额外开辟一个线程或者使用线程池的做法,在IO线程(处理请求响应)之外的线程来处理相应的任务,在IO线程中让response先返回。

如果异步线程处理的任务设计的数据量非常巨大,那么可以引入阻塞队列BlockingQueue作进一步的优化。具体做法是让一批异步线程不断地往阻塞队列里扔数据,然后额外起一个处理线程,循环批量从队列里拿预设大小的一批数据,来进行批处理(比如发一个批量的远程服务请求),这样进一步提高了性能。

另一种做法,是使用消息队列(MQ)中间件服务,MQ天生就是异步的。

第五:JVM调优

什么时候调?

通过监控系统对一些机器关键指标(gc time、gc count、各个分代的内存大小变化、机器的Load值与CPU使用率、JVM的线程数等)的监控报警,也可以看gc log和jstat等命令的输出,再结合线上JVM进程服务的一些关键接口的性能数据和请求体验,基本上就能定位出当前的JVM是否有问题,以及是否需要调优。

调优工具:

Jconsole,jProfile,VisualVM

Jconsole :jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用。对垃圾回收算法有很详细的跟踪。详细说明参考这里

JProfiler:商业软件,需要付费。功能强大。详细说明参考这里

VisualVM:JDK自带,功能强大,与JProfiler类似。推荐。

如何调优?

观察内存释放情况、集合类检查、对象树

上面这些调优工具都提供了强大的功能,但是总的来说一般分为以下几类功能

堆信息查看

可查看堆空间大小分配(年轻代、年老代、持久代分配)

提供即时的垃圾回收功能

垃圾监控(长时间监控回收情况)

查看堆内类、对象信息查看:数量、类型等

对象引用情况查看

有了堆信息查看方面的功能,我们一般可以顺利解决以下问题:

--年老代年轻代大小划分是否合理

--内存泄漏

--垃圾回收算法设置是否合理

线程监控

线程信息监控:系统线程数量。

线程状态监控:各个线程都处在什么样的状态下

Dump线程详细信息:查看线程内部运行情况

死锁检查

热点分析

CPU热点:检查系统哪些方法占用的大量CPU时间

内存热点:检查哪些对象在系统中数量最大(一定时间内存活对象和销毁对象一起统计)

这两个东西对于系统优化很有帮助。我们可以根据找到的热点,有针对性的进行系统的瓶颈查找和进行系统优化,而不是漫无目的的进行所有代码的优化。

快照

快照是系统运行到某一时刻的一个定格。在我们进行调优的时候,不可能用眼睛去跟踪所有系统变化,依赖快照功能,我们就可以进行系统两个不同运行时刻,对象(或类、线程等)的不同,以便快速找到问题

举例说,我要检查系统进行垃圾回收以后,是否还有该收回的对象被遗漏下来的了。那么,我可以在进行垃圾回收前后,分别进行一次堆情况的快照,然后对比两次快照的对象情况。

内存泄漏检查

内存泄漏是比较常见的问题,而且解决方法也比较通用,这里可以重点说一下,而线程、热点方面的问题则是具体问题具体分析了。

内存泄漏一般可以理解为系统资源(各方面的资源,堆、栈、线程等)在错误使用的情况下,导致使用完毕的资源无法回收(或没有回收),从而导致新的资源分配请求无法完成,引起系统错误。

内存泄漏对系统危害比较大,因为他可以直接导致系统的崩溃。

性能调优总结:

大型网站的性能瓶颈大部分瓶颈都在数据库端,所以性能调优总是沿着如何减少对后端的压力来操作,数据库端的瓶颈经常会造成应用端的雪崩(比如:sql查询过长,长事务)等,所以需要及时解决后端性能。

1.通过读写分离、垂直拆分、水平拆分降低对数据库后端的压力。

2.通过优化sql语句,索引等,缩短对sql的查询时间。

2.通过缓存以及CDN来解决对图片、文件等的读操作,避免对数据库产生压力。

3.通过对web端的优化,js、css等压缩,提高大文件读取时间,尽量依赖CDN。

4.还有一个重点就是监控:对JVM、线程、sql查询时间等健康指标就行及时监控,通过监控及时发现瓶颈,及时优化。

相关资讯

数据库:什么是数据库,数据库管理系统,数据库系统,数据库管理员?

数据库 : 数据库(DataBase 简称 DB)就是信息的集合或者说数据库是由数据库管理系统管理的数据的集合。数据库管理系统 : 数据库管理系统(Database Management System 简称 DBMS)是一种操纵和管理数据库

数据库超详细讲解,MySQL数据库的简介、及常用数据库介绍

数据库简介数据库:顾名思义,就是数据的仓库,它是长期存储在计算机内,有组织的、可共享的数据的集合。数据库管理系统(DBMS: 用来对数据进行存储、管理等操作的软件)数据库分类数据库通常分为:层次式数据库、网络式数据库和关系式数据库三种。而不

什么是数据库DataBase?数据库和数据记录的概念简单讲解

大家好,在讲数据库之前,我用了很长的时间,和大家分享了很多VBA方面的一些知识点,其中很多是我个人对VBA的理解。从这讲开始我们要在原先的基础上深入的讲解一些VBA的提高利用,就是我们要开始讲解的数据库。在《VBA与数据库利用》中我会讲解到

数据库看这一篇就够了!MySQL、Redis、Mongodb等常见数据库教程

数据库是系统健康和用户行为健康的重要指标。数据库中的异常行为可能会引起应用程序中的问题。或者当应用程序中存在异常时,都可以使用数据库指标来帮助加快调试过程。先来认识下市面上常用的数据库:关系型数据库1. MySQL数据库2. Microso

为什么要使用数据库,什么是数据库

1、为什么要使用数据库持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。持久化的大多数时候是将内存中的数据存储在数据库中,当然也可以存储在磁盘文件、XML数据文件中。方便管理数据(例如:快速的检索等)2、什么是数

重塑数据库发展路径业界聚焦我国数据库产业发展

人民网北京12月27日电 (记者乔雪峰)近日发布的《软件和信息技术服务业十四五规划》中,明确提出我国“十四五”时期要加快实施国家软件发展战略,不断提升软件产业创新活力,聚力攻坚基础软件,有效满足多层次、多样化市场需求,为构建以国内大循环为主

常见的数据库类型及各种数据库特点的简单介绍

大家好,在上一讲中,讲了数据库的概念及表的概念,通过上讲的内容,我们大概了解了一些数据库的基本知识。其实,在我的日常生产中,数据库和我们也是息息相关的,当我们打电话、上网、去银行交易等等,都要访问不同的数据库,这些数据库各有自己的特点,但都

数据库篇-第一章:数据库基本概念

基础知识学习,面试必备,关注吧 骚年01 第一,什么是数据库?维基百科上是这样定义的:所谓“数据库”是以一定方式储存在一起、能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。一个数据库由多个表空间(Tablespace)

C++基础语法梳理:数据库!带你深入浅出了解数据库

基本概念数据(data):描述事物的符号记录称为数据。数据库(DataBase,DB):是长期存储在计算机内、有组织的、可共享的大量数据的集合,具有永久存储、有组织、可共享三个基本特点。数据库管理系统(DataBase Management

数据库指南:一文让你浅显易懂地了解数据库

在数据分析的技能中,数据库与SQL会是性价比最高的技能之一。数据库是逻辑上的概念,它是一堆互相关联的数据,放在物理实体上,是一堆写在磁盘上的文件,文件中有数据。这些最基础的数据组成了表(table),我们把它想象成一张Excel的sheet

数据库技术新版图-Serverless数据库

数据库的发展已走过近四十年,作为基础软件之一,数据库称得上是一个“古老”的领域。而随着新技术的涌现,这个传统的领域也正不断焕发出新的生机。如果说云时代的到来推动了数据库的变革,那么,与 Serverless 的结合,则再次为数据库的发展添了

什么是数据库?用最简单的方法讲明白数据库

数据库基本概念数据库是一个以某种有组织的方式存储的数据集合。数据库(database)是保存有组织的数据的容器。数据库管理系统(DBMS)是一种数据库软件,MySQL是一种DBMS,即它是一种数据库软件,作者使用的数据库管理系统是MySQL

一文读懂Access数据库,从此不用Access数据库

1992年11月,Microsoft Access 1.0版本发布。同时,这也是Access数据库,第一次进入大家的视野。起初,Access的原名并不叫Access,而叫Cirrus。Ciruus开发于Visual Basic之前,当时的窗

闲聊数据库发展历史三个阶段、分类、数据库规范及趋势

概述数据库(Database)是存储与管理数据的软件系统,就像一个存入数据的物流仓库。在商业领域,信息就意味着商机,取得信息的一个非常重要的途径就是对数据进行分析处理,这就催生了各种专业的数据管理软件,数据库就是其中的一种。当然,数据库管理

数据库行业研究报告:数据库,云化底座,百舸争流

(报告出品方/作者:中信证券,杨泽原、丁奇)报告综述:安全可控势在必行,数据库国产替代加速开展,以党政为代表的国产替代先行,并不断向金融、电信等领域拓展。同时,伴随云计算、大数据技术的快速发展, 云数据库、数据仓库、大数据分析等领域快速增长

友情链接

网址导航 SEO域名抢注宝宝起名网妈妈知道币圈今日大同松下冰箱评测网华硕电脑评测网韩国旅游攻略网海底捞折扣网龟峰山旅游攻略电视机品牌网美食菜谱网张艺兴歌迷网首尔旅游网海外移民资讯网人参养生网林氏家族取名网斯特拉斯堡旅游网柴蔚影迷网
MYSQL数据库应用网-mysql数据库基础知识、Mysql还原数据库、mysql数据库迁移方案、mysql数据库增删改查、mysql数据备份和恢复、mysql数据迁移工具、mysql数据库迁移详细步骤、mysql数据库存储目录迁移、mysql数据库不停机迁移方法、mysql数据备份和恢复、免费mysql服务器、mysql官网免费版安装教程。
MySQL数据库应用 nincu.cn ©2022-2028版权所有