性能调优

什么是性能调优?

计算机的体系结构
如上图,简单来说包括三块:硬件、操作系统、应用程序。其实,性能调优就是调节这些内容,包括硬件、操作系统、应用程序。

硬件包括:CPU、内存、磁盘、网卡、其它……,
操作系统包括:进程、虚拟内存、文件系统、网络、其它……,
应用程序:常见的有Apache、MySQL、Nginx、Memcahed等。

那什么是性能调优呢?

性能调优就是对计算机硬件、操作系统和应用有相当深入的了解,调节三者之间的关系,实现整个系统(包括硬件、操作系统、应用)的性能最大化,并能不断的满足现有的业务需求。

为什么需要性能调优?

一、是为了获得更好的系统性能(就是你现有的系统运行的还不错,但优化一下可以运行的更好)。
二、是通过性能调优来满足不断增加的业务需求

什么地方需要性能调优?

1、硬件选型(根据服务器应用类型来选购服务器)
2、操作系统调节系统参数
3、组件 (Nginx、MySQL等)
4、代码

怎么样进行性能调优?

  • 性能指标 –> 确认衡量标准
  • 性能测试 –> 验证性能指标
  • 性能分析 –> 找出性能瓶颈
  • 性能调优 –> 解决性能问题
  • 性能监控 –> 检验调优效果

性能指标

一般衡量一个项目(这里指的网站)的指标有三个:

  • 吞吐量 –> 是单位时间内完成的用户或系统的请求数量。
  • 并发数 –> 同时能接受多少用户的访问请求
  • 响应时间 –> 用户发出请求到收到响应的时间间隔。

性能分析

1、先看CPU利用率,如果CPU利用率不高,但是系统的Throughput和Latency上不去了,这说明我们的程序并没有忙于计算,而是忙于别的一些事,比如IO。

2、然后,我们可以看一下IO大不大,IO和CPU一般是反着来的,CPU利用率高则IO不大,IO大则CPU就小。关于IO,我们要看三个事,一个是磁盘文件IO,一个是驱动程序的IO(如:网卡),一个是内存换页率。这三个事都会影响系统性能。

3、然后,查看一下网络带宽使用情况,在Linux下,你可以使用iftop, iptraf, ntop, tcpdump这些命令来查看。

4、如果CPU不高,IO不高,内存使用不高,网络带宽使用不高。但是系统的性能上不去。这说明你的程序有问题,比如,你的程序被阻塞了。可能是因为等哪个锁,可能是因为等某个资源,或者是在切换上下文。

性能监控

CPU 使用率 CPU负载 内存使用率 磁盘I/O 网络流量 磁盘空间 系统进程

硬件选型

硬件选型是在有限的资源下(金钱),选择最适合自己应用运行的硬件基础。(如果你是土豪那无所谓,反正贵总是有好处的)。
那么如何选择硬件呢?其实视自己在服务器上安装的应用或则组件决定。

  • 如果说是自己安装个简单的应用玩玩。那只需要购买能把应用跑起来,就差不多了。
  • 如果要安装个Mysql,那关注点是磁盘的转数,cpu普通的就行
  • 如果要安装个缓存,比方Memcache,那关注点是内存大小,cpu普通就行(缓存可能还需要好的网络,这个看你应用的瓶颈在哪)
  • 如果要安装个计算型的应用,那关注点是cpu,一般应用4G内存够了

总的来说就是:应用或组件依赖什么,那么我们就多花点钱,配好的。也不需要富的流油,够用就行

操作系统调节系统参数

操作系统Linux、windows,这些为什么还要调优呢?因为操作系统不是为你而设计的,而是为大多数人设计的。它要适应大众,才能普及推广啊。

这块的话,不是很精通。下面把我所调节过的东西讲一下

系统句柄

Linux是有文件句柄限制的,一般都是1024,生产服务器用其实很容易就达到这个数量
是不是碰到过这些错误
java.lang.OutOfMemoryError:Unable to create new native thread
Can’t open so many files
too many open files

  • 查看当前使用的句柄数
cat /proc/sys/fs/file-nr
  • 对用户设置句柄
vi /etc/security/limits.conf

*   soft noproc   65535  
*   hard noproc   65535  
*   soft nofile   65535  
*   hard nofile   65535 
说明:* 代表针对所有用户 
noproc 是代表最大进程数 
nofile 是代表最大文件打开数
修改完重新登录就可以见到,使用 ulimit -a 查看确认
  • 系统级别句柄
//用户句柄不能超过系统句柄
sysctl -w fs.file-max 65536 
或者 
echo "65536" > /proc/sys/fs/file-max
或者
echo "fs.file-max = 65536" >> /etc/sysctl.conf

交换区

swap空间是一块磁盘空间,操作系统使用这块空间保存从内存中换出的操作系统不常用page数据,这样可以分配出更多的内存做page cache。这样通常会提升系统的吞吐量和IO性能,但同样会产生很多问题。页面频繁换入换出会产生IO读写、操作系统中断,这些都很影响系统的性能。

所以在内存充足的情况下最好关闭

swapoff -a

组件

组件是支称应用性能的关键,所以选组件、配置参数至关重要

选组件

在强大的开源社区下,不同部位的组件可以有很多种选择。比如缓存有memcache、redis、tair、aerospike等,看得我们是眼花缭乱。其实它们有不同的特性,我相信开发者不肯能重复的造轮子,它们各有各适合的场景。而你是以你所面临的场景去选择它们。

以下是我选取组件的步骤

1、清楚的了解自己所面临的场景
2、根据场景抽取关键词,去google搜索。(因为自己的知识面不够广阔,不知道到底有哪些组件)
3、去官网查看它们的优点缺点,特意把缺点标黑,最会踩坑的地方
4、缩小组件范围
5、动手基准测试,有些东西官网很能吹的
6、深入了解

应用代码

代码写的好坏也直接影响性能,这个的话得靠经验和动手测试

//哈哈,这段代码有什么问题吗?
public String test(List<String> list){

    for( int i =0 ; i < list.size ; i++ ){
        if("test".equale(list.get(i)){
            return list.get(i);
        }
    }
    return null;

}

JVM的调优

jvm的调优,主要就是看gc频率.这个就不讲了。网上有很多

代码的调优

看自己的代码功底,实践才是王道。

定位性能问题

系统消耗分析

猜你喜欢

转载自blog.csdn.net/u012092620/article/details/79982897