0
点赞
收藏
分享

微信扫一扫

(8)Linux实用故障排查


文章目录

  • 1.排查思路
  • 1.cpu
  • 2.内存
  • 3.磁盘io
  • 4.网络
  • 5.系统负载
  • 6.GC问题
  • 7.日志的查看
  • 8.dd 与fio命令

1.排查思路

  • 大数据集群运行在linux系统上,基本从以下几个方面入手:cpu,内存,磁盘IO,网络,GC等

1.cpu

  • 一些概念:多核,超线程(一个核一个线程,还是一个核开多个线程),CPU频率(2.2GHZ)
  • cpu模式:节能模式,普通模式,超能模式,bios里面设置,大集群要注意这个参数,尽量关闭节能模式。
  • 查看物理CPU个数

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

  • 查看逻辑cpu个数

cat /proc/cpuinfo|grep "processor"|wc -l

  • eg:
  • (8)Linux实用故障排查_负载均衡

  • 查看cpu多少核
  • (8)Linux实用故障排查_运维_02

  • 通过top来查看cpu的使用率来判断系统的负载情况:top,然后按下1,可以看到cpu的使用率
  • (8)Linux实用故障排查_ios_03


  • (8)Linux实用故障排查_测试工具_04

2.内存

  • 清屏:

ctrl l

  • 常见内存大小是64G,128G,256G,512G,通过free -g来查看系统内存是否不足
  • 查看内存的详细信息:

cat /proc/meminfo

3.磁盘io

  • 磁盘种类:sata(150M/s左右),sas(300M/s左右),ssd(最快也最贵)
    一般磁盘2T-4T,服务器支持的最大存储也不同,比较常见的48T,一般服务器可以支持12-24块盘。
  • 磁盘io的查看
    iostat指令的说明:iostat用于输出CPU和磁盘I/O相关的统计信息

每隔2s
iostat -mx 2

这里我们用了两个参数

-k 以 KB 为单位显示
-m 以 M 为单位显示
如果不带这些参数的话, 则会用 Blk。 Blk列是512字节块。

如果要细化到看那个进程的 io 消耗大, 可以用  iotop 命令查看。

使用pidstat查看进程使用磁盘的情况:pidstat -d 1

iotop:利用iotop查看到底是哪个进程耗io
显示所有线程 -a:iotop -a
其他:iotop -oPa
-o, --only 只显示正在产生I/O的进程或线程。除了传参,可以在运行过程中按o生效。
 -P, --processes 仅显示进程,默认iotop显示所有线程

  • 主要看最后一列,若svctm数值很大,说明磁盘打满了,说明程序运行会应该很慢

    iotop:
  • sar命令

[root@server-68.2.stage.polex.io var ]$ sar -d -p 1 2
Linux 3.10.0-693.5.2.el7.x86_64 (server-68)     03/11/2019     _x86_64_    (64 CPU)

02:28:54 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
02:28:55 PM       sda      1.00      0.00      3.00      3.00      0.01      9.00      9.00      0.90
02:28:55 PM       sdb      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02:28:55 PM polex_pv-rootvol      1.00      0.00      3.00      3.00      0.01      9.00      9.00      0.90
02:28:55 PM polex_pv-varvol      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02:28:55 PM polex_pv-homevol      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

  • 其中, “-d”参数代表查看磁盘性能,“-p”参数代表将 dev 设备按照 sda,sdb……名称显示,“1”代表每隔1s采取一次数值,“2”代表总共采取2次数值。
  • await:平均每次设备 I/O 操作的等待时间(以毫秒为单位)。
  • svctm:平均每次设备 I/O 操作的服务时间(以毫秒为单位)。
  • %util:一秒中有百分之几的时间用于 I/O 操作。
  • 对于磁盘 IO 性能,一般有如下评判标准:
    (1)正常情况下 svctm 应该是小于 await 值的,而 svctm 的大小和磁盘性能有关,CPU 、内存的负荷也会对 svctm 值造成影响,过多的请求也会间接的导致 svctm 值的增加。
    (2)await 值的大小一般取决与 svctm 的值和 I/O 队列长度以 及I/O 请求模式,如果 svctm 的值与 await 很接近,表示几乎没有 I/O 等待,磁盘性能很好;
    如果 await 的值远高于 svctm 的值,则表示 I/O 队列等待太长,系统上运行的应用程序将变慢,此时可以通过更换更快的硬盘来解决问题。
  • %util 项的值也是衡量磁盘 I/O 的一个重要指标,如果 %util 接近 100% ,表示磁盘产生的 I/O 请求太多,I/O 系统已经满负荷的在工作,该磁盘可能存在瓶颈。长期下去,势必影响系统的性能,可以通过优化程序或者通过更换更高、更快的磁盘来解决此问题

参考:磁盘IO的性能指标,Linux查看某个进程的磁盘IO读写情况 pidstat,利用iotop查看到底是哪个进程耗io,Linux如何查看与测试磁盘IO性能

  • 查看磁盘空间

df -h

