[内容] Linux 硬盘性能调优的思路

内容一:提高硬盘吞吐量

1.1 显示硬盘现在设置的吞吐量

# cat /sys/block/<partition name>/queue/nr_requests
128

1.2 提高硬盘的吞吐量

# echo 512 > /sys/block/<partition name>/queue/nr_requests

(补充:这里以降硬盘的吞吐量提高到 512 为例)

内容二:修改硬盘的 I/O 调度算法

2.1 硬盘调度算法种类

1) CFQ:完全公平排队 I/O 调度程序,是通用型服务器、多媒体应用和桌面系统的最佳选择
2) NOOP:电梯式调度程序,倾向于牺牲读操作而提高写操作
3) Deadline:截至时间调度程序,防止写操作因为不能进行读操作而被牺牲的情况
4) AS:预料 I/O 调度程序,适用于写操作量需求较大的服务器,不适用于数据库服务器

2.2 显示当前硬盘被设置的 I/O 调度算法

2.2.1 显示系统当前所有硬盘默认的 I/O 调度算法
# dmesg | grep -i scheduler
2.2.2 显示某一个分区当前的 I/O 调度算法
# cat /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq]

(补充:这里中括号 “[]” 以内的调度算法名就是当前使用的调度算法)

2.3 临时修改某一个分区的 I/O 调度算法

# echo noop > /sys/block/<partition name>/queue/scheduler

(注意:此种修改方式会在重启后失效)

2.4 永久修改系统默认的 I/O 调度算法

# grubby --update-kernel=ALL --args="elevator=<scheduling algorithm name>"

(注意:此种修改方式需要重启才会生效)

[命令] Linux 命令 iotop (显示某一个进程占用 IO 的情况) (转载)

记一次iotop分析磁盘占用io问题

问题描述    

                 某一台服务器上面 程序在每小时内偶尔丢包 排查服务器所有性能瓶颈之后发现一个奇怪的问题 程序丢包前后 会有IO过高的情况 于是使用iotop命令排查是哪个程序偶尔占用过高的磁盘IO

所用命令  

                 iotop

相关参数 

    -o:只显示有io操作的进程

    -b:批量显示,无交互,主要用作记录到文件

    -n NUM:显示NUM次,主要用于非交互式模式

    -d SEC:间隔SEC秒显示一次

    -p PID:监控的进程pid

    -u USER:监控的进程用户

排查方法

        iostat命令 只能看出每个盘符的IO情况 不能看到是具体哪个进程使用的IO 所以 我们需要使用iotop命令 但是这次的IO情况并不是一直出现 而是偶尔不规律出现 如果用肉眼去一直盯着终端看 显然不可行 于是我们可以用iotop的-b参数 让结果以非交互的方式输出 这样我们便可以用awk去处理 打印出我们需要的IO列以及相应的进程

命令

iotop -b | awk -F'%' '{if($(NF-1) > 0.2 && $(NF-1) ~ /[0-9]/ && $0 !~ /DISK/)printf "TIME: %s,IO:%s%,COMMAND:%s\n",strftime("%F %T"),$(NF-1),$NF}'

输出结果

[root@localhost ~]# iotop -b | awk -F'%' '{if($(NF-1) > 0.2 && $(NF-1) ~ /[0-9]/ && $0 !~ /DISK/)printf "TIME: %s,IO:%s%,COMMAND:%s\n",strftime("%F %T"),$(NF-1),$NF}'
TIME: 2018-03-21 18:04:23,IO:  0.23 %,COMMAND: [kworker/0:2]
TIME: 2018-03-21 18:04:35,IO:  0.44 %,COMMAND: [kworker/0:2]
TIME: 2018-03-21 18:04:47,IO:  0.22 %,COMMAND: [kworker/0:2]
TIME: 2018-03-21 18:04:58,IO:  0.39 %,COMMAND: [kworker/0:2]
TIME: 2018-03-21 18:05:08,IO:  0.68 %,COMMAND: [kworker/0:2]
TIME: 2018-03-21 18:05:22,IO:  0.52 %,COMMAND: [kworker/0:2]
TIME: 2018-03-21 18:05:34,IO:  0.24 %,COMMAND: [kworker/0:2]
TIME: 2018-03-21 18:05:45,IO:  0.26 %,COMMAND: [kworker/0:2]

        输出结果类似上面 这里只是简单举个例子 打印出IO大于0.2%的进程 并根据客户需求打印除相应的时间 这里的时间打印 利用awk自己的函数 strftime()
————————————————
版权声明:本文为CSDN博主「why_me310」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/why_me310/article/details/79643352

注明:所有转载内容皆直接从被转载文章网页的标题和内容的文本中复制而来

CC 4.0 BY-SA 版权协议网址:https://creativecommons.org/licenses/by-sa/4.0/deed.z
站主补充:
 iotop 还有以下参数
