服务器IO高问题定位和优化

    xiaoxiao2023-09-28  149

    这次分享主要是针对大家经常面试中遇到的性能相关问题的可能猜测和定位、解决的方法,我在面试的过程中发现好多同学并没有一个清晰的思路

    本课程的主旨及目标

    导致服务器IO的常见原因

    常见定位问题的方法

     

    ==导致服务器IO的常见原因=========================================================================

    简介:磁盘通常是计算机最慢的子系统,也是最容易出现性能瓶颈的地方,因为磁盘离CPU 距离最远而且CPU 访问磁盘要涉及到机械操作,比如转轴、寻轨等。

    占用IO过高,可以做如下考虑

    1)首先考虑写日志内容过多(或者访问量较大)

      1】日志打印的内容是否合理

      前端应用服务器,要避免程序频繁打本地日志、或者异常日志

      2】日志级别是否合理

      3】考虑异步写日志(一般可以解决CPU锯齿波动),为减少  IO操作,将日志写如内存分区;但日志量太大,很容易将内存  写满,再考虑将日志进行压缩。

      2)磁盘满(压测过程中现象:TPS降低,响应时间增加)

      1】找到导致磁盘满的大文件,合理的删除,最好有定期清理脚  本,可以定期清理

      2对磁盘空间进行扩大磁盘容量

      3不好清理的,在主硬盘上进行读写操作,基础数据定时移动  挂载硬盘上 

    3)数据库连接数超限制,导致sleep比较多,sleep任务太多的处理:

      1】程序里每次连接数据库后,记得关闭数据库。

      2】或者,在mysql配置文件中,设置mysql超时时间wait_timout默认是八小时,设置低一点

    4)数据库IO过高,查询量大,可以进行读写分离(增加读库)或者分库操作,减小磁盘压力,调优一些buffer参数以降低IO写的频率

    5)磁盘IO过高是由于读写文件导致的

      1】可以利用raid来减轻压力

    6磁盘本身性能不足

      1】考虑更换新磁盘(性能强劲的)

    ==常见定位问题的方法==================================================================

    Linux系统出现了性能问题,一般我们可以通过topiostatiotopfreevmstat等命令来查看初步定位问题。

    今天我们讲解就是iostatiotop,定位问题的一般步骤:

    Step-1】 iostat这个命令可以给我们提供丰富的IO状态数据,一般我们先通过该命令来查看是否存在性能瓶颈

    Step-2】iotop找出io高的进程

    1iostat常见用法:

    iostat -d -k 1 10        #查看TPS和吞吐量信息

    参数 -d 表示,显示设备(磁盘)使用状态

    -k某些使用block为单位的列强制使用Kilobytes为单位

    1 10表示,数据显示每隔1秒刷新一次,共显示10

    iostat -d -x -k 1 10      #查看设备使用率(%util)、响应时间(await

    使用-x参数我们可以获得更多统计信息。注意一般%util大于70%,I/O压力就比较大说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。磁盘可能存在瓶颈。

    iostat还可以用来获取cpu部分状态值:

    iostat -c 1 10    #查看cpu状态

    注意】idle小于70% IO压力就较大了,一般读取速度有较多的wait

    2、我们通过上面iostat的常用命令基本可以判断IO是否存在瓶颈了,然后我们通过iotop命令来抓出罪魁祸首的进程,这里比较简单直接输入命令,然后执行(一般抓到的是java进程、mysqld,干的越多问题越多)       

     

    最新回复(0)