简单聊聊数据库丨缓存丨JVM丨SQL等性能调试方法

原创 社长  2019-07-09 09:19:32  阅读 115 次 评论 0 条
重庆专业seo
摘要:

弟一:web网址调优1、尽量减少.compost请求:图片合并 (css样式 sprites),Js脚本制作文件合并、css样式文件合并。2、降低DNS查寻3、将css样式放到网页页面最上边,将Js放到网页页面最下边4、缩小Js和css样式降低文档容积,除去多余的空白符、文件格式符、注解(即对编码开展备份)5、把Js和css样式获取出去放到外界文档中这这条要熟练掌握,把Js和css样式获取出去放到外界文档的优势是:降低html语言容积,提升了Js和css样式的多路复用性,提升今后的健壮性缺陷:提

弟一:web网址调优

1、尽量减少.compost请求:图片合并 (css样式 sprites),Js脚本制作文件合并、css样式文件合并。

2、降低DNS查寻

3、将css样式放到网页页面最上边,将Js放到网页页面最下边

4、缩小Js和css样式

降低文档容积,除去多余的空白符、文件格式符、注解(即对编码开展备份)

5、把Js和css样式获取出去放到外界文档中

这这条要熟练掌握,把Js和css样式获取出去放到外界文档的优势是:降低html语言容积,提升了Js和css样式的多路复用性,提升今后的健壮性

缺陷:提升了.compost请求,只有这一点儿能够根据缓存文件来处理。

什么情况将Js和css样式写在网页页面内呢,能够分成几类状况:Js和css样式编码较为少;这一网页页面不太会浏览

6、防止重定向

重定向就是说客户post请求的网页页面被迁移上了其他地区,电脑浏览器向服务项目请post请求1个网页页面,网络服务器告诉他电脑浏览器post请求的网页页面早已被迁移到另一个1个网页页面,并告之另外网页页面详细地址,电脑浏览器就再上传post请求到重定向的详细地址。那样会提升网络服务器和电脑浏览器中间的来回频次,危害网址特性。

重定向情况码有:301永久性重定向 302临时性重定向。316 not modified 并非确实重定向,这是用于告诉他电脑浏览器setpost请求的文档在缓存文件中,防止再次免费下载。

7、清除反复脚本制作

8、应用ajax缓存文件

ajax的set和post方式:

要是是电脑浏览器的setpost请求,电脑浏览器都是应用缓存文件,针对相同详细地址的post请求,网络服务器会上传316情况码到电脑浏览器,电脑浏览器就会应用缓存文件中的统计数据

post的post请求每一次都是被执行,电脑浏览器不容易缓存文件

9、应用Gzip缩小

12、应用cdn节点(內容派发互联网)

第二:数据库查询调优

数据库查询的调优,综上所述分成下列三一部分:

1.SQL调优:关键集中化在数据库索引、降低跨表与互联网大数据join查寻等。

2.数据库查询端架构模式提升:

根据读写能力分离出来调节对数据库查询的写实际操作,根据竖直分拆及其水准分拆(分库分表)来处理数据库查询端连接池短板等难题。

3.连接池调优

能够根据了解连接池的基本原理,及其主要的连接池监控器统计数据,来连续不断调节出最后的连接池主要参数。

第三:根据缓存文件降低后端开发工作压力

现阶段分布式系统缓存文件早已较为成熟期,常用的有redis、memcached及其开源系统的淘宝网分布式系统tair等。

电机选型考虑到

要是信息量小,而且不容易经常地提高又清除(这会造成经常地垃圾分类回收),那麼能够挑选当地缓存文件。主要得话,要是必须某些对策的适用(例如缓存文件满的赶出对策),能够考虑到Ehcache;如不用,能够考虑到HashMap;如必须考虑到多线程高并发的情景,能够考虑到ConcurentHashMap。

缓存文件是不是会满,缓存文件满了该怎么办?

针对1个缓存文件服务项目,基础理论上而言,随之缓存数据的日渐增加,在容积有限公司的状况下,缓存文件确实如果我会满的。怎么看待?

① 给缓存文件服务项目,挑选适合的缓存文件赶出优化算法,例如最常用的LRU。

② 对于当今设定的容积,设定适度的警戒值,例如12G的缓存文件,当缓存数据超过8G的那时候,就刚开始滴响,提早清查难题或是扩充。

③ 给某些沒有必需长期性储存的key,尽可能设定到期時间。

第四:统计数据post请求更新改造为异步

应用情景

客户并不是关注或是客户不用马上得到这种事儿的事件处理,这样的事情就比较合适用异步的方法解决,这儿的标准就是说能异步就异步。

常用作法

这种作法,是附加开拓进程,这儿能够选用附加开拓1个进程或是应用线程池的作法,在UND进程(解决post请求没有响应)以外的进程来解决相对的每日任务,在UND进程中让response先回到。

要是异步进程解决的每日任务设计方案的信息量十分极大,那麼能够导入堵塞序列BlockingQueue作深化的提升。具体措施是让首批异步进程不断往堵塞序列里扔统计数据,随后附加起1个解决进程,循环系统大批量从序列里拿预置尺寸的首批统计数据,来开展批处理(例如发1个大批量的远程控制服务项目post请求),那样全面提高了特性。

另这种作法,是应用消息队列(MQ)中间件服务项目,MQ先天性就是说异步的。

第五:JVM调优

什么时候调?

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

调优工具:

Jconsole,jProfile,VisualVM

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

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

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

如何调优?

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

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

堆信息查看

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

简单聊聊数据库丨缓存丨JVM丨SQL等性能调试方法

提供即时的垃圾回收功能

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

简单聊聊数据库丨缓存丨JVM丨SQL等性能调试方法

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

对象引用情况查看

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

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

--内存泄漏

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

线程监控

简单聊聊数据库丨缓存丨JVM丨SQL等性能调试方法

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

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

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

死锁检查

热点分析

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

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

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

快照

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

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

内存泄漏检查

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

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

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

性能调优总结:

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

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

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

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

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

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

本文地址:http://dxf6.com/post/188.html
版权声明:本文为原创文章,版权归 社长 所有,欢迎分享本文,转载请保留出处!
重庆专业seo
数据湾

发表评论


表情

还没有留言,还不快点抢沙发?