查看: 337|回复: 0

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

发表于 2018-9-12 14:33:32





一. 基本概念
1. 软件系统质量特性
安全性:同时兼顾向合法用户提供服务,以及阻止非授权使用软件及资源的能力。
健壮、可靠:软件系统在一定的时间内无故障运行的能力、容错能力、恢复能力
可扩展、可维护、可移植:正在运行的软件系统以适应新需求、变化了的需求的难易程度
可用性、易用性、性能:性能是指软件及时提供相应服务的能力。 具体而言, 性能包括速度、 吞吐量和持续高速性三方面的要求 。
2. 性能的定义及表现
定义:多快给用户想要的结果;主要考察流畅度和更少的资源占用两个方面
表现:一些页面加载超过3秒,就会影响用户体验,从而流失用户,所以我们的业务计算结果越快出来越好
二、性能优化涉及的范围
1. 范围
(1)硬件环境范围
单机:CPU、内存、磁盘、网络
多机:存储架构、网络架构、应用架构
(2)软件环境范围:JVM、TOMCAT、数据库、软件系统(我们的写的程序代码)都是可以优化的地方
(3)应用场景
计算密集型,集中式资源使用
IO密集型,分散型资源利用
说明:我们程序员一般关注的是软件环境范围的性能优化,但是前提是硬件环境不要太苛刻,比如我们的软件启动就需要512M的内存,结果硬件环境只有128M的内存,这样即使再怎么优化也是达不到要求的
2. 性能是平衡之道
即在有限的资源下,提供最佳的访问能力及处理速度。木桶原理之:发现最差瓶颈,提升整体效率。呑吐量和响应速度兼顾。
3. 调优是量体裁衣
根据不同的场景,针对性的提高适用性。如:前台的响应速度,后台的统计结果。前者用户耐心有限,后者需要丰富数据分析。
4. 性能优化的一些术语
QPS:每秒查询次数
TPS:每秒事务次数
呑吐量:单位时间内成功地传送数据的数量
响应时间:用户请求到用户接收结果的时间。
5. 性能瓶颈
网络IO,阻塞式IO是最大的问题
网络:带宽问题,CDN问题,我们在进行性能优化时,首先要排查是不是带宽和CDN的问题
6. 运维监控
1. 了解一下基本的运维相关的命令,知道怎么使用
1.1 top
说明:top命令用来显示执行中的程序进程,使用权限是所有用户。按q键退出
格式:top [-] [d delay] [q] [c] [S] [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
2. 其他运维监控软件
stat系列:vnstat,iostat,vmstat
三、处理模式
1. 调优顺序
从底向上找出瓶颈,顺序是服务器优化——环境优化——数据库优化——应用系统优化




2. 提高硬件能力
目标:买最好的机器,用最贵的网络,泡最靓的妞><
2.1 硬件配比
CPU与内存的比例,1:2或者1:4
磁盘空间及分区,多个盘(100G)
文件系统格式及调优。Ext4
2.2 网络带宽
公网5M带宽,1000人以内内网带宽。
2.3 系统环境
Nginx,安装及配置
Tomcat
Mysql。
3. 提高系统处理能力
目标:安装高性能的软件、保障安全性、服务器配置优化
安装高性能的软件:
WEB应用服务器
Nginx
Tomcat
保障安全性:
防火墙,Centos自带,一般不启动selinux,使用VPS来设置
服务器配置优化:
网络配置优化
连接数
ipv6
4. 服务器环境安装
Nginx:提高Tomcat静态文件处理能力、负载均衡、反向代理
Centos环境,安装服务端软件,统一采用yum方式
Yum install nginx
Yum install java-1.8.0-openjdk.x86_64
Yum install tomat
Yum install mariadb
5. 服务器环境配置
Nginx的主配置目录:/etc/nginx/
Nginx的server配置目录:/etc/nginx/conf.d/
四、服务器处理方法
1. 服务器环境优化
网络优化、安全性配置、用户组权限、目录规划
2. 服务器常规监控
命令:
Top命令
Free命令
Df命令
工具:
Xshell 连接linux操作界面
Filezilla 把文件上传到linux服务器上,和xftp、winscp的工具类似
欢迎工作一到五年的java工程师朋友们加入Java架构开发:744677563
群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!



回复

使用道具 举报