-k, --kilobytes 在非交互的模式下,以 kb 为单位显示
-t, --time 在非交互的模式下,加上时间戳
-q, --quiet 在交互的模式下,禁止头几行,它有三种指定方式
    -q 只有在第一次显示时显示列名
    -qq 永远不显示列名
    -qqq 永远不显示 I/O 汇总的总量

[命令] Linux 命令 sar (报告系统活动情况) (转载)

sar

sar(SYstem ActivityReporter系统活动情况报告)是目前Linux上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况,系统调用的使用情况,磁盘I/O,CPU效率,内存使用状况,进程活动及IPC有关的活动;
sar命令有sysstat安装包安装
1.安装:[root@admin ~]# yum -y install sysstat
2.参数:
-u :输出CPU使用情况和统计信息
-p:报告每个CPU的状态
-q:查看平均负载
-r:查看内存使用情况
-W :查看系统swap分区的统计信息
-x:显示给定进程的统计信息
-b:查看I/O和传递速率的统计信息
 -d:磁盘使用详细统计
 -v:进程,inode,文件和锁表状态
 -n:统计网络信息
-u :输出CPU使用情况和统计信息
-A:所有报告总和
-i:设置状态信息刷新的间隔时间
    [root@admin ~]# sar -u 1 3  (每隔一秒总共统计三次;统计CPU的使用情况)
在以上的显示中,主要看%iowait和%idle,%iowait过高表示存在I/O瓶颈,即磁盘I/O无法满足业务需求,如果%idle过低表示CPU使用率比较严重,需要结合内存使用等情况半段CPU是否瓶颈。
2.2 -p:报告每个CPU的状态
    [root@admin ~]# sar -p 1 3 (报告每个CPU的使用状态)
2.3 将统计结果保存在文件中,并从文件读取内容
        [root@admin ~]# sar -u -o /servers/script/sar.txt 2 3 (保存之文件,保存后的文件是二进制的,无法使用vim和cat查看)
        [root@admin ~]# sar -u -f /servers/script/sar.txt (从二进制文件读取)
注:将输出到文件(-o)和读取记录信息(-f)
2.4 -q:查看平均负载
        [root@admin ~]# sar -q 1 3
2.5-r:查看内存使用情况
        [root@admin ~]# sar -r
2.6 -W :查看系统swap分区的统计信息
2.7 -b:查看I/O和传递速率的统计信息
2.8 -d:磁盘使用详细统计
2.9 -v:进程,inode,文件和锁表状态
2.10 -n:统计网络信息
        1) DEV:网络接口统计信息
        2) EDEV:网络接口错误
        3)IP:IP数据报统计信息
        4):EIP:IP错误统计信息
         5)TCP:TCP统计信息
          6)ETCP:TCP错误统计信息
         7)SOCK:套接字使用
————————————————
版权声明:本文为CSDN博主「喵喵Amy」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/an1415/article/details/80761614

注明:所有转载内容皆直接从被转载文章网页的标题和内容的文本和图片中复制而来

CC 4.0 BY-SA 版权协议网址:https://creativecommons.org/licenses/by-sa/4.0/deed.z

[命令] Linux 命令 iostat (显示硬盘读写和处理器占用状况) (转载)

iostat 介绍

iostat用于查看存储设备的IO负载情况,输出信息是指定间隔时间内的平均数据,可以持续输出观察。
通过iostat --help通常看不到直观的信息

[root@master ~]# iostat --help
Usage: iostat [ options ] [ <interval> [ <count> ] ]
Options are:
[ -c ] [ -d ] [ -N ] [ -n ] [ -h ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ]
[ -j { ID | LABEL | PATH | UUID | ... } [ <device> [...] | ALL ] ]
[ <device> [...] | ALL ] [ -p [ <device> [,...] | ALL ] ]

    1
    2
    3
    4
    5
    6

可以通过man iostat来查看该命令的具体解释
man iostat|cat > iostat_help.txt

1.常用的选项

OPTIONS
       -c     展示CPU使用情况
       -d     展示存储设备使用情况
       -h     使输出信息更易看。
       -k     使某些使用block为单位的列强制使用k为单位显示统计信息
       -m     使某些使用block为单位的列强制使用m为单位显示统计信息
       -N     显示任何已注册设备映射器名称, 用于查看LVM2统计
       -n     展示NFS使用情况
       -p [ { device [,...] | ALL } ]
              显示设备块及其分区统计信息,可以单独指定特定的设备
       -t     打印显示的每个报表的时间, 时间戳格式可能取决于S_TIME_FORMAT环境变量
       -V     显示iostat版本
       -x     显示扩展统计信息
       -y     如果指定了持续输出,那么忽略默认显示的第一次统计信息,即从系统启动直到执行命令的平均信息。
       -z     省略在采样期间没有活动的任何设备的输出.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

2.执行样例

       iostat
              展示从系统启动到执行命令期间的CPU和存储设备平均统计信息
       iostat -d 2
              以2秒间隔展示存储设备统计信息
       iostat -d 2 6
              以2秒间隔展示存储设备统计信息,共展示6次
       iostat -x hda hdb 2 6
              以2秒间隔展示存储设备hda和hdb的拓展统计信息,共展示6次
       iostat -p sda 2 6
              以2秒间隔展示存储设备sda及其分区的统计信息,共展示6次

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

