linux性能调优

一、性能优化需求的提出

提出性能优化的现象:

  • 前台访问很慢
  • 用户对性能很不满意
  • 数据库负载很重
  • xxx功能打开需要1分钟

系统性的问题?CPU利用率,SWAP利用率或者IO过高导致的整体性能下降?

功能性的问题?整体性良好,个别功能时延很长

新出现问题?什么时候开始的,之前的系统有哪些变动?(升级或者管理的资源大量增加)

不规律问题?有时候快,有时候慢

二、linux性能分析的目的

1、找出系统性能瓶颈(包括硬件瓶颈和软件瓶颈);

2、提供性能优化的方案(升级硬件?改进系统结构?)

3、达到合理的硬件和软件配置

4、使系统资源使用达到最大的平衡

比如CPU过度使用会造成大量进程等待CPU资源,系统响应速度变慢,等待会造成进程数增加,进程增加又会造成内存使用增加,内存耗尽又会造成虚拟内存使用,使用虚拟内存又会造成磁盘IO增加和CPU开销增加)

三、性能分析的步骤

1、需要系统监控工具和性能分析工具

  • 对资源的使用状况进行长期的监控和数据采集(nagios、cacti、ganglia、zabbix)

  • 使用常见的性能分析工具(vmstat、top、htop、iotop、free、iostat)

  • 实战技能和经验积累

2、出现性能问题的可能原因

  • 应用程序的设计缺陷、数据库查询滥用
  • 性能瓶颈,可能是程序差/内存不足/磁盘瓶颈,最终表现结果就是CPU耗尽,系统负载极高,响应迟缓
  • 物理内存不够时会使用交换内存,使用swap会带来磁盘IO和cpu的开销
  • 可能造成cpu瓶颈的问题:频繁执Perl,php,java程序生成动态web;数据库查询大量的where子句、order by/group by 排序......
  • 可能造成内存瓶颈问题:高并发用户访问、系统进程多,java内存泄露......
  • 可能造成磁盘IO瓶颈问题:生成cache文件,数据库频繁更新,或者查询大表......

四、影响linux性能的因素

1、系统硬件资源:

  • CPU

    • 大部分cpu在同一时间内只能运行一个线程,一些厂商的cpu可以启用超线程,同一时间运行多线程
    • Linux内核会把多核的处理器当做单独的CPU来识别,例如两个4核的CPU,在linux系统下会被当做8个单核CPU
    • 可能出现CPU瓶颈的应用:邮件服务器、动态web服务器等
  • 内存:

    • 内存太小,系统进程将被阻塞,应用也将变得缓慢
    • linux采用物理内存和虚拟内存两种方式,虚拟内存虽然可以缓解物理内存的不足,但是占用过多的虚拟内存,应用程序的性能将明显下降
    • 可能出现内存性能瓶颈的应用有:redis内存数据库服务器、cache服务器、静态web服务器等
  • 磁盘I/O性能:

    • 现今的磁盘都采用了很多的方法来提高I/O性能,比如常见的磁盘RAID技术。常见的RAID级别有RAID0、RAID1、RAID5、RAID0+1
    • RAID0:这种方式成本低,没有容错和数据修复功能,因而只能用在对数据安全性要求不高的环境中
    • RAID1:也就是磁盘镜像,通过把一个磁盘的数据镜像到另一个磁盘上,最大限度地保证磁盘数据的可靠性和可修复性,具有很高的数据冗余能力,但磁盘利用率只有50%,因而,成本最高,多用在保存重要数据的场合
    • RAID5:采用了磁盘分段加奇偶校验技术,从而提高了系统可靠性,RAID5读出效率很高,写入效率一般,至少需要3块盘。允许一块磁盘故障,而不影响数据的可用性。
    • RAID0+1:把RAID0和RAID1的技术结合起来就成了RAID0+1,至少需要4块盘 。此种方式的数据除分布在多个盘上外,每个盘都有其镜像盘,提供全冗余能力,同时允许一个磁盘故障,而不影响数据可用性,并具有快速读/写能力
    • 目前常用磁盘类型有STAT、SAS、SSD磁盘。STAT、SAS是普通机械硬盘,读写效率一般。如要保证较高的性能的读写操作,可选用SSD固态硬盘
  • 网络带宽

    • 低速的、不稳定的网络将导致网络应用程序的访问阻塞,而稳定、高速的网络带宽,可以保证应用程序在网络上畅通无阻地运行。
    • 组建网络时,如果局域网有大量数据传输需求(hadoop大数据业务、数据库业务),可采用千兆、万兆网络接口,针对每个服务器,如果单网卡效率不够,可采用双网卡绑定技术,提高网卡数据传输带宽和性能。

