强烈推荐|你不可不知的性能优化内幕

一. 基本概念

  1. 软件系统质量特性

安全性:同时兼顾向合法用户提供服务,以及阻止非授权使用软件及资源的能力。

健壮、可靠:软件系统在一定的时间内无故障运行的能力、容错能力、恢复能力

可扩展、可维护、可移植:正在运行的软件系统以适应新需求、变化了的需求的难易程度

可用性、易用性、性能:性能是指软件及时提供相应服务的能力。 具体而言, 性能包括速度、 吞吐量和持续高速性三方面的要求 。

  1. 性能的定义及表现

定义:多快给用户想要的结果;主要考察流畅度和更少的资源占用两个方面

表现:一些页面加载超过3秒,就会影响用户体验,从而流失用户,所以我们的业务计算结果越快出来越好

二、性能优化涉及的范围

  1. 范围

(1)硬件环境范围

单机:CPU、内存、磁盘、网络

多机:存储架构、网络架构、应用架构

(2)软件环境范围:JVM、TOMCAT、数据库、软件系统(我们的写的程序代码)都是可以优化的地方

(3)应用场景

计算密集型,集中式资源使用

IO密集型,分散型资源利用

说明:我们程序员一般关注的是软件环境范围的性能优化,但是前提是硬件环境不要太苛刻,比如我们的软件启动就需要512M的内存,结果硬件环境只有128M的内存,这样即使再怎么优化也是达不到要求的

  1. 性能是平衡之道

即在有限的资源下,提供最佳的访问能力及处理速度。木桶原理之:发现最差瓶颈,提升整体效率。呑吐量和响应速度兼顾。

  1. 调优是量体裁衣

根据不同的场景,针对性的提高适用性。如:前台的响应速度,后台的统计结果。前者用户耐心有限,后者需要丰富数据分析。

  1. 性能优化的一些术语

QPS:每秒查询次数

TPS:每秒事务次数

呑吐量:单位时间内成功地传送数据的数量

响应时间:用户请求到用户接收结果的时间。

  1. 性能瓶颈

网络IO,阻塞式IO是最大的问题

网络:带宽问题,CDN问题,我们在进行性能优化时,首先要排查是不是带宽和CDN的问题

  1. 运维监控
  2. 了解一下基本的运维相关的命令,知道怎么使用

1.1 top

说明:top命令用来显示执行中的程序进程,使用权限是所有用户。按q键退出

格式:top [-] [d delay] [q] [c] [S] [s] [i] [n]

主要参数:

d:指定更新的间隔,以秒计算。

q:没有任何延迟的更新。如果使用者有超级用户,则top命令将会以最高的优先序执行。

c:显示进程完整的路径与名称。

S:累积模式,会将己完成或消失的子行程的CPU时间累积起来。

s:安全模式。

i:不显示任何闲置(Idle)或无用(Zombie)的行程。

n:显示更新的次数,完成后将会退出top。

命令图解:

第一行表示的项目依次为当前时间、系统运行时间、当前系统登录用户数目、1/5/10分钟系统平均负载(一般来说,这个负载值应该不太可能超过 1 才对,除非您的系统很忙碌。 如果持续高于 5 的话,那么.....仔细的看看到底是那个程序在影响整体系统吧!)。

第二行显示的是所有启动的进程、目前运行、挂起 (Sleeping)的和无用(Zombie)的进程。(比较需要注意的是最后的 zombie 那个数值,如果不是 0 ,嘿嘿!好好看看到底是那个 process 变成疆尸了吧?!)(stop模式:与sleep进程应区别,sleep会主动放弃cpu,而stop是被动放弃cpu ,例单步跟踪,stop(暂停)的进程是无法自己回到运行状态的)

第三行显示的是目前CPU的使用情况,包括us用户空间占用CPU百分比、sy 内核空间占用CPU百分比、ni 用户进程空间内改变过优先级的进程占用CPU百分比(中断处理占用)、id 空闲CPU百分比、wa 等待输入输出的CPU时间百分比、hi,si,st 三者的意思目录还不清楚 :)

第四行显示物理内存的使用情况,包括总的可以使用的内存、已用内存、空闲内存、缓冲区占用的内存。

第五行显示交换分区使用情况,包括总的交换分区、使用的、空闲的和用于高速缓存的大小。

第六行显示的项目最多,下面列出了详细解释。

PID(Process ID):进程标示号 ( 每个 process 的 ID )

USER:进程所有者的用户名 ( 该 process 所属的使用者 )

PR:进程的优先级别 ( Priority 的简写,程序的优先执行顺序,越小越早被执行 )

NI:进程的优先级别数值 ( Nice 的简写,与 Priority 有关,也是越小越早被执行 )

VIRT:进程占用的虚拟内存值。

RES:进程占用的物理内存值。

SHR:进程使用的共享内存值。

S:进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数。

%CPU:该进程占用的CPU使用率。

%MEM:该进程占用的物理内存和总内存的百分比。

