服务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次
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,干的越多问题越多)
参考:https://blog.csdn.net/yw804909465/article/details/106758497