(8)Linux实用故障排查_测试工具_05

  • 查看磁盘的格式化的格式,主流一般是xfs和ext4,系统盘默认是xfs,后续添加的数据盘尽量也是xfs这样统一比较好,也方便写脚本批量挂载。

df -T
cat /etc/fstab

(8)Linux实用故障排查_测试工具_06

  • lsblk能够查看与分区以及ssd盘,用fdisk查看盘可能识别不到ssd
  • 查看磁盘与未挂载的磁盘和分区信息

fdisk -l

(8)Linux实用故障排查_linux_07

  • cat /etc/fstab查看磁盘挂载信息,新加磁盘要手动永久挂载需要在这个配置文件里添加6列。

这6列的含义:
盘符名 挂载目录 磁盘格式 defaults 0 0

新加一个盘,永久挂载需要修改/etc/fstab里面的信息
vim /etc/fstab

  • lvm:逻辑卷,扩容及缩容基本都是基于LVM进行操作的
    (1)PV:物理卷:硬盘和分区
    (2)VG:卷组,多个PV
    (3)LV:逻辑卷,多个VG

fdisk -l

(8)Linux实用故障排查_测试工具_08

  • 实际需求应用:
    (1)集群磁盘扩容加盘,要永久挂载 (信息要写入/etc/fstab)
    (2)根目录空间不够,要给根目录扩容 (lvm)
  • 磁盘阵列(bios里设置)常见
    (1)raid0(无冗余,一般用作数据盘)
    (2)raid1(双备份,一般作为系统盘)
    (3)raid5(n-1/n,损失其中一块盘的空间)等等

4.网络

  • (1)查看是否ping通:ping ip
  • (2)查看某端口是否被监听
    eg:你启动datanode没有启动,查看日志报错:address in used,翻译过来就是端口被占用,那得查看下这个端口映被哪个程序占用了,就用netstat -anp|grep 端口号,就可以知道它的进程,比如下图进程pid就是107484,就可以用kill -9 强制杀死
  • 网卡模式配置(bond6,负载均衡)
    (1)修改方法
    BONDING_OPTS=“miimon mode=1”(配置Bond的核心语句,mod1为主备模式)
    ifcfg.bond0文件的配置
    (2)网卡Bond是通过把多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡,通过Bond技术让多块网卡看起来是一个单独的以太网接口设备并具备相同的ip地址

mod0	平衡轮循环策略
mod1	主备份策略
mod2	平衡策略
mod3	广播策略
mod4	IEEE 802.3ad动态链路聚合
mod5	适配器传输负载均衡
mod6	适配器适应性负载均衡

5.系统负载

  • Linux指令

top
uptime
w
cat /proc/loadavg

6.GC问题

  • 是否full GC(GC是java里面jvm的东西),jps查出要查看的pid,用jstat -gcutil pid,看第四列O,如果100%,就是fullGC
    (1)下面的O表示的就是fullGC,若比较高,则需要去优化软件程序

7.日志的查看

  • 首先要知道日志的位置,一种是去配置文件查看有没有配置相关位置,一种是去通过进程查看如下,用ps -ef|grep pid通过显示出来的信息可以找到日志的位置
  • eg:查看某个进程日志的位置
  • 查看日志
    (1)实时查看日志文件后100行,tail -f -n 100 file
    (2)静态查看:vim filelog,然后通过关键字error/warn等查找错误

8.dd 与fio命令

  • Linux dd 命令用于读取、转换并输出数据。dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。
  • 我们可以利用 dd 命令的复制功能,测试某个磁盘的 IO 性能,须要注意的是 dd 命令只能大致测出磁盘的 IO 性能,不是非常准确。
  • 测试写性能命令:

[root@server-68.2.stage.polex.io var ]$ time dd if=/dev/zero of=test.file bs=1G count=2 oflag=direct
2+0 records in
2+0 records out
2147483648 bytes (2.1 GB) copied, 13.5487 s, 159 MB/s

real    0m13.556s
user    0m0.000s
sys    0m0.888s 

可以看到,该分区磁盘写入速率为 159M/s,其中:

/dev/zero 伪设备,会产生空字符流,对它不会产生 IO 。
if 参数用来指定 dd 命令读取的文件。
of 参数用来指定 dd 命令写入的文件。
bs 参数代表每次写入的块的大小。
count 参数用来指定写入的块的个数。
offlag=direc 参数测试 IO 时必须指定,代表直接写如磁盘,不使用 cache 。

  • 测试读性能命令:

[root@server-68.2.stage.polex.io var ]$ dd if=test.file of=/dev/null  iflag=direct
4194304+0 records in
4194304+0 records out
2147483648 bytes (2.1 GB) copied, 4.87976 s, 440 MB/s

可以看到,该分区的读取速率为 440MB/s

  • fio 命令
    fio 命令是专门测试 iops 的命令,比 dd 命令准确,fio 命令的参数很多,这里举几个例子供大家参考:

顺序读:
fio -filename=/var/test.file -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_r

顺序写:
fio -filename=/var/test.file -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_w

随机写:
fio -filename=/var/test.file -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_randw

混合随机读写:
fio -filename=/var/test.file -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_r_w -ioscheduler=noop


举报

相关推荐

0 条评论