服务IO高问题定位和优化

一、原因分析:

占用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系统出现了性能问题,一般我们可以通过top、iostat、iotop、free、vmstat等命令来查看初步定位问题。

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

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

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

1、iostat常见用法:

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

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

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

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

 服务IO高问题定位和优化

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

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

 服务IO高问题定位和优化

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

iostat -c 1 10 #查看cpu状态

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

 服务IO高问题定位和优化

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

服务IO高问题定位和优化

 

上一篇:Disk I/O is overloaded on 192.167.3.130


下一篇:TCP KeepAlive机制理解与实践小结