软件突袭拖慢了我的服务器

软件突袭拖慢了我的服务器

我的服务器显示平均负载很高,经过调查发现有很多由raid引起的IO。

服务器使用 i7 3770 处理器、32GB 内存和 2x3TB 磁盘,带有 CentOS7 和软件 raid 设置。

[root@server ~]# cat /proc/mdstat

Personalities : [raid1]
md2 : active raid1 sda3[1] sdb3[0]
      1073610752 blocks super 1.2 [2/2] [UU]
      [===============>.....]  check = 77.3% (830580032/1073610752) finish=333.7min speed=12133K/sec
      bitmap: 4/8 pages [16KB], 65536KB chunk

md3 : active raid1 sda4[1] sdb4[0]
      1839090112 blocks super 1.2 [2/2] [UU]
      bitmap: 3/14 pages [12KB], 65536KB chunk

md0 : active raid1 sda1[1] sdb1[0]
      16760832 blocks super 1.2 [2/2] [UU]
        resync=DELAYED

md1 : active raid1 sda2[1] sdb2[0]
      523712 blocks super 1.2 [2/2] [UU]
        resync=DELAYED

unused devices: <none>

这项检查已自动启动,当我注意到它还不到 12 小时时,它已进行了 54%。我检查了磁盘健康状况,我的服务器提供商也在 2 天前对其进行了测试,因为我确信磁盘导致我的服务器平均负载过高。

当我检查哪些进程延迟时,我得到了这个,每次我运行它时,其中一个 raid 进程就在那里

[root@server ~]# top -b -n 1 | awk '{if (NR <=7) print; else if ($8 == "D") {print; count++} } END {print "Total status D (I/O wait probably): "count}'
top - 08:38:38 up 1 day, 16:23,  3 users,  load average: 6.33, 6.32, 6.22
Tasks: 288 total,   2 running, 280 sleeping,   4 stopped,   2 zombie
%Cpu(s):  3.9 us,  0.7 sy,  0.3 ni, 76.6 id, 18.6 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 32460092 total,   265352 free,  7304544 used, 24890196 buff/cache
KiB Swap: 16760828 total, 16727480 free,    33348 used. 24434784 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
    387 root      20   0       0      0      0 D   0.0  0.0   0:24.48 kworker/u16:4
    545 root      20   0       0      0      0 D   0.0  0.0   1:14.82 jbd2/md2-8
 449624 root      25   5       0      0      0 D   0.0  0.0   5:48.69 md2_resync
Total status D (I/O wait probably): 3

这是正常现象吗?是软件还是硬件问题?

我怀疑它减慢了我的服务器速度,因为当我检查顶级进程时,没有哪个进程的 CPU 消耗过多,而且平均负载几乎总是高于 6。

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 899323 mysql     20   0 30.285g 4.844g   9304 S   1.7 15.6  86:07.46 mysqld
    477 root      20   0       0      0      0 S   0.7  0.0   0:09.68 md0_raid1
   3359 root      30  10  277464  33136   2712 S   0.7  0.1  12:37.91 python2.7
 310858 mailnull  20   0   77356   7824   3856 D   0.7  0.0   0:00.03 exim
     18 root      20   0       0      0      0 S   0.3  0.0   1:42.94 rcuos/0
    407 root       0 -20       0      0      0 S   0.3  0.0   0:08.27 kworker/+
    625 root      20   0   94284  53560  53372 S   0.3  0.2   1:32.82 systemd-+
   3504 root      20   0  216748  27800   5324 S   0.3  0.1   1:10.35 httpd
 309919 nobody    20   0  217164  25440   2680 S   0.3  0.1   0:00.04 httpd

现在,执行此 top 命令后,这是正常运行时间的结果

[root@server ~]# uptime
 17:47:19 up 2 days,  1:32,  1 user,  load average: 5.87, 6.23, 6.06

更新

以下是突袭检查的结果

[root@server ~]# cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 sda3[1] sdb3[0]
      1073610752 blocks super 1.2 [2/2] [UU]
      bitmap: 4/8 pages [16KB], 65536KB chunk

md3 : active raid1 sda4[1] sdb4[0]
      1839090112 blocks super 1.2 [2/2] [UU]
      bitmap: 11/14 pages [44KB], 65536KB chunk

md0 : active raid1 sda1[1] sdb1[0]
      16760832 blocks super 1.2 [2/2] [UU]

md1 : active raid1 sda2[1] sdb2[0]
      523712 blocks super 1.2 [2/2] [UU]

unused devices: <none>

我能做些什么来修复它吗?

答案1

这已关闭(至少在 CentOS 6 上,我手边没有 C7 盒,因为systemd仍然会给我带来荨麻疹)到文件/etc/cron.d/raid-check。这会安排每周一次的 RAID 清理。它不应该与 HDD 的实际使用相冲突,但即使是完全服从的算法,当系统 IO 在新的负载下大幅增加时,仍会有一些退避时间。

您可以通过编辑文件(或在 中禁用)来减少该作业的运行频率,甚至根本不运行该作业/etc/sysconfig/raid-check。如果您认为您确实遇到了磁盘问题,那么在测试假设时最好将其禁用(但请确保您的备份是最新的,并且您已经测试了您的恢复!)。一旦您确定了发生了什么,最好重新启用它。我会每月至少运行一次。

答案2

经过进一步检查,我发现 sdb 磁盘有一些关于固件的警告

=== START OF INFORMATION SECTION ===
Model Family:     Seagate Barracuda 7200.14 (AF)
Device Model:     ST3000DM001-9YN166
Serial Number:    W1F0M6VY
LU WWN Device Id: 5 000c50 0525256dd
Firmware Version: CC4B
User Capacity:    3,000,592,982,016 bytes [3.00 TB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Rotation Rate:    7200 rpm
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ATA8-ACS T13/1699-D revision 4
SATA Version is:  SATA 3.0, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is:    Sun Mar 26 19:49:32 2017 CEST

==> WARNING: A firmware update for this drive may be available,
see the following Seagate web pages:
http://knowledge.seagate.com/articles/en_US/FAQ/207931en
http://knowledge.seagate.com/articles/en_US/FAQ/223651en

之后,我使用 Munin 插件检查了两个磁盘的延迟,结果显示 sdb 的延迟比 sda 磁盘高得多。之后,我向托管服务提供商发送了邮件,他们免费更换了这个 baracuda 磁盘。因此,更换磁盘解决了我的问题,尽管两个磁盘在测试时看起来都很好,并且都通过了测试。

相关内容