目录
1、内存
(1) 查看内存指令
(2) 清理缓存
(3) swap分区的作用
2、cpu
(1) 查看cpu核心数
(2) 查看cpu使用率
(3) 查看cpu使用百分比
(5) 查看cpu温度
(6) cpu压力测试
3、磁盘
(1) 查看磁盘信息
(2) 数据恢复相关
(3) 查看磁盘io
(4) 磁盘压测
free命令:free
命令用于显示系统内存使用情况,包括总内存、已使用内存、空闲内存以及缓冲区和缓存的使用情况。
free -h 或者 free -m
该命令以人类可读的方式显示内存大小(以MB或GB为单位),输出示例如下:
total used free shared buffers cached Mem: 7.8G 2.4G 5.3G 342M 112M 1.1G -/+ buffers/cache: 1.2G 6.6G Swap: 2.0G 0B 2.0G
在输出中,"Mem" 行显示了总内存、已使用内存和空闲内存的详细信息。"-/+ buffers/cache" 行显示了实际使用内存和可用内存(不包括缓冲区和缓存)。
top命令:top
命令用于实时监视系统的各种性能指标,包括内存使用情况。启动 top
命令后,按下 "M" 键可以按内存使用排序进程列表,以便查看占用内存最多的进程。
top
在 top
命令的输出中,内存使用情况显示在 "Mem" 行中,包括总内存、已使用内存、空闲内存、缓冲区和缓存的使用情况。
vmstat命令:vmstat
命令用于报告虚拟内存的统计信息,包括内存使用情况、交换分区使用情况、进程、IO等。
vmstat
vmstat
命令的输出包含多个字段,其中 "free" 列显示空闲内存的数量,"swpd" 列显示交换分区已使用的数量,"buff" 和 "cache" 列显示缓冲区和缓存的大小。
htop命令:htop
是一个更强大和交互式的进程监视器,可以提供更直观的内存使用情况展示。
使用 sync 命令:
sync
sync 命令用于将内存中的数据立即写入磁盘,并清空文件系统缓冲区。这将导致缓冲区和缓存的数据被刷新到磁盘上,释放相关的内存。
使用 drop_caches 参数:
echo 1 > /proc/sys/vm/drop_caches
使用 echo 命令将数字 1 写入 /proc/sys/vm/drop_caches 文件。这将清空缓冲区(buffers)。 如果你想清空缓存(cached),可以使用数字 2 或 3 替代 1:
echo 2 > /proc/sys/vm/drop_caches # 清空缓存 echo 3 > /proc/sys/vm/drop_caches # 清空缓冲区和缓存
注意:清理缓冲区和缓存可能会导致一些性能下降,因为系统需要重新读取磁盘上的数据到缓冲区和缓存中。
这些方法会清理 Linux 系统中的缓冲区和缓存,释放相关的内存。在普通的系统运行中,缓冲区和缓存的占用是正常的,它们可以提高系统性能。通常情况下,不需要频繁地手动清理缓冲区和缓存。只有在特殊情况下,如进行性能测试或遇到内存压力较大的情况时,才需要清理缓冲区和缓存。
扩展可用内存:Swap 分区允许将部分不常用的内存数据存储到硬盘上,从而释放物理内存供其他进程使用。当系统的物理内存不足时,Swap 分区可以提供额外的可用内存空间。
内存回收机制:Swap 分区可以作为一种内存回收机制。当系统内存使用达到一定阈值时,操作系统会将不活跃的内存页面移入 Swap 分区,从而提供更多的空闲物理内存给活跃进程使用。当需要访问 Swap 中的数据时,操作系统会将其移回物理内存。
支持休眠和睡眠模式:Swap 分区对于休眠(Hibernate)和睡眠(Suspend)模式的支持至关重要。当系统进入休眠或睡眠状态时,当前的内存状态将被保存到 Swap 分区中,以便在唤醒时恢复到先前的状态。
系统稳定性保护:Swap 分区可以帮助系统避免由于内存不足而导致的崩溃和系统错误。当系统的物理内存耗尽时,Linux 内核会尝试将部分内存页面移到 Swap 分区,以避免系统宕机或进程崩溃。
需要注意的是,Swap 分区并不是用于替代物理内存的解决方案。它是一种补充和扩展内存的机制,适用于处理临时的内存压力或提供休眠和睡眠模式的支持。对于性能敏感的应用程序和服务器,应当优先考虑增加物理内存来改善性能,而不是依赖过多的 Swap 分区。合理设置 Swap 分区的大小,以及根据实际需求调整其使用情况,是确保系统正常运行的重要方面。
使用 lscpu 命令:
lscpu
这个命令将显示有关 CPU 和系统架构的详细信息,包括 CPU 核心数、线程数、套接字数等。在输出的 "CPU(s)" 行中,"Core(s) per socket" 列显示每个 CPU 套接字的核心数,"Socket(s)" 列显示 CPU 套接字的数量。
使用 nproc 命令:
nproc
这个命令将简单地显示当前系统中的 CPU 核心数。
使用 /proc/cpuinfo 文件:
cat /proc/cpuinfo | grep "core id" | sort | uniq | wc -l
这个命令将读取 /proc/cpuinfo 文件,并统计 "core id" 字段的唯一值数量,即 CPU 核心数。
这些方法将帮助你查看 CentOS 系统中的 CPU 核心数。请注意,CPU 核心数表示物理 CPU 中的核心数量,并不考虑超线程技术(如果有的话)。
使用 top 命令:
top
top 命令将显示系统的实时性能信息,包括 CPU 使用率。在 top 命令的输出中,可以查看 "%Cpu(s)" 行,其中的 "%idle" 列显示 CPU 的空闲时间,而 "%us" 列显示 CPU 的用户态使用率,"%sy" 列显示 CPU 的系统态使用率,"%wa" 列显示 CPU 的等待 I/O 的使用率等。 可以按 "1" 键查看每个 CPU 核心的详细信息。
使用 mpstat 命令:
mpstat
mpstat 命令用于显示多核处理器的实时统计信息,包括每个 CPU 核心的使用率。默认情况下,mpstat 命令显示所有 CPU 核心的平均使用率。 若要显示每个 CPU 核心的详细信息,可以使用以下命令:
mpstat -P ALL
使用 sar 命令: 首先,你需要安装并设置 sysstat 工具包。然后,可以使用 sar 命令来获取系统资源的历史统计信息,包括 CPU 使用率。以下是使用 sar 命令查看 CPU 使用率的示例:
sar -u
这个命令将显示 CPU 使用率的历史记录,包括用户态、系统态和空闲时间的百分比。
这些方法将帮助你查看 CentOS 系统中的 CPU 使用率。请注意,每个命令的输出可能会略有不同,具体取决于系统配置和命令的参数设置。
CPU 使用率 = (总 CPU 时间 - 空闲 CPU 时间) / 总 CPU 时间 * 100
其中,总 CPU 时间是指在特定时间间隔内 CPU 的总运行时间,而空闲 CPU 时间是指在同一时间间隔内 CPU 处于空闲状态的时间。
在 Linux 系统中,可以使用以下步骤来计算 CPU 使用百分比:
获取初始的 CPU 时间和空闲 CPU 时间:
cat /proc/stat | grep 'cpu ' | awk '{print $2+$3+$4+$5+$6+$7+$8 " " $5}'
这个命令将读取 /proc/stat 文件中的 CPU 统计信息,并提取总 CPU 时间和空闲 CPU 时间。
等待一段时间(例如,几秒钟)。
获取更新后的 CPU 时间和空闲 CPU 时间:
cat /proc/stat | grep 'cpu ' | awk '{print $2+$3+$4+$5+$6+$7+$8 " " $5}'
计算 CPU 使用率:
将初始的总 CPU 时间和空闲 CPU 时间保存到变量中。
计算更新后的总 CPU 时间和空闲 CPU 时间与初始值之间的差值。
使用上述公式计算 CPU 使用百分比。
下面是一个示例脚本,演示如何计算 CPU 使用百分比(以 Bash 脚本为例):
#!/bin/bash # 获取初始的 CPU 时间和空闲 CPU 时间 read cpu_total_idle cpu_idle <<< $(cat /proc/stat | grep 'cpu ' | awk '{print $2+$3+$4+$5+$6+$7+$8 " " $5}') # 等待一段时间 sleep 5 # 获取更新后的 CPU 时间和空闲 CPU 时间 read cpu_total_idle_new cpu_idle_new <<< $(cat /proc/stat | grep 'cpu ' | awk '{print $2+$3+$4+$5+$6+$7+$8 " " $5}') # 计算 CPU 使用率 cpu_total=$((cpu_total_idle_new - cpu_total_idle)) cpu_usage=$((100 - (cpu_idle_new - cpu_idle) * 100 / cpu_total)) echo "CPU 使用率: $cpu_usage%"
# 安装 yum install -y lm_sensors # 检测传感器 sensors-detect # 检测 sensors
# 下载安装sysbench yum install -y sysbench # 压测 sysbench cpu --cpu-max-prime=20000 --threads=8 --time=60 run
Prime numbers limit: 20000 Initializing worker threads... Threads started! CPU speed: events per second: 1191.98 General statistics: total time: 10.0008s total number of events: 11922 Latency (ms): min: 1.56 avg: 1.68 max: 4.65 95th percentile: 1.76 sum: 19985.37 Threads fairness: events (avg/stddev): 5961.0000/7.00 execution time (avg/stddev): 9.9927/0.01 # 解析 Prime numbers limit: 设置的质数计算任务的限制。 Initializing worker threads: 初始化工作线程。 Threads started!: 工作线程已启动。 CPU speed: CPU 的速度,以每秒事件数为单位。 General statistics: total time: 总共执行的时间。 total number of events: 完成的事件总数。 Latency (ms): 响应时间的统计信息。 min: 最小响应时间。 avg: 平均响应时间。 max: 最大响应时间。 95th percentile: 响应时间的第 95 百分位数。 sum: 响应时间的总和。 Threads fairness: 线程公平性的统计信息。 events (avg/stddev): 每个线程的平均事件数和标准差。 execution time (avg/stddev): 每个线程的平均执行时间和标准差。 # 结果 通过这些统计数据,你可以了解 CPU 压力测试的执行结果和性能指标。例如,CPU 的事件速度是每秒 1191.98 个事件,总共执行了 11922 个事件。在响应时间方面,最小响应时间为 1.56 毫秒,平均响应时间为 1.68 毫秒,最大响应时间为 4.65 毫秒,95% 的响应时间低于 1.76 毫秒。线程公平性方面,每个线程的平均事件数为 5961,标准差为 7.00。
使用 df 命令:
df -h
这个命令将显示磁盘空间使用情况,包括每个挂载点的文件系统、总容量、已用空间、可用空间和使用率。"-h" 参数将以人类可读的方式显示磁盘大小。
使用 du 命令:
du -h /path/to/directory
这个命令将显示指定目录的磁盘使用情况,包括目录下的所有文件和子目录的大小。"-h" 参数将以人类可读的方式显示磁盘大小。
使用 fdisk 命令:
sudo fdisk -l
这个命令将显示系统上的所有磁盘分区信息,包括磁盘的设备名称、分区表类型、分区大小等。
使用 parted 命令:
sudo parted -l
这个命令将显示更详细的磁盘信息,包括磁盘的设备名称、分区表类型、分区大小、文件系统类型等。
使用 lsblk 命令:
lsblk
这个命令将显示块设备信息,包括磁盘的设备名称、分区、挂载点等。
适用于磁盘数据恢复的工具:
TestDisk:TestDisk 是一款跨平台的开源工具,适用于各种操作系统。它可以帮助恢复丢失的分区和修复引导问题。
PhotoRec:PhotoRec 是 TestDisk 的伴侣工具,用于恢复丢失的文件。你可以通过安装 TestDisk 软件包来同时获得 PhotoRec。
extundelete:extundelete 是一款专门用于恢复已删除的 ext2、ext3 和 ext4 文件系统中文件的工具。 注意:在使用 extundelete 恢复文件之前,请确保你在恢复过程中避免在相关分区上写入新的数据,以避免进一步覆盖被删除的文件。
Scalpel:Scalpel 是一款用于文件恢复的开源工具,它可以通过文件类型的特征进行文件碎片的扫描和恢复。你可以在 CentOS 上安装 Scalpel。
在使用任何磁盘数据恢复工具时,重要的是先停止写入新数据到需要恢复的磁盘或分区,以防止覆盖原始数据。此外,在进行磁盘数据恢复之前备份重要数据,并遵循工具的文档和使用说明,以获得最佳的恢复结果。
使用 iostat 命令:
iostat -dx # 输出解析 Device:磁盘设备的名称。 rrqm/s:每秒合并的读取请求次数,即每秒发起的读取请求需要合并的次数。 wrqm/s:每秒合并的写入请求次数,即每秒发起的写入请求需要合并的次数。 r/s:每秒完成的独立读取请求次数。 w/s:每秒完成的独立写入请求次数。 rkB/s:每秒读取的数据量,以千字节(KB)为单位。 wkB/s:每秒写入的数据量,以千字节(KB)为单位。 avgrq-sz:平均请求大小,即平均每个 I/O 请求的扇区数。 avgqu-sz:平均请求队列长度,即平均每个设备的 I/O 请求队列中的请求数。 await:平均等待时间,即平均每个 I/O 请求从提交到完成的时间(包括排队时间)。 r_await:平均读取等待时间,即平均每个读取请求从提交到完成的时间。 w_await:平均写入等待时间,即平均每个写入请求从提交到完成的时间。 svctm:平均服务时间,即平均每个 I/O 请求的服务时间(不包括排队时间)。 %util:设备的利用率,即设备在指定时间间隔内的活动百分比。它表示设备的繁忙程度。
这个命令将显示磁盘的平均 I/O 统计信息,包括读取速度、写入速度、I/O 请求和等待时间等。"-d" 参数用于显示磁盘设备的统计信息,"-x" 参数用于显示更详细的磁盘 I/O 统计。
使用 vmstat 命令:
vmstat -d # 输出解析 disk:磁盘设备的标识。 reads:读取次数。 total:自系统启动以来从磁盘读取的次数。 merged:合并的读取次数。 sectors:自系统启动以来从磁盘读取的扇区数。 ms:自系统启动以来读取操作花费的毫秒数。 writes:写入次数。 total:自系统启动以来写入磁盘的次数。 merged:合并的写入次数。 sectors:自系统启动以来写入磁盘的扇区数。 ms:自系统启动以来写入操作花费的毫秒数。 cur:当前请求队列的请求数。 sec:合并请求的次数。 根据上述解释,例如对于 sda 磁盘,自系统启动以来从该磁盘读取了 6467 次,合并了 4 次读取请求,共读取了 429193 个扇区,读取操作花费了 2873 毫秒。同时,自系统启动以来对 sda 磁盘进行了 25945 次写入,合并了 1478 次写入请求,共写入了 2051264 个扇区,写入操作花费了 14634 毫秒。当前请求队列中没有正在进行的操作,合并请求的次数为 12。
这个命令将显示磁盘的活动统计信息,包括读取和写入的次数、块数、每秒的传输速率等。
使用 sar 命令:
sar -d # 输出解析 08:10:01 PM:时间戳,表示统计数据的时间点。 DEV:磁盘设备的名称。 tps:每秒完成的传输次数,表示设备的总 I/O 操作数(读取和写入)。 rd_sec/s:每秒读取的扇区数。 wr_sec/s:每秒写入的扇区数。 avgrq-sz:平均请求大小,即每个 I/O 请求的扇区数。 avgqu-sz:平均请求队列长度,表示每个设备的 I/O 请求队列中的请求数。 await:平均等待时间,表示每个 I/O 请求从提交到完成的时间(包括排队时间)。 svctm:平均服务时间,表示每个 I/O 请求的服务时间(不包括排队时间)。 %util:设备的利用率,表示设备在指定时间间隔内的活动百分比,即设备的繁忙程度。
这个命令将显示磁盘的活动统计信息,包括读取和写入的次数、传输速率、等待时间等。sar 命令通常需要事先安装并配置 sysstat 工具。
使用 iotop 命令:
iotop
这个命令将显示实时的磁盘 I/O 活动,包括每个进程的 I/O 使用情况、读取和写入速度等。
这些命令可以提供有关磁盘 I/O 活动的不同方面的信息。根据你的需求和特定的场景,选择适合的命令来查看磁盘的 I/O 情况。请注意,具体命令和输出格式可能会因操作系统和工具版本而有所不同。
# 安装 yum install -y fio # 压测 fio --name=test --ioengine=sync --iodepth=32 --rw=randwrite --bs=4k --size=1G --numjobs=4 --time_based --runtime=60 --group_reporting # 参数解析 --name=test: 测试任务的名称。 --ioengine=sync: I/O 引擎,使用同步模式。 --iodepth=32: I/O 深度,即并发的 I/O 请求数。 --rw=randwrite: 读写模式,随机写入。 --bs=4k: 块大小,每次 I/O 操作的数据块大小。 --size=1G: 测试文件的大小。 --numjobs=4: 并发任务数。 --time_based: 基于时间的运行模式。 --runtime=60: 运行时间,60 秒。 --group_reporting: 打印汇总报告。
# 结果解析 IOPS(Input/Output Operations Per Second):每秒的输入/输出操作数。反映了磁盘的处理能力,值越高表示磁盘性能越好。 Throughput:数据吞吐量,通常以 MB/s 或 GB/s 表示。表示磁盘每秒能够传输的数据量,值越高表示磁盘性能越好。 Latency:延迟时间,表示从发送一个 I/O 请求到接收到响应的时间。常见的度量单位包括毫秒(ms)或微秒(μs),值越低表示磁盘响应更快。 Bandwidth:带宽,表示单位时间内传输的数据量。通常以 MB/s 或 GB/s 表示,与吞吐量类似。 I/O Depth:I/O 深度,表示同时进行的并发 I/O 请求数。较高的 I/O 深度可以提高并发性能。 CPU Usage:CPU 使用率,表示在测试期间 CPU 的负载情况。高 CPU 使用率可能表示测试任务对 CPU 造成了较大的负载。 Error Rate:错误率,表示在测试过程中发生的错误数量。较低的错误率表示磁盘运行稳定。