iotop出现SWAPIN使用率很高99.99%的处理

定义:SWAPIN

依据 iotop的参考手册,定义为:
the percentage of time the thread/process spent while swapping in
进程或者线程花费在交换内存时间的百分比。
如果出现SWAPIN百分比很高,可以肯定内存不足了,赶快通过free -h 查看一下内存情况,并合理优化内存相关配置。

缘由

最近在优化MySQL数据库,处理上亿数据的导入,通过优化innodb的配置,使用LOAD INFILE达到了每秒15K左右的插入速度。

运行一段时间后,发现继续入库速度会减慢,使用IOTOP发现写的速度很低,而SWAPIN的负载很高,达到99.99%,网络上相关信息很少。一旦出现这个现象,mysql反应很慢。

经过检查,发现系统内存可用空间很少,SWAP分区占用50%以上,发现是MySQL进程占用空间太大导致,通过修改缓存大小改善这个问题:

// 修改缓存到12GB=12*1024*1024*1024
SET GLOBAL innodb_buffer_pool_size=12884901888;
// 通过如下命令查看改变的状态
SHOW STATUS WHERE Variable_name='InnoDB_buffer_pool_resize_status';

通过释放更多的可用空间做为内存交换,而不是使用磁盘的SWAP空间,加快系统的运行。
我的服务器配置如下:
256GB RAM, 双CPU 共 40 Cores
采用docker部署MySQL容器16个,配置如下:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
max_connections=1000

explicit_defaults_for_timestamp=true

slow-query-log = off
#slow_query_log_file = /var/log/slow-query.log
#long_query_time = 1
#log-queries-not-using-indexes = on

## InnoDB options
innodb_adaptive_flushing        = 1
innodb_buffer_pool_instances    = 4
innodb_buffer_pool_size         = 12G
innodb_file_per_table           = 1
innodb_flush_log_at_trx_commit  = 2
innodb_flush_method             = O_DIRECT
innodb_io_capacity              = 800
innodb_log_file_size            = 7G
innodb_log_files_in_group       = 4
innodb_log_buffer_size          = 64M
innodb_max_dirty_pages_pct      = 50
innodb_read_io_threads          = 32
innodb_write_io_threads         = 16
innodb_thread_concurrency       = 64


max_allowed_packet              =100MB

前期,我把innodb_buffer_pool_size设置为16GB,结果每一个MySQL进程占用20GB,实际使用达到16GB,16个MySQL把内存耗尽,导致MySQL处理速度变慢。
我是按照256GB/16 = 16GB,按75%内存估算,配置为12GB。

外号:如何提高入库速度

在处理数据入库时,我的文件是通过程序生成,到达10多个字段,而且主键索引是字符串,还带其他索引,目前优化可以到15K左右,100W记录在55s左右,约18K,如果出现SWAPIN占用很高时,入库速度只有6K多。

提高入库速度主要依赖于服务器的硬盘速度,原来在老机器上操作,速度提升有限,基本在7~8K。
由于入库对并发利用率不高CPU多核性能利用不上,甚至比不上台式机,可是如果磁盘速度提升,入库速度就会有大幅度提升。10000转的机械硬盘就比不上15000转的。

主要优化两个地方:
innodb_buffer_pool_size 这个设置为可用内存的75%(官宣)
innodb_log_file_size 日志文件大小,这个依赖于入库的数据量,通过提高该参数,实现尽量少的刷盘,提高入库速度。如何计算合理的日志文件大小参见文章: How to calculate a good InnoDB log file size