2、操作系统相关资源

  • 系统安装优化
    • 磁盘的划分、SWAP内存的分配都直接影响以后系统的运行性能
  • 内核参数优化
    • 如果部署的是Oracle数据库应用,就需要对系统共享内存段、系统信号量、文件句柄等参数进行优化设置
    • 如果部署的是web应用,就需要根据web应用特性进行网络参数的优化,例如net.ipv4,ip_local_port_range、net.ipv4.tcp_tw_reuse等网络内核参数
  • 文件系统优化
    • 在linux下可选的文件系统有ext3、ext4、xfs,根据不同的应用,选择不同的文件系统

五、系统性能分析工具

1、vmstat命令

语法:
vmstat [-V] [-n] [delay [count]]

参数:
-V  表示打印出版本信息,是可选参数
-n  表示在周期性循环输出时,输出的头部信息仅显示一次
delay  表示两次输出之间的间隔时间
count  表示按照delay指定的时间间隔统计的次数。默认为1

案例:
vastat 3  # 每3秒钟更新一次输出信息,循环输出
vastat 3 5 # 每3秒输出一次,共输出5次

2、iostat

功能:对系统的磁盘I/O操作进行监视,同时也会给出CPU的使用情况

语法:
iostat [-c|-d] [-k] [-t] [-x[device]] [interval [count]]

参数:
-c 显示cpu的使用情况
-d 显示磁盘的使用情况
-k 每秒以k bytes为单位显示数据
-t 打印出统计信息开始执行的时间
-x device:指定要统计的磁盘设备名称,默认为所有的磁盘设备
interval:指定两次统计间隔的时间
count:按照interval指定的时间间隔统计的次数

3、sar命令

很强大,是分析系统性能的重要工具之一,通过sar命令,可以全面的获取系统的CPU、运行队列、磁盘I/O、分页(交换区)、内存、CPU中断、网络等性能数据

语法:
sar [option] [-o filename] [interval [count]]

参数:
option为命令行选项,sar命令的选项很多,下面是常用选项:
-A 显示系统所有资源设备(CPU、内存、磁盘)的运行情况
-u 显示系统出所有CPU在采样时间内的负载状态
-P 显示当前系统中指定CPU的使用情况
-d 显示系统所有硬盘设备在采样时间内的使用状况
-r 显示系统内存在采样时间内的使用状况
-b 显示缓冲区在采样时间内的使用情况
-v 显示进程、文件、I节点和锁表状态
-n 显示网络运行状态。参数后面可跟DEV、EDEV、SOCK和FULL。DEV显示网络接口信息,EDEV显示网络错误的统计数据,SOCK显示套接字信息,FULL显示三个所有的信息。可以单独或者一起使用
interval 表示采样间隔时间,必填
count 采样次数,可选,默认值为1

测试题:

1、操作系统如何管理块设备(磁盘),如何读写块设备。

block概念

  • 操作系统无法对数目众多的扇区进行寻址,因此操作系统将相邻的扇区组合在一起,形成了块block,(8个扇区,80.5 kb 4kb大小)*
  • 在linux文件系统重多个连续的扇区,被称之为block,块的概念,也是在系统中被认为是最小的存储单位
  • 操作系统规定,一个block只能存放一个文件的内容,因此文件占用的空间大小,只能是block的整数倍

读取文件步骤:

1、打开文件

2、找到文件的inode号

3、通过inode号,找到文件数据在磁盘上的位置,也就是block的位置

管理:

  • 分区
  • 格式化
  • 挂载

2、什么命令可以查看磁盘io情况,命令有哪些附加参数可选。

答:iostat命令

语法:
iostat [-c|-d] [-k] [-t] [-x[device]] [interval [count]]

参数:
-c 显示cpu的使用情况
-d 显示磁盘的使用情况
-k 每秒以k bytes为单位显示数据
-t 打印出统计信息开始执行的时间
-x device:指定要统计的磁盘设备名称,默认为所有的磁盘设备
interval:指定两次统计间隔的时间
count:按照interval指定的时间间隔统计的次数

3、对一块磁盘进行分区格式化挂载,并使用fio工具测试磁盘性能。

分区:

①磁盘大小在2T以内,使用fdisk对磁盘进行分区:

  • fdisk /dev/sdb
    m进入选项:
    n: 新建分区
    d: 删除分区
    p: 打印分区表
    q: 退出不保存
    w: 写入并且退出
    

②磁盘大小超过2T,使用parted命令分区,切要将分区转换成GPT分区

parted /dev/sdc

进入parted
    mklabel gpt # 更改分区表类型为gpt,危险磁盘数据都将丢失
    p:打印分区表
    mkpart primary 0 500  # 创建主分区,name为primary,大小为500M
    mkpart logical 501 10000 # 创建逻辑分区
    p:打印分区表
    q:退出

格式化:

针对磁盘分区进行格式化文件系统

mkfs.ext4 /dev/sdc1  # 将sdc1分区格式化为ext4文件系统
mksfs.xfs /dev/sdc2

挂载

待学习。。。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容