TIME+:该进程启动后占用的总的CPU时间 ( CPU 使用时间的累加 )

Command:进程启动的启动命令名称,如果这一行显示不下,进程会有一个完整的命令行。

top命令使用过程中,还可以使用一些交互的命令来完成其它参数的功能。这些命令是通过快捷键启动的。

<空格>:立刻刷新。

P:根据CPU使用大小进行排序。

T:根据时间、累计时间排序。

q:退出top命令。

m:切换显示内存信息。

t:切换显示进程和CPU状态信息。

c:切换显示命令名称和完整命令行。

M:根据使用内存大小进行排序。

W:将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法

1.2 free

说明:free命令用来显示内存的使用情况,使用权限是所有用户。

格式:free [-b|-k|-m] [-o] [-s delay] [-t] [-V]

主要参数:

-b -k -m:分别以字节、KB、MB为单位显示内存使用情况。

-s delay:显示每隔多少秒数来显示一次内存使用情况。

-t:显示内存总和列。

-o:不显示缓冲区调节列。

使用示例:

free命令是用来查看内存使用情况的主要命令。和top命令相比,它的优点是使用简单,并且只占用很少的系统资源。通过-S参数可以使用free命令不间断地监视有多少内存在使用,这样可以把它当作一个方便实时监控器。

#free -h -s5

1.3 df

说明:df命令的功能是用来检查Linux服务器的文件系统的磁盘占用情况。可以利用该命令来获取磁盘被占用了多少空间,目前还剩下多少空间等信息。如果没有指定文件名称,则当前所有的被挂载的文件系统的空间将被显示。默认情况下,磁盘空间将以1kb位单位进行显示。

格式:df 【选项】 【文件】

命令参数:

-a 全部文件系统的列表

-h 方便阅读方式显示

-i 显示node信息

-k 区块为1024字节

-l 只显示本地文件系统

-m 区块为1048576字节

-p 输出格式为posix

-T 文件系统类型

使用示例:

linux中df命令的输出清单的第一列是代表的文件系统对应的设备文件的路径名称(一般是硬盘上的分区);第二列给出的是数据块的数目。第三四列分别代表已用的和可用的数据块数量。也许用户会感到奇怪的是两者相加并不等于总的数据块数,这是因为每个分区都预留了空间供管理员使用。即使遇到普通用户空间已经满的情况,管理员仍然留有可以登录和解决问题的空间。最后一列是文件系统的挂载点。

1.4 du

说明:du命令查看和计算目录的大小

1.5 查看日志分析

cat /var/log/message,cat /var/log/nginx/access.log,cat /var/log/tomcat

  1. 其他运维监控软件

stat系列:vnstat,iostat,vmstat

三、处理模式

  1. 调优顺序

从底向上找出瓶颈,顺序是服务器优化——环境优化——数据库优化——应用系统优化

  1. 提高硬件能力

目标:买最好的机器,用最贵的网络,泡最靓的妞><

2.1 硬件配比

CPU与内存的比例,1:2或者1:4

磁盘空间及分区,多个盘(100G)

文件系统格式及调优。Ext4

2.2 网络带宽

公网5M带宽,1000人以内内网带宽。

2.3 系统环境

Nginx,安装及配置

Tomcat

Mysql。

  1. 提高系统处理能力

    目标:安装高性能的软件、保障安全性、服务器配置优化

安装高性能的软件:

WEB应用服务器

Nginx

Tomcat

保障安全性:

防火墙,Centos自带,一般不启动selinux,使用VPS来设置

服务器配置优化:

网络配置优化

连接数

ipv6

  1. 服务器环境安装

Nginx:提高Tomcat静态文件处理能力、负载均衡、反向代理

Centos环境,安装服务端软件,统一采用yum方式

Yum install nginx

Yum install java-1.8.0-openjdk.x86_64

Yum install tomat

Yum install mariadb

  1. 服务器环境配置

Nginx的主配置目录:/etc/nginx/

Nginx的server配置目录:/etc/nginx/conf.d/

四、服务器处理方法

  1. 服务器环境优化

网络优化、安全性配置、用户组权限、目录规划

  1. 服务器常规监控

命令:

Top命令

Free命令

Df命令

工具:

Xshell 连接linux操作界面

Filezilla 把文件上传到linux服务器上,和xftp、winscp的工具类似

原文地址:http://blog.51cto.com/13732225/2173807

时间: 2024-10-17 03:38:13

强烈推荐|你不可不知的性能优化内幕的相关文章

阿里巴巴 web前端性能优化进阶路

Web前端性能优化WPO,相信大多数前端同学都不会陌生,在各自所负责的站点页面中,也都会或多或少的有过一定的技术实践.可以说,这个领域并不缺乏成熟技术理论和技术牛人:例如Yahoo的web站点性能优化黄金法则,以及大名鼎鼎的优化大师Steve Souders.本文并非一篇讨论性能优化技术方法的文章,而更多的是对中文站搜索List页面持续两年多的前端性能优化实践的思路总结.希望对正在从事这个领域研究的前端同学能有所帮助. 简单的说,我们的性能优化实践分为三个阶段:初探期.立规期.创新期, 每个阶段

