性能优化

14.Nginx性能优化实践

◇◆丶佛笑我妖孽 提交于 2019-11-29 22:02:19
1.性能优化概述 基于Nginx性能优化,那么在性能优化这一章,我们将分为如下几个方面做介绍 1.首先我们需要了解性能优化要考虑哪些方面。 2.然后我们需要了解性能优化必须要用到的压力测试工具ab。 3.最后我们需要了解系统上有哪些注意和优化的点,以及Nginx配置文件。 我们在做性能优化工作前,我们重点需要考虑哪些方面,和了解哪些方面。 1.首先需要了解我们当前系统结构和瓶颈,了解当前使用的是什么,运行的是什么业务,都有哪些服务,了解每个服务最大能支撑多大并发。比如Nginx作为静态资源服务的并发是多少,最高瓶颈在哪里,能支持多少qps(每秒查询率)的访问请求,那我们怎么得出这组系统结构瓶颈呢,比如top查看系统的cpu负载、内存使用率、总的运行进程等,也可以通过日志去分析请求的情况,当然也可以通过我们前面介绍到的stub_status模块查看当前的连接情况,也可以对线上的业务进行压力测试(低峰期),去了解当前这套系统能承担多少的请求和并发,已做好相应的评估。这个是我们做性能优化最先考虑的地方。 2.其次我们需要了解业务模式,虽然我们是做性能优化,但每一个性能的优化都是为业务所提供服务的,我们需要了解每个业务接口的类型,比如:电商网站中的抢购模式,这种情况下面,平时没什么流量,但到了抢购时间流量会突增。 我们还需要了解系统层次化的结构,比如: 我们使用Nginx做的是代理

Linux性能优化实战:案例篇-怎么缓解 DDoS 攻击带来的性能下降问题?(39)

淺唱寂寞╮ 提交于 2019-11-29 21:54:24
一、上节回顾 上一节,我带你学习了 tcpdump 和 Wireshark 的使用方法,并通过几个案例,带你用这两个工具实际分析了网络的收发过程。碰到网络性能问题,不要忘记可以用 tcpdump 和 Wireshark 这两个大杀器,抓取实际传输的网络包,排查潜在的性能问题。 今天,我们一起来看另外一个问题,怎么缓解 DDoS(Distributed Denial of Service)带来的性能下降问题。 二、DDoS 简介 1、DDoS 简介 DDoS 的前身是 DoS(Denail of Service),即拒绝服务攻击,指利用大量的合理请求,来占用过多的目标资源,从而使目标服务无法响应正常请求。 DDoS(Distributed Denial of Service) 则是在 DoS 的基础上,采用了分布式架构,利用多台主机同时攻击目标主机。这样,即使目标服务部署了网络防御设备,面对大量网络 请求时,还是无力应对。 比如,目前已知的最大流量攻击,正是去年 Github 遭受的 DDoS 攻击,其峰值流量已经达到了 1.35Tbps,PPS 更是超过了 1.2 亿(126.9 million)。 2、从攻击的原理上来看,DDoS 可以分为下面几种类型。 第一种,耗尽带宽。无论是服务器还是路由器、交换机等网络设备,带宽都有固定的上限。带宽耗尽后,就会发生网络拥堵

如何写出一个性能优化的单例模式

一笑奈何 提交于 2019-11-29 20:55:44
单例模型是面试当中最常见的一种设计模式,它是一种对象创建模式,用于产生一个对象的具体实例,可以确保系统中一个类只产生一个实例。 简而言之,单例模式可以带来两个好处: 1、对于频繁使用到的对象,可以节省反复创建对象花费的时间; 2、减少对象的实例化操作,故而可以降低系统内存的使用频率; 根据以上两点,可看出使用单例模式能够有效地改善系统的性能。 最常见的单例模式有饿汉模式与懒汉模式。 1、饿汉模式长这样的: 1 public class Singleton{ 2   3   private Singleton(){} 4    5   private static final Singleton instance=new Singleton(); 6 7   public static Singleton getInstance(){ 8    9   return instance; 10   } 11 } 这种单例模式非常简单,唯一不足的是,无法对instance实例做延迟加载,由于instance成员变量是static定义的,因此JVM在加载单例类时,单例对象就会被建立,如果这个单例类在系统中还包含了其他的静态方法,每次通过这个单例类去调用其他的静态方法时,就会加载被static定义的成员变量,也就是加载了private static final Singleton