3.输出信息解析

# iostat -x -d -m -y -c 2 10
Linux 3.10.0-229.el7.x86_64 (KYL-DB-MYSQL-SLAVE01)      05/09/2019      _x86_64_        (24 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.40    0.00    0.38    4.13    0.00   95.10

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
sdb               0.00     0.00   14.00  563.00     0.07    19.51    69.49     1.40    2.46    9.89    2.28   0.88  50.90
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-2              0.00     0.00   13.50  562.50     0.07    19.50    69.58     1.41    2.47   10.26    2.28   0.88  50.95

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

1.CPU信息
%user:用户态CPU使用率
%nice:优先级变化占用CPU的使用率
%system:内核态CPU使用率
%iowait:CPU等待IO的占比
%steal:虚拟CPU等待实际CPU的时间的百分比
%idle:CPU空闲率

2.存储设备信息
rrqm/s:每秒对该设备的读请求的合并次数
wrqm/s:每秒对该设备的写请求的合并次数
r/s:每秒读取的次数
w/s:每秒写入的次数
rMB/s:以m为单位计算每秒读取量
wMB/s:以m为单位计算每秒写入量
avgrq-sz:平均每次IO操作的数据量(扇区数为单位),包括读和写
avgqu-sz:平均等待处理的IO请求队列长度
await:平均IO等待时间(milliseconds),包括排队时间和IO执行时间
r_await:平均读取等待时间(milliseconds),包括排队时间和IO执行时间
w_await:平均写入等待时间(milliseconds),包括排队时间和IO执行时间
svctm:平均IO服务时间(milliseconds),不准确
%util:统计时间内,CPU处理IO的时间对于间隔时间的占比,例如间隔2秒,CPU处理IO占了1秒,那么就是50%,可以体现存储设备的繁忙程度
————————————————
版权声明:本文为CSDN博主「灯火觅阑珊」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39004901/article/details/90022623

注明:所有转载内容皆直接从被转载文章网页的标题和内容的文本中复制而来

CC 4.0 BY-SA 版权协议网址:https://creativecommons.org/licenses/by-sa/4.0/deed.z
站主补充:连续两个数字参数的作用
# iostat -2 -3

(补充:这里的 -2 表示每过两秒刷新 1 次,-3 表示)

[内容] Linux 硬件信息的显示 (处理器、内存、硬盘和其他硬件信息)

内容一:显示处理器信息

1.1 显示处理器进程 (虚拟核心) 数

# cat /proc/cpuinfo | egrep "core id|physical id|processor" | tr -d "\n" | sed s/processor/\\nprocessor/g | sed 's/physical/     physical/' | sed 's/core/     core/' | grep -v ^$ | wc -l

1.2 显示处理器物理核心数

# cat /proc/cpuinfo | egrep "core id|physical id" | tr -d "\n" | sed s/physical/\\nphysical/g | grep -v ^$ | sort | uniq | wc -l

1.3 显示物理封装处理器 (处理器 socket) 数

# cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l

1.4 显示处理器的详细信息

# lscpu

或者:

# cat /proc/cpuinfo

(补充链接:Linux 处理器详细信息的显示 (显示 /proc/cpuinfo 文件里的信息)

内容二:显示内存信息

2.1 显示内存使用情况

# free -m

(注意:这里显示的内存会比真实的硬件内存大小小一点)

2.2 显示内存详细信息

# cat /proc/meminfo

2.3 显示内存的总大小

# memunit=`dmidecode -t memory | egrep -i 'Size:' | egrep -i 'kb|mb|gb' | egrep -v -i 'Volatile|Maximum|Memory|Installed|Enabled' | awk '{print $NF}' | head -1`;memsize=`dmidecode -t memory | egrep -i 'Size:' | egrep -i 'kb|mb|gb' | egrep -v -i 'Volatile|Maximum|Memory|Installed|Enabled' | awk 'BEGIN{memtotal=0}{memtotal+=$2}END{print memtotal}'`; echo "$memsize $memunit"

内容三:显示硬盘信息

3.1 显示硬盘使用情况

# df -h

3.2 显示硬盘信息

# lsblk

3.3 显示硬盘总大小

# disksizeb=`lsblk -b | egrep -iv '\/|SWAP|NAME' | awk '$1!~/[0-9]/' | egrep 'disk' | awk 'BEGIN{disktotal=0}{disktotal=disktotal+$4}END{print disktotal}'`;let disksizek=$disksizeb/1024;let disksizem=$disksizek/1024;let disksizeg=$disksizem/1024;echo "$disksizeg GB"

内容四:显示其他硬件的信息

4.1 显示其他所有硬件的信息

# dmesg

4.2 显示某 1 个硬件的信息

# dmesg | grep -i mouse

(补充:这里以显示鼠标信息的方法为例)