### 回答1: 当Linux磁盘IO使用率时,需要采取以下措施进行处理: 1. 检查磁盘IO性能:使用命令"iostat"或"iotop"来查看各个磁盘的IO使用情况,确定是哪一个磁盘的IO使用率。 2. 确定IO进程:使用命令"pidstat" 或 "iotop"查找到占用磁盘IO最的进程,并确认其是否为系统进程,或者可能是误操作引起的异常进程。 3. 优化IO进程:对于占用IO的进程,可以考虑进行优化操作,例如优化数据库、调整程序逻辑、增加缓存等,以降低其IO使用率。 4. 调整IO调度器:对于某些特定的磁盘IO问题,可以尝试调整IO调度器,如将默认的"cfq"调度器改为"deadline"或"Noop"调度器,通过更改调度算法来优化磁盘IO性能。 5. 添加缓存:使用缓存技术,如使用Redis或Memcached等内存数据库,将频繁访问的数据存储在内存中,减轻磁盘的IO负担。 6. 增加磁盘吞吐量:如果磁盘负载过,可以考虑增加磁盘吞吐量,如使用RAID技术或增加磁盘数量。 7. 优化文件系统:对于某些特定的文件系统,可以通过调整文件系统参数来优化磁盘IO性能,如调整磁盘超时时间、缓存大小等。 8. 检查磁盘是否故障:如果上述措施都没有明显效果,可以检查磁盘是否存在硬件故障,包括磁盘本身是否有错误或磁盘连接是否不稳定,必要时更换磁盘。 总之,处理Linux磁盘IO使用率需要综合考虑以上各个方面,根据具体情况进行相应的优化和调整,以降低IO使用率并提升系统性能。 ### 回答2: 当Linux的磁盘IO使用率时,可以采取以下处理方法: 1. 分析原因:首先,需要通过系统监控工具(如top、iostat等)查看磁盘IO使用率的具体原因。可能的原因包括磁盘读写操作过多、磁盘故障、应用程序限制、系统配置不当等。 2. 优化磁盘IO:通过优化系统的文件系统,可以提磁盘IO性能。可以考虑使用性能的文件系统(如XFS、Btrfs)来替换默认的文件系统,或者进行磁盘分区以减少IO负载。此外,可以调整文件系统的挂载参数、提磁盘缓存等方式来提升磁盘IO性能。 3. 优化应用程序:如果磁盘IO使用率是由于某些应用程序所引起的,可以对这些应用程序进行优化。例如,优化数据库的读写操作,使用缓存技术减少磁盘IO等。 4. 检查磁盘健康状态:磁盘故障可能导致磁盘IO使用率。因此,需要定期检查磁盘的健康状态,并及时更换坏盘。 5. 调整系统配置:根据服务器的硬件和实际需求,适当调整系统的参数配置。例如,可以调整磁盘调度算法、调整内核参数等来优化磁盘IO性能。 6. 负载均衡:如果是多台服务器组成的集群环境,可以通过负载均衡的方式来分摊磁盘IO负载。将磁盘IO请求均匀分布到多个磁盘上,可以提整个系统的磁盘IO性能。 总之,处理Linux磁盘IO使用率需要综合考虑软硬件环境,并通过优化系统配置、优化应用程序、检修磁盘等方式来提磁盘IO性能。 ### 回答3: 当Linux磁盘IO使用率时,有几个常见原因和相应的处理方法。 首先,可能是由于过多的并发读写操作导致的磁盘IO使用率。可通过增加磁盘数量或者使用RAID等技术来提磁盘吞吐量,分散读写负载。可以使用工具如iostat来监测磁盘IO使用情况并定位问题。 其次,可能是因为系统频繁进行磁盘同步操作导致的磁盘IO使用率。在Linux系统中,可以通过修改文件系统的挂载参数来调整同步策略,如在/etc/fstab文件中将sync参数改为async,或者使用noatime参数禁止更新最后访问时间。这些操作可以减少对磁盘的同步写操作,提性能。 另外,可能是因为某些应用程序或进程不断进行大量的小文件读写操作导致的磁盘IO使用率。可以通过使用工具如iotop来查看系统中哪些进程消耗大量的IO资源,并找出造成问题的进程。然后可以调整相应的应用程序设置或者优化代码逻辑,减少其对磁盘的读写负载。 此外,还可以通过调整系统内核参数来优化磁盘IO性能。例如,可以增加内核中针对磁盘IO操作的线程数量,修改相关的文件系统参数等。需要谨慎地调整这些参数,可以参考相关的文档或咨询专业人士。 总之,针对Linux磁盘IO使用率的问题,可以采取多种手段进行处理,包括优化应用程序设计、调整系统配置和内核参数等。根据具体的情况和需求,选择相应的方法进行优化,以提磁盘IO性能和系统稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值