I/O性能优化

旧巷老猫 提交于 2019-11-29 17:37:35
原创转载请注明出处: https://www.cnblogs.com/agilestyle/p/11525014.html Linux 系统的 I/O 栈图 I/O性能指标 根据指标找工具 根据工具查指标 iostat、vmstat、pidstat 先用 iostat 发现磁盘 I/O 性能瓶颈; 再借助 pidstat ,定位出导致瓶颈的进程; 随后分析进程的 I/O 行为; 最后,结合应用程序的原理,分析这些 I/O 的来源。 Reference https://time.geekbang.org/column/article/79001 来源: https://www.cnblogs.com/agilestyle/p/11525014.html

内存性能优化

回眸只為那壹抹淺笑 提交于 2019-11-29 17:11:49
原创转载请注明出处: https://www.cnblogs.com/agilestyle/p/11523983.html 内存性能指标 根据指标找工具 根据工具查指标 free、top、vmstat、pidstat 为了迅速定位内存问题,先运行几个覆盖面比较大的性能工具,比如free、top、vmstat、pidstat等。 具体的分析思路主要有这几步。 先用free和top,查看系统整体的内存使用情况。 再用vmstat和pidstat,查看一段时间的趋势,从而判断出内存问题的类型。 最后进行详细分析,比如内存分配分析、缓存/缓冲区分析、具体进程的内存使用分析等。 Reference https://time.geekbang.org/column/article/76460 来源: https://www.cnblogs.com/agilestyle/p/11523983.html

Android进阶——性能优化之一种更高效更轻量的序列化方案Protocol Buffer完全攻略(十一)

本小妞迷上赌 提交于 2019-11-29 16:37:02
文章大纲 引言 一、Protocol Buffer的使用步骤 二、在Android Studio使用Protobuf 1、在Android Studio项目中引入protobuf-gradle-plugin Gradle插件 2、在需要使用Protobuf 的Module下的build.gradle使用插件并进行对应的配置 3、创建proto文件 4、使用protobuf 进行序列化和反序列化 引言 前一篇文章 Android进阶——性能优化之一种更高效更轻量的序列化方案Protocol Buffer完全攻略(十) 总结了Protobuf的一些基础知识以及内部底层的编解码特点和原理,这一篇就好好的总结下Protobuf的应用。以下是性能优化系列的链接地址列表(持续更新): Android进阶——性能优化之APP启动时黑白屏的根源解析及对应的优化措施小结(一) Android进阶——性能优化之APP启动过程相关源码解析(二) Android进阶——性能优化之APP启动速度优化实战总结(三) Android进阶——性能优化之布局渲染原理和底层机制详解(四) Android进阶——性能优化之布局优化实战经验小结(五) Android进阶——性能优化之内存管理机制和垃圾采集回收机制(六) Android进阶——性能优化之内存泄漏和内存抖动的检测及优化措施总结(七) Android进阶—

CPU性能优化

无人久伴 提交于 2019-11-29 15:56:48
原创转载请注明出处: https://www.cnblogs.com/agilestyle/p/11521331.html CPU性能指标 根据指标找工具 根据工具查指标 top、vmstat 和 pidstat 从 top 的输出可以得到各种 CPU 使用率以及僵尸进程和平均负载等信息。 从 vmstat 的输出可以得到上下文切换次数、中断次数、运行状态和不可中断状态的进程数。 从 pidstat 的输出可以得到进程的用户 CPU 使用率、系统 CPU 使用率、以及自愿上下文切换和非自愿上下文切换情况。 Reference https://time.geekbang.org/column/article/72685 来源: https://www.cnblogs.com/agilestyle/p/11521331.html

