对新服务器进行健康检查的实用方法?

A-l*_*bby 1 hardware healthcheck benchmark

我目前正在尝试在任何应用程序端使用之前对数据中心的新服务器进行健康检查,作为第一个 QA。

“检查服务器是否可以使用的实用方法和工具是什么?”

关于工具,我正在查看 memtest86 来测试内存和 IOzone 文件系统基准。但我希望应该有更多的其他测试和比这两个更好的工具。

小智 6

我曾经在大型数据中心进行过大量的硬件故障排除,我建议找到一个可启动的 Linux 发行版,任何都可以。如果您有 64 位 CPU,请务必找到带有 64 位图像的图像。 Stresslinux包含一整套工具来对您的服务器施加压力,并将任何硬件故障强制公开。

我个人的“压力”工具 - 它可以锤击硬盘(S),内存和处理器(S)。

压力

关于 memtest86+ 的快速说明

这不是压力套件的一部分,但显然您知道它存在。一定要确保您使用的是 memtest86+(强调 +) - 它比原始 memtest86 更好地处理 64 位系统和大量内存分配。

内存测试

这将产生n 个在 malloc() 上旋转的进程,每个进程 256MB。

stress -m n &
Run Code Online (Sandbox Code Playgroud)

因此,您可能希望将您拥有的内存量除以 256MB(大致),以将其全部占用。这将清除任何明显的错误,您可能会看到 EDAC 或 MCE(取决于您的处理器/主板),或内核崩溃/硬崩溃。理想情况下,您可以让它运行几个小时,以便在负载下加热。您可以检查系统日志以了解这些错误。

CPU测试

这将产生n 个在 sqrt() 上旋转的进程。

stress -c n &
Run Code Online (Sandbox Code Playgroud)

您希望n是系统中的核心数。就让它运行一段时间而言,这里的相同概念也适用。

磁盘子系统测试

这需要以某种方式格式化硬盘,如果您使用的是 RAID,如果您在安装驱动器并对其施加压力之前已经进行了设置,您将获得更好的结果。

将目录更改为您要强调的磁盘的分区/区域。可用空间越多越好。

cd /hard/disk/partition
Run Code Online (Sandbox Code Playgroud)

这将产生n 个在 write() 上旋转的进程,每个进程 1GB

stress -d 32 n &
Run Code Online (Sandbox Code Playgroud)

使用以下命令监控磁盘 IO:

iostat -x 5
Run Code Online (Sandbox Code Playgroud)

消除压力

要终止所有压力进程,是的,您可以同时运行内存、CPU 和硬盘检查,但这会使隔离组件变得更加困难:

pkill -9 -f stress
Run Code Online (Sandbox Code Playgroud)

验证您的测试

显然,你运行了所有这些东西,你需要看到某种结果或确认。

内存/CPU

您只需要检查系统日志中的机器检查异常 (MCE)、错误检测和纠正 (EDAC)、内存不足 (OOM) 等。

zgrep -i -P ".*(error|warn|fail|panic|edac|mce|exception|oom-killer|oops).*" /var/log/kern.log* /var/log/dmesg /var/log/daemon.log* 
Run Code Online (Sandbox Code Playgroud)

磁盘子系统

这可能是最容易检测到的比任何其他组件都多的组件,smartctl通常安装在大多数 *NIX 操作系统上,它是smartmontools包的一部分。以下命令需要 root 访问权限:

如果您有多个磁盘或 RAID 控制器,则/dev/sda方面可能需要更改。

sudo smartctl -a /dev/sda
Run Code Online (Sandbox Code Playgroud)

下面是完整命令的一些示例输出,我将指定您真正应该在页面下方查找的内容。

SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate     0x000b   099   099   016    Pre-fail  Always       -       65537
2 Throughput_Performance  0x0005   136   136   054    Pre-fail  Offline      -       95
3 Spin_Up_Time            0x0007   121   121   024    Pre-fail  Always       -       320 (Average 304)
4 Start_Stop_Count        0x0012   100   100   000    Old_age   Always       -       18
5 Reallocated_Sector_Ct   0x0033   100   100   005    Pre-fail  Always       -       0
7 Seek_Error_Rate         0x000b   100   100   067    Pre-fail  Always       -       0
8 Seek_Time_Performance   0x0005   144   144   020    Pre-fail  Offline      -       28
9 Power_On_Hours          0x0012   098   098   000    Old_age   Always       -       15407
10 Spin_Retry_Count        0x0013   100   100   060    Pre-fail  Always       -       0
12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       18
192 Power-Off_Retract_Count 0x0032   100   100   000    Old_age   Always       -       37
193 Load_Cycle_Count        0x0012   100   100   000    Old_age   Always       -       37
194 Temperature_Celsius     0x0002   253   253   000    Old_age   Always       -       22 (Min/Max 15/31)
196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0022   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0008   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x000a   200   200   000    Old_age   Always       -       0
Run Code Online (Sandbox Code Playgroud)

您需要了解的主要属性如下:

重新分配_扇区_Ct

这通常应该小于 1000。

这些扇区必须重新分配到硬盘的另一部分,因为前一个扇区不健康。

温度_摄氏度

这应该小于 55,在某些情况下命令本身会有一个最小值/最大值 - 但低于 55 是我们看到健康磁盘操作的地方。

Current_Pending_Sector

必须为 0。

离线_无法纠正

必须为 0。

UDMA_CRC_Error_Count

应该是0,有几个没问题(小于100)。

另请注意,这些可能表示 SATA/SAS 电缆损坏。

有很多方法可以对您的服务器进行压力和基准测试,这只是我感到满意并取得了很好的结果的一种方式。

我希望这有帮助!