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

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

本课程的主旨及目标

导致服务器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,干的越多问题越多)       

 

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 对于MySQL磁盘IO问题,可以尝试以下几种方法来解决:1.优化SQL语句,减少查询时间;2.增加MySQL缓存,提升系统性能;3.更换更快的硬盘,提磁盘IO速度;4.调整MySQL参数,显著提升系统性能;5.使用读写分离,把读写操作分离出来;6.使用可靠的集群系统,提系统的扩展性和可用性;7.使用SSD来加速磁盘的读取和写入速度。 ### 回答2: MySQL磁盘IO问题主要是由于大量的磁盘读写操作导致的。以下是解决MySQL磁盘IO的几种方法: 1. 优化查询语句:检查和优化查询语句,尽量减少不必要的磁盘读取。可以使用索引,避免全表扫描,以提查询效率。 2. 调整MySQL缓存:增大MySQL的缓冲区以减少对磁盘的读写操作。可以适当调整参数innodb_buffer_pool_size和key_buffer_size。 3. 分散磁盘IO请求:将数据、日志和临时表等分别存储在不同的物理磁盘上,以减少磁盘IO的竞争。 4. 增加内存:提升系统的物理内存,增加系统缓存,减少对磁盘的读写操作。 5. 使用SSD硬盘:使用SSD(固态硬盘)替换传统的机械硬盘,SSD硬盘具有更的读写速度,能够显著提升磁盘IO性能。 6. 合理分区:对大表进行分区,将数据分散存储在多个分区上,减轻单个分区的IO负载。 7. 减少不必要的索引:评估并删除不再使用的索引,避免更新索引时的额外IO开销。 8. 使用缓存技术:可以考虑使用缓存技术,如Redis,将频繁读取的数据缓存到内存中,减少磁盘IO操作。 以上是解决MySQL磁盘IO的一些方法,具体措施可以根据实际情况进行调整,以达到减少磁盘IO的目的。同时,也可以通过监控工具不断优化,以保持系统的性能和稳定性。 ### 回答3: MySQL磁盘I/O的情况可能是由于以下几个原因导致的:缓存不足、查询语句不优化、磁盘性能低等。 首先,可以尝试优化数据库的缓存设置。MySQL有一个用于缓存数据和索引的缓冲池(InnoDB缓冲池)。可以通过增加缓冲池的大小来减少对磁盘的访问次数,提系统性能。 其次,需要优化查询语句,避免不必要的全表扫描和重复查询。可以使用索引来加快查询速度,同时避免在查询语句中使用大量的JOIN和子查询等操作,优化查询逻辑。 此外,可以考虑使用更速的磁盘设备。当磁盘性能较低时,可以通过升级为更速的磁盘设备或使用RAID等技术来提升磁盘性能,减少I/O等待时间。 另外,还可以使用MySQL的分区表功能来将大表拆分成较小的分区,减少单个分区上的磁盘访问压力,提磁盘IO性能。 最后,可以通过调整MySQL的参数来优化磁盘I/O性能。例如,可以调整innodb_flush_method参数来控制MySQL数据的写入方式,选择适合的方式来提磁盘I/O性能。 需要根据具体情况分析和综合考虑以上解决方案,并逐步尝试和优化,以降低MySQL磁盘I/O的负载,提系统性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值