Android 性能优化的方面方面都在这儿

又到周六了,鸿洋的不定期的周六放送又来了~~这次来谈谈性能优化吧.大家在工作中或多或少都会拿自家的应用和竞品app做比对,不可避免的需要做一些app性能优化的活.很多时候可能是策略上的调整,不过还是有非常多的通用的方式. 一般情况下,我们谈性能优化基本上会从以下几个方面: App启动速度优化 UI流畅度优化 内存优化 apk瘦身 电量优化 还有些网络速度优化.以及特定类型app的一些针对性的优化,比如播放器起播速度等... 我们重点谈论上面5个方面. 性能优化正常的流程是,发现自己某方面与竞品差

25个Apache性能优化技巧推荐

25个Apache性能优化技巧推荐 Apache至今仍处于web服务器领域的霸主,无人撼动,没有开发者不知道.本篇文章介绍25个Apache性能优化的技巧,如果你能理解并掌握,将让你的Apache性能有显著的提升! Apache部分: 1. 移除不用的模块. 2. 使用 mod_disk_cache NOT mod_mem_cache . 3. 扁平架构配置mod_disk_cache. 4. 安装恰当的Expires, Etag, 和 Cache-Control Headers . 5. 将缓

推荐:Java性能优化系列集锦

Java性能问题一直困扰着广大程序员,由于平台复杂性,要定位问题,找出其根源确实很难.随着10多年Java平台的改进以及新出现的多核多处理器,Java软件的性能和扩展性已经今非昔比了.现代JVM持续演进,内建了更为成熟的优化技术.运行时技术和垃圾收集器.与此同时,底层的硬件平台和操作系统也在演化. 目录: 一.Java性能优化系列之一--设计优化 二.Java性能优化系列之二--程序优化 三.Java性能优化系列之三--并发程序设计详解 四.Java性能优化系列之四--Java内存管理与垃圾回收

分页查询不知你是否真正的懂和PHP的正则的应用和一些性能优化

一.不废话太多  直接进入例子. 1  问题: 有一张收藏表,里面存储的是用户和图书ID.数据量为1亿.现在要求分页获取所有用户ID(不重复),写下你的sql语句. 表结构大致如下:           CREATE TABLE 收藏表(              `id` bigint(20) unsigned NOT NULL auto_increment COMMENT 'primary key',              `uid` bigint(20) unsigned NOT NU

Unity游戏项目性能优化总结 (难度3 推荐4)

原文地址: https://zhuanlan.zhihu.com/p/24392681 本文就Unity游戏项目性能优化作出了总结.包括Profile工具.Unity使用.机制设计.脚本编写等方面内容.本文的测试机型皆为iPhone6.为方便找出瓶颈目标帧率先提高为60fps,后面再看实际情况是否限帧30fps.本文的Unity版本为5.5.0f3或更新版本. 本文将持续更新. Profiler工具 在Unity项目中,可能使用到的Profiler工具分3种: 长期性能数据监控工具 Unity

书籍推荐:《实战Java虚拟机——JVM故障诊断与性能优化》下载

本书详细介绍Java虚拟机的基本原理和优化诊断方法.其中重点介绍Java虚拟机的体系结构.常用的虚拟机参数.Java虚拟机的垃圾回收原理.算法以及目前虚拟机所支持的各种垃圾回收器及其区别.特点和使用方法.在实践和调优方面,重点介绍了Java的堆.栈分析方法,性能调优的一般思路.手段和工具.此外,还详细介绍了虚拟机内有关"锁"的实现以及优化方法. 作为对虚拟机的深入了解,本书还将详细介绍Java类的基本格式.装载过程和虚拟机的执行机制. Java虚拟机目前是Java.Scala.Cloj

mysql配置以及性能优化(转)

MySQL配置文件my.cnf中文详解,附mysql性能优化方法分享 ================================================================================================= Mysql参数优化对于新手来讲,是比较难懂的东西,其实这个参数优化,是个很复杂的东西,对于不同的网站,及其在线量,访问量,帖子数量,网络情况,以及机器硬件配置都有关系,优化不可能一次性完成,需要不断的观察以及调试,才有可能得到最佳效果

SQL Server 数据库性能优化(转载)

原文地址:http://www.cnblogs.com/sydeveloper/archive/2013/04/03/2992881.html 一.数据库设计优化 1.不要使用游标. 使用游标不仅占用内存,而且还用不可思议的方式锁定表,它们可以使DBA所能做的一切性能优化等于没做.游标里每执行一次fetch就等于执行一次select. 2.创建适当的索引 每当为一个表添加一个索引,select会更快,可insert和delete却大大变慢,因为创建了维护索引需要许多额外的工作. (1)采用函数处