【原】Sql Server性能优化——Partition(管理分区)

别来无恙 提交于 2019-11-29 06:37:23
正如上一篇文章 SqlServer性能优化——Partition(创建分区) 中所述,分区并不是一个一劳永逸的操作,对一张表做好分区仅仅是开始,接下来可能需要频繁的变更分区,管理分区。 在企业管理器中,虽然有“管理分区”的菜单,里面的内容却可能与你的预想不同,这里并没有提供直接对分区进行操作的方法,所以一些普通的操作,比如“ 增加分区 ”、“ 删除分区 ”之类的操作就需要通过脚本实现了。 增加分区(Split Partition) “ 增加分区 ”事实上就是将现有的分区分割开,基于此,在SQL Server中应用的是Split操作。在 分离分区 的时候,不仅仅要在Partition Function上指定分割的分界点,同样需要在Partition Scheme上指定新分区应用的文件组: --指定下一个分区应用文件组PRIMARY ALTER PARTITION SCHEME [MyPartitionSchema] NEXT USED [PRIMARY] --指定分区分界点为5000 ALTER PARTITION FUNCTION MyPartitionFunction() SPLIT RANGE (5000) 需要注意的一点是, 新增的分区中非聚簇索引的压缩模式会被置为None 。 删除分区(Merge Partition) “ 删除分区

性能优化 | Tomcat和JVM的性能调优总结

試著忘記壹切 提交于 2019-11-29 05:38:30
Tomcat性能调优: 找到Tomcat根目录下的conf目录,修改server.xml文件的内容。对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创建的线程数的设置,当然还有其他一些性能调优的设置,下图是我根据我机子的性能设置的一些参数值,给各位详细解释一下吧: 1、 URIEncoding=“UTF-8” :设置Tomcat的字符集。这种配置我们一般是不会设置的,因为关于乱码的转换我们会在具体项目中具体处理,直接修改Tomcat的字符集未免过于太死板。 2、 maxThreads=“300” :设置当前Tomcat的最大并发数。Tomcat默认配置的最大请求数是150个,即同时能支持150个并发。但是在实际运用中,最大并发数与硬件性能和CPU数量都有很大关系的,更好的硬件、更高的处理器都会使Tomcat支持更多的并发数。如果一般在实际开发中,当某个应用拥有 250 个以上并发的时候,都会考虑到应用服务器的集群。 3、 minSpareThreads=“50” :设置当前Tomcat初始化时创建的线程数,默认值为25。 4、 acceptCount=“250” :当同时连接的人数达到maxThreads参数设置的值时,还可以接收排队的连接数量,超过这个连接的则直接返回拒绝连接。指定当任何能够使用的处理请求的线程数都被使用时

性能优化 | 实现万行级数据读取优化

Deadly 提交于 2019-11-29 05:38:16
业务场景: 基于导出的功能上,要求一次性查询10w条数据。但是这个10w的开始值和结束值不固定(比如:startNum = 123; endNum = 100123;) 难点一: dubbox时间超时规定为1s,服务调用图如下: 难点二: 数据封装转换性能消耗较高,目前使用的BeanUtils 难点三: 并发能力很弱,在分割查询的过程中,如果有其他的服务进入,很容易导致数据混乱 公司使用的数据库为oracle,目前我自己实现的查询功能总耗时8s。这个时间能不能再次缩短?有没有比较好的方案对数据分割查询? 对于JDBC batchsize 和 fetchsize的一次尝试 Batch和Fetch两个特性非常重要,Batch相当于JDBC的写缓冲,Fetch相当于读缓冲。在加入这两个特性之后,查询10w条尝试,根据描述,能个提升4倍的时间。参考文章:http://blog.sina.com.cn/s/blog_9f8ffdaf0102x3nf.html 将代码摘抄之后,修改数据库连接的账户密码。单独使用检查代码是否能够独立运行,main,报错如下: Exception in thread "main" java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver at java.net.URLClassLoader