Linux系统调优与日志管理全面指南

文章目录

    • 一、文件存储基础
      • 1.1 文件与硬盘存储单位
      • 1.2 文件数据与元信息
      • 1.3 inode机制
        • 查看文件名对应的inode号码有两种方式:
      • 1.4 inode与硬盘空间
      • 1.5 特有现象
    • 二、inode节点耗尽故障处理
      • 2.1 模拟inode节点耗尽故障
    • 三、恢复误删除的文件
      • 3.1 恢复误删除的ext3文件
        • EXT类型文件恢复
      • 3.2 恢复误删除的XFS文件
        • XFS类型文件备份和恢复
        • xfsdump使用限制:
    • 四、日志管理
      • 4.1 内核及系统日志
        • 常见的一些日志文件:
        • 查看rsyslog.conf配置文件
        • Linux系统内核日志消息的优先级别(数字等级越小,优先级越高,消息越重要) :
        • 公共日志/var/log/messages文件的记录格式
      • 4.2 详细日志分析命令
        • 常见命令
        • 系统常见日志
        • 用户日志采用二进制格式,但可以用命令查看,避免人为修改内容,保证日志的有效性
        • 其他服务的日志
      • 4.3 扩展日志工具
        • journalctl工具是CentOS-7才有的工具
        • 研究日志工具
      • 4.4 日志文件分析方法
        • 文本格式的日志文件
        • 二进制格式的日志文件
        • 内核及系统日志
        • 过滤空行
        • 日志消息的等级
        • rsyslog服务
        • 自定义日志
      • 4.5 将日志文件放在日志文件服务器上
        • 查看模块
        • 服务端配置
        • 客户端配置
        • 测试方法
    • 五、日志轮替logrotate
      • 5.1 什么是轮替
        • /etc/logrotate.conf
        • 把自己的日志加入轮替
    • 六、系统调优概述和查看CPU负载相关工具
      • 6.1 系统调优思路
      • 6.2 查看CPU负载相关工具
        • uptime命令查看系统cpu负载
        • 例:找出前当系统中,CPU负载过高的服务器?
      • 6.3 使用mpstat查看CPU运行情况
        • 参数说明
        • 示例命令
    • 七、查看Memory运行状态相关工具
      • 7.1 free命令查看内存使用情况
        • 通过/proc目录,查看非活跃的内存:
      • 7.2 实战:找出系统中使用内存最多的进程?
        • 方法1:运行top,然后按下大写的M可以按内存使用率来排序显示
        • 方法2:按照实际使用内存,从大到小排序显示所有进程列表
    • 八、查看IO运行状态相关工具
      • 8.1 查看文件系统块大小
        • 对于ext4文件系统,查看文件系统块大小
        • 对于xfs文件系统,查看文件系统块大小
      • 8.2 实战-找出系统中对磁盘读写最多的进程
        • 实战场景1:对于这个服务器,8块磁盘中,哪个硬盘最繁忙?哪个分区最繁忙?
        • 实战场景2:公司的服务器很卡,查看CPU使用率不高,内存也够用,但就是卡,尤其是打开新程序或文件时,更卡。此时是哪出问题了?
    • 九、查看Network运行状态相关工具
      • 9.1 实战:找出系统中使用网络最多的进程
        • 实战1:使用nload监控总体带宽使用情况
        • 实战2: 使用nethogs找出使用带宽最多的进程
    • 十、查看系统整体运行状态
      • 10.1 使用vmstat查看内存及系统整体运行状态
      • 10.2 使用sar命令记录系统一段时间的运行状态
        • 安装sar命令
        • 例1:每2秒采样一次,连续采样5次,观察CPU的使用情况,并将采样结果以二进制形式存入当前目录下的文件cpu.sar中
        • 例2:查看二进制文件cpu.sar中的内容

一、文件存储基础

1.1 文件与硬盘存储单位

​ 文件是存储在硬盘上的,硬盘的最小存储单位叫做“扇区”(sector),每个扇区存储512字节。一般连续八个扇区组成一个"块”(block),一个块是4K大小,是文件存取的最小单位。操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取的。

1.2 文件数据与元信息

​ 文件数据包括实际数据与元信息(类似文件属性)。文件数据存储在“块"中,存储文件元信息(比如文件的创建者、创建日期、文件大小、文件权限等)的区域就叫做inode。因此,一个文件必须占用一个inode,并且至少占用一个block。inode不包含文件名,文件名是存放在目录当中的。Linux系统中一切皆文件,因此目录也是一种文件。

1.3 inode机制

​ 每个inode都有一个号码,操作系统用inode号码来识别不同的文件。Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称,文件名和inode号码是一一对应关系,每个inode号码对应一个文件名。

查看文件名对应的inode号码有两种方式:
ls -i 文件名
stat 文件名

image-20240713190511351

1.4 inode与硬盘空间

​ inode也会消耗硬盘空间,所以格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区,存放inode所包含的信息。每个inode的大小,一般是128字节或256字节。通常情况下不需要关注单个inode的大小,而是需要重点关注inode总数。inode的总数在格式化时就给定了,执行"df -i"命令即可查看每个硬盘分区对应的的inode总数和已经使用的inode数量。

1.5 特有现象

由于inode号码与文件名分离,导致Linux系统具备以下几种特有的现象:

  1. 文件名包含特殊字符,可能无法正常删除。这时直接删除inode,能够起到删除文件的作用。
  2. 移动文件或重命名文件,只是改变文件名,不影响inode号码。
  3. 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。
  4. 文件数据被修改保存后,会生成一个新的inode号码。

示例命令:

find ./ -inum 52305140 -exec rm -i {} \;
find ./ -inum 50464299 -delete

image-20240713190854694

image-20240713191017141

二、inode节点耗尽故障处理

2.1 模拟inode节点耗尽故障

  1. 使用fdisk创建分区/dev/sdb1,分区大小30M即可
fdisk /dev/sdb
mkfs.ext3 /dev/sdb1
mkdir /test
mount /dev/sdb1 /test
df -i
  1. 模拟inode节点耗尽故障
for ((i=1; i<=5680; i++)); do touch /test/file$i; donei=i+1 或 i+=1
touch {1..5680}.txt 
df -i
df -hT
  1. 删除文件恢复
rm -rf /test/*
df -i
df -hT

三、恢复误删除的文件

3.1 恢复误删除的ext3文件

EXT类型文件恢复

extundelete是一个开源的Linux数据恢复工具,支持ext3、ext4文件系统(ext4只能在CentOS6版本恢复)。

  1. 使用fdisk创建分区/dev/sdc1,格式化ext3文件系统
fdisk /dev/sdc
partprobe /dev/sdc
mkfs.ext3 /dev/sdc1
mkdir /test
mount /dev/sdc1/test
df -hT

  1. 安装依赖包
yum -y install e2fsprogs-devel e2fsprogs-libs gcc gcc-c++
  1. 编译安装extundelete
cd /test
wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
tar jxvf extundelete-0.2.4.tar.bz2
cd extundelete-0.2.4/
./configure --prefix=/usr/local/extundelete && make && make install 或 ./configure && make && make install
ln -s /usr/local/extundelete/bin/* /usr/bin/
  1. 模拟删除并执行恢复操作
cd /test
echo a > a
echo a > b
echo a > c
echo a > d
ls
extundelete /dev/sdc1 --inode 2   #查看文件系统/dev/sdc1下存在哪些文件,i节点是从2开始的,2代表该文件系统最开始的目录。

rm -rf a b
extundelete /dev/sdc1 --inode 2
cd ~
umount /test
extundelete /dev/sdc1 --restore-all   #恢复/dev/sdc1 文件系统下的所有内容
#在当前目录下会出现一个RECOVERED_FILES/目录,里面保存了已经恢复的文件
extundelete /dev/sdc1 --restore-all --output-dir /path/to/your/target_directory #恢复到指定文件夹
ls RECOVERED FILES/

image-20240713194825833

image-20240713194950652

3.2 恢复误删除的XFS文件

XFS类型文件备份和恢复

CentOS 7系统默认采用XFS类型的文件,XFS类型的文件可使用xfsdump与xfsrestore工具进行备份恢复。xfsdump的备份级别有两种: 0表示完全备份; 1-9表示增量备份。xfsdump的备份级别默认为0。

xfsdump的命令格式为:

xfsdump |-f 备份存放位置 要备份的路径或设备文件

xfsdump命令常用的选项:

  • -f: 指定备份文件目录
  • -L: 指定标签session label
  • -M: 指定设备标签media labe
  • -s: 备份单个文件,-s后面不能直接跟路径
xfsdump使用限制:
  1. 只能备份已挂载的文件系统

  2. 必须使用root的权限才能操作

  3. 只能备份XFS文件系统

  4. 备份后的数据只能让xfsrestore解析

  5. 不能备份两个具有相同UUID的文件系统(可用blkid命令查看)

  6. 使用fdisk创建分区/dev/sdb1,格式化xfs文件系统

fdisk /dev/sdb 或 partprobe /dev/sdb
mkfs.xfs /dev/sdb1   # mkfs.xfs [-f] /dev/sdb1
mkdir /data
mount /dev/sdb1 /data/
cd /data
cp /etc/passwd ./
mkdir test
touch test/a
  1. 使用xfsdump命令备份整个分区
rpm -qa | grep xfsdump
yum install -y xfsdump
xfsdump -f /opt/dump_sdb1 /dev/sdb1 [-L dump_sdb1 -M sdb1]
xfsdump -f /opt/dump_sdb /dev/sdb1 -L dump_sdb -M sdb1
  1. 模拟数据丢失并使用xfsrestore命令恢复文件
cd /data/
rm -rf ./*
ls
xfsrestore -f /opt/dump_sdb1 /data/

image-20240713202102741

image-20240713202119372

拓展

遇见这种报错

[root@localhost /]# mkfs.xfs /dev/sdb6
/dev/sdb6: No such file or directory
Usage: mkfs.xfs
/* blocksize */		[-b log=n|size=num]
/* metadata */		[-m crc=0|1,finobt=0|1,uuid=xxx]
/* data subvol */	[-d agcount=n,agsize=n,file,name=xxx,size=num,
			    (sunit=value,swidth=value|su=num,sw=num|noalign),
			    sectlog=n|sectsize=num
/* force overwrite */	[-f]
/* inode size */	[-i log=n|perblock=n|size=num,maxpct=n,attr=0|1|2,
			    projid32bit=0|1]
/* no discard */	[-K]
/* log subvol */	[-l agnum=n,internal,size=num,logdev=xxx,version=n
			    sunit=value|su=num,sectlog=n|sectsize=num,
			    lazy-count=0|1]
/* label */		[-L label (maximum 12 characters)]
/* naming */		[-n log=n|size=num,version=2|ci,ftype=0|1]
/* no-op info only */	[-N]
/* prototype file */	[-p fname]
/* quiet */		[-q]
/* realtime subvol */	[-r extsize=num,size=num,rtdev=xxx]
/* sectorsize */	[-s log=n|size=num]
/* version */		[-V]
			devicename
<devicename> is required unless -d name=xxx is given.
<num> is xxx (bytes), xxxs (sectors), xxxb (fs blocks), xxxk (xxx KiB),
      xxxm (xxx MiB), xxxg (xxx GiB), xxxt (xxx TiB) or xxxp (xxx PiB).
<value> is xxx (512 byte blocks).

解决方法

使用 partprobe 重新读取分区表

[root@localhost /]# partprobe /dev/sdb

四、日志管理

4.1 内核及系统日志

内核及系统日志由系统服务rsyslog统一管理,主配置文件为/etc/rsyslog.conf。Linux操作系统本身和大部分服务器程序的日志文件都默认放在目录/var/log/下。

常见的一些日志文件:
  • 内核及公共消息日志:
    • /var/log/messages: 记录Linux内核消息及各种应用程序的公共日志信息,包括启动、IO错误、网络错误、程序故障等。对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的事件记录信息。
  • 计划任务日志:
    • /var/log/cron: 记录crond计划任务产生的事件信息。
  • 系统引导日志:
    • /var/log/dmesg: 记录Linux系统在引导过程中的各种事件信息。
  • 邮件系统日志:
    • /var/log/maillog: 记录进入或发出系统的电子邮件活动。
  • 用户登录日志:
    • /var/log/secure: 记录用户认证相关的安全事件信息。
    • /var/log/lastlog: 记录每个用户最近的登录事件。二进制格式
    • /var/log/wtmp:

记录每个用户登录、注销及系统启动和停机事件。二进制格式

  • /var/run/btmp: 记录失败的、错误的登录尝试及验证事件。二进制格式
查看rsyslog.conf配置文件
vim /etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none /var/log/messages

*.info    #表示info等级及以上的所有等级的信息都写到对应的日志文件里
mail.none #表示某事件的信息不写到日志文件里(这里比如是邮件)
Linux系统内核日志消息的优先级别(数字等级越小,优先级越高,消息越重要) :
  1. EMERG(紧急):会导致主机系统不可用的情况。
  2. ALERT(警告):必须马上采取措施解决的问题。
  3. CRIT(严重):比较严重的情况。
  4. ERR (错误) :运行出现错误。
  5. WARNING(提醒):可能影响系统功能,需要提醒用户的重要事件。
  6. NOTICE (注意) :不会影响正常功能,但是需要注意的事件。
  7. INFO(信息):一般信息。
  8. DEBUG(调试):程序或系统调试信息等。
公共日志/var/log/messages文件的记录格式
  • 时间标签:消息发出的日期和时间。
  • 主机名:生成消息的计算机的名称。
  • 子系统名称:发出消息的应用程序的名称。
  • 消息:消息的具体内容。

4.2 详细日志分析命令

常见命令
  • users: 命令只是简单地输出当前登录的用户名称,每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数。
  • who: 命令用于报告当前登录到系统中的每个用户的信息。使用该命令,系统管理员可以查看当前系统存在哪些不合法用户,从而对其进行审计和处理。who的默认输出包括用户名、终端类型、登录日期及远程主机。
  • w: 命令用于显示当前系统中的每个用户及其所运行的进程信息,比users、who命令的输出内容要丰富一些。
  • last: 命令用于查询成功登录到系统的用户记录,最近的登录情况将显示在最前面。通过last命令可以及时掌握Linux主机的登录情况,若发现未经授权的用户登录过,则表示当前主机可能已被入侵。
  • lastb: 命令用于查询登录失败的用户记录,如登录的用户名错误、密码不正确等情况都将记录在案。登录失败的情况属于安全事件,因为这表示可能有人在尝试猜解你的密码。除了使用lastb命令查看以外,也可以直接从安全日志文件/var/log/secure中获得相关信息。

image-20240713202700178

系统常见日志
  • /var/log/messages: 系统主日志文件
[root@localhost ~]# cat /var/log/messages | wc -l
3784

  • 使用tail查看日志
tail -f /var/log/messages
tail -100 /var/log/messages

image-20240713202840221

  • /var/log/dmesg: 开机后的内核自检信息,dmesg命令看的是一样的

    image-20240713203122853

  • /var/log/secure: 涉及到登录,验证之类的都会记录比如su

image-20240713203235095

用户日志采用二进制格式,但可以用命令查看,避免人为修改内容,保证日志的有效性
  • /var/log/wtmp (last)
  • /var/log/btmp (lastb)
  • /var/log/lastlog (lastlog): 所有账号的登录信息
其他服务的日志
  • /var/log/yum.log
  • /var/log/cron

4.3 扩展日志工具

journalctl工具是CentOS-7才有的工具

Systemd统一管理所有Unit的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。日志的配置文件在/etc/systemd/journald.conf。

ps -ef | grep journald
journalctl -b   # 查看本次启动的日志
journalctl -k   # 查看内核日志
journalctl | wc -l  # 查看系统总共的日志条数
journalctl -xe  # 经常用来查看最近报错的日志
  • -e: 从结尾开始看
  • -x: 提供问题相关的网址

image-20240713203349138

研究日志工具

学生可研究以下日志工具:Webmin、Webalizer、Awstats等专用日志分析工具。

4.4 日志文件分析方法

文本格式的日志文件

对于大多数文本格式的日志文件(如内核及系统日志、大多数的程序日志),只要使用tail、more、less、cat等文本处理工具就可以查看日志内容。

二进制格式的日志文件

对于一些二进制格式的日志文件(如用户日志),则需要使用特定的查询命令。

内核及系统日志

内核及系统日志功能主要由默认安装的rsyslog-7.4.7-16.el7.x86_64.rpm软件包提供。rsyslog服务所使用的配置文件为/etc/rsyslog.conf。通过查看/etc/rsyslog.conf文件中的内容,可以了解到系统默认的日志设置。

过滤空行
grep -v "^$" /etc/rsyslog.conf
日志消息的等级

0-7

rsyslog服务
ps -ef | grep rsyslogd  # 查看服务是否开启
vim /etc/rsyslog.conf  # rsyslog服务配置文件
自定义日志
vim /etc/rsyslog.conf
加入一行内容
*.info /var/log/info.log
systemctl restart rsyslog  # 重启服务之后/var/log下面就生成了info.log了

image-20240713205929385

4.5 将日志文件放在日志文件服务器上

查看模块
rpm -ql rsyslog

image-20240713205840584

服务端配置
[root@localhost ~]# vim /etc/rsyslog.conf 
# 编辑文件取消第19、20行注释允许服务器使用TCP 514端口接收日志;开启日志的远程传输功能在192.168.10.19
19 $ModLoad imtcp
20 $InputTCPServerRun 514
[root@localhost ~]# netstat -ntap | grep 514  # 查看514端口是否开启
[root@localhost ~]# systemctl restart rsyslog  # 重启rsyslog日志服务
客户端配置
[root@www1 ~]# vim /etc/rsyslog.conf
# 修改日志服务配置文件
90     *.*    @@192.168.10.19:514  # 把所有日志采用TCP协议发送到192.168.10.19的514端口上;两个@代表使用TCP,一个@代表UDP
[root@localhost ~]# systemctl restart rsyslog  # 重启rsyslog日志服务
测试方法
  1. 测试客户机上新建用户
[root@localhost ~]# useradd liqi
# 服务器端查看
[root@localhost ~]# vim /var/log/secure
  1. 测试客户机上写日志进去
[root@localhost ~]# logger "this is test log from 192.168.10.19 2"
# 服务器端查看
[root@localhost ~]# vim /var/log/messages

image-20240713212304020

image-20240713212325918

五、日志轮替logrotate

5.1 什么是轮替

rpm/yum和源码都可以使用,rpm/yum直接轮替,不需要额外设置,根据配置文件的设置执行。

/etc/logrotate.conf
dateext参数
weekly 每周一次轮替
daily 每日轮替
monthly 每月轮替
rotate 4# 轮替4次
create 新建新日志
dateext 按日期改名,否则会自动改名为file.1、file.2等等
minsize 一定达到这个值才轮替,否则就算时间到了也不轮替
size 只有到达这个值才轮替,跟时间无关
把自己的日志加入轮替
  1. 编辑配置文件/etc/logrotate.conf(管理不方便)
  2. 编辑成文件放到/etc/logrotate.d目录下
vim /etc/logrotate.conf
/var/log/mine.log {
    weekly
    rotate 5
    create
}

logrotate -fv /etc/logrotate.conf  # 强制执行轮替,但是目录下的都会轮替,-v查看
# 改过配置文件之后必须先把服务重启再把logrotate重启

image-20240713213618364

image-20240713214227923

六、系统调优概述和查看CPU负载相关工具

6.1 系统调优思路

性能优化就是找到系统处理中的瓶颈以及去除这些的过程,性能优化其实是对OS各子系统达到一种平衡的定义。具体步骤如下:
1

. 系统的运行状况: CPU -> MEM -> DISK -> NETWORK -> application
2. 分析是否有瓶颈(依据当前应用需求)
3. 调优(采取一定措施使变得优异)

这些子系统之间关系是相互彼此依赖的,任何一个高负载都会导致其他子系统出现问题。比如: 大量的网页调入请求导致内存队列的拥塞;网卡的大吞吐量可能导致更多的CPU开销;大量的CPU开销又会尝试更多的内存使用请求;大量来自内存的磁盘写请求可能导致更多的CPU以及IO问题。所以要对一个系统进行优化,查找瓶颈来自哪个方面是关键,虽然看似是某一个子系统出现问题,其实有可能是别的子系统导致的。调优就像医生看病,因此需要你对服务器所有地方都了解清楚。

6.2 查看CPU负载相关工具

uptime命令查看系统cpu负载
[root@benet17 ~]# uptime
12:38:33 up 50days, 3 users, load average: 0.06, 0.60, 0.48
# 其内容如下:
12:38:33 当前时间
up 50days 系统运行时间,说明此服务器连续运行50天了
3 user 当前登录用户数
load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。三个数值分别为1分钟、5分钟、15分钟前到现在的平均值。

image-20240713214311840

例:找出前当系统中,CPU负载过高的服务器?

服务器1: load average: 0.15, 0.08, 0.01 1核
服务器2: load average: 4.15, 6.08, 6.01 1核
服务器3: load average: 10.15, 10.08, 10.01 4核

答案:服务器2负载过高。

经验:单核心,1分钟的系统平均负载不要超过3,就可以,4核心不要超过12,这是个经验值。所以如果服务器的CPU为1核心,则load average中的数字>=3负载过高,如果服务器的CPU为4核心,则load average中的数字>=12负载过高。

任务队列的平均长度是:是系统等待运行队列的长度与当前所有CPU中正在运行的工作的和。

6.3 使用mpstat查看CPU运行情况

[root@benet17 ~]# rpm -qf `which mpstat`  #查看安装mpstat命令的安装包。sysstat-9.0.4-18.el6.x86_64 #此软件包,包括很多查看系统状态的软件包。
[root@benet17 ~]# mpstat
-P {|ALL} 表示监控哪个CPU,cpu在[0,cpu个数-1]中取值
参数说明
  • usr: 用户空间CPU使用占比。
  • nice: 低优先级进程使用CPU占比。nice值大于0。
  • sys: 内核空间CPU使用占比。
  • iowait: CPU等待IO占比。
  • irq: CPU处理硬中断占比。
  • soft: CPU处理软中断占比。
  • idle: CPU空闲时间占比。
  • guest与steal与虚拟机有关,暂不涉及。
示例命令
[root@benet17 ~]# mpstat -P ALL  #查看所有CPU运行状态
[root@benet17 ~]# mpstat -P ALL 1 100  #一秒钟刷新一次 连续刷新100次

image-20240713214814371

image-20240713214833487

七、查看Memory运行状态相关工具

7.1 free命令查看内存使用情况

[root@benet17 ~]# free -m
        total  used  free  shared  buff/cache  available
Mem:    1992   692   817   17     482         1100
Swap:   1023   0     1023

​ 注:在centos7系统中available这一列是真正可用内存。available包括了buff/cache中一些可以被释放的内存。当物理内存不够用的时候,内核会把非活跃的数据清空。

image-20240713214922532

通过/proc目录,查看非活跃的内存:
[root@benet17 ~]# cat /proc/meminfo
MemTotal:        3861512 kB
MemFree:         2097060 kB
MemAvailable:    2561660 kB
Buffers:            2084 kB
Cached:           654920 kB
SwapCached:            0 kB
Active:          1199076 kB
Inactive:         317728 kB
Active(anon):     861052 kB  # 活跃内存,指进程一直读写的内存空间
Inactive(anon):    13576 kB  # 非活跃内存
Active(file):     338024 kB

​ 注:当内存不够用时,kernel总是把不活跃的内存交换到swap空间。如果inactive内存多时,加swap空间可以解决问题,而active多,则考虑加内存。

image-20240713215001437

7.2 实战:找出系统中使用内存最多的进程?

方法1:运行top,然后按下大写的M可以按内存使用率来排序显示
方法2:按照实际使用内存,从大到小排序显示所有进程列表
[root@benet17 ~]# ps -aux --sort -rss | more  # 内存降序排序(去掉减号就是升序) 或:
[root@benet17 ~]# ps -aux --sort -rss > a.log

image-20240713215114588

image-20240713215230650

八、查看IO运行状态相关工具

8.1 查看文件系统块大小

对于ext4文件系统,查看文件系统块大小
[root@benet17 ~]# tune2fs -l /dev/sda1 | grep size
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
Block size: 1024  # 为1个字节。一个扇区512字节。
对于xfs文件系统,查看文件系统块大小
[root@benet17 ~]# xfs_growfs -l /dev/sda1 | grep bsize
data = bsize=4096 blocks=51200, imaxpct=25

image-20240714182433042

8.2 实战-找出系统中对磁盘读写最多的进程

实战场景1:对于这个服务器,8块磁盘中,哪个硬盘最繁忙?哪个分区最繁忙?
  1. 通过iostat命令查看IO是否存在瓶颈安装iostat:
[root@benet17 ~]# rpm -ivh /mnt/Packages/sysstat-10.1.5-12.el7.x86_64.rpm

常用参数:

  • -d 仅显示磁盘统计信息。
  • -k 以K为单位显示每秒的磁盘请求数,默认单位块。
  • -p device | ALL 用于显示块设备及系统分区的统计信息。
[root@benet17 ~]# iostat -d -k -p /dev/sda
Linux 2.6.32-220.el6.x86_64 (benet17.cn) 03/20/2017 _x86_64_ (4 CPU)
Device: tps  kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 6.64 167.01 18.53 301418 33437
sda1 0.33 1.28 0.00 2317 9
sda2 6.03 164.53 18.52 296949 33428
sda3 0.18 0.80 0.00 1452 0

注:
每列含意:

  • kB_read/s 每秒从磁盘读入的数据量,单位为K。
  • kB_wrtn/s 每秒向磁盘写入的数据量,单位为K。
  • kB_read 读入的数据总量,单位为K。
  • kB_wrtn 写入的数据总量,单位为K。
  1. 测试,给磁盘写入一些内容,写入时尽可能不读磁盘?
[root@benet17 ~]# dd if=/dev/zero of=a.txt bs=10M count=1000 ; sync  # 读入的数据用/dev/zero,/dev/zero不会读磁盘的。
sync  # 把内存中的数据快速写到磁盘上。只做dd不执行sync,不容易看不出写入效果这一招学到手:1
[root@benet17 ~]# iostat -p sda -dk
Linux 2.6.32-220.el6.x

86_64 (benet17.cn) 03/03/2017 _x86_64_ (4 CPU) Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 6.07 128.02 463.04 298190 1078577
sda1 0.25 0.99 0.00 2317 9
sda2 5.60 126.10 463.04 293721 1078568

image-20240714182754941

实战场景2:公司的服务器很卡,查看CPU使用率不高,内存也够用,但就是卡,尤其是打开新程序或文件时,更卡。此时是哪出问题了?

这时系统的瓶颈在哪里? 在磁盘IO上。使用iotop命令,查看哪个进程使用磁盘读写最多。

安装:

[root@benet17 ~]# rpm -ivh /mnt/Packages/iotop-0.6-2.el7.noarch.rpm

iotop的参数:

  • -o, -only 只显示在读写硬盘的程序
  • -d SEC, -delay=SEC 设定显示时间间隔。 刷新时间

iotop常用快捷键:

  • <- / ->:左右箭头:改变排序方式,默认是按IO排序。
  • r:改变排序顺序。
  • o:只显示有IO输出的进程。
  • p:进程/线程的显示方式的切换。
  • a:显示累积使用量。
  • q:退出,按q或ctrl+C。

例1:找出使用磁盘最多的进程

[root@benet17 ~]# iotop -o -d 1  # 显示正在使用磁盘的进程在另一个终端对磁盘进行大量读操作,执行:
[root@benet17 ~]# find /

查看结果:
并且找出使用系统:cpu,内存,磁盘最多进程。

image-20240714183031135

九、查看Network运行状态相关工具

9.1 实战:找出系统中使用网络最多的进程

实战1:使用nload监控总体带宽使用情况
  1. 安装nload
[root@benet17 ~]# yum install epel-release -y
[root@benet17 ~]# yum install nload -y
  1. 开始监控
[root@benet17 ~]# nload  # 开始监控

然后另一个终端上运行ab,开始测试:

[root@benet17 ~]# rpm -ivh /mnt/Packages/httpd-tools-2.4.6-67.el7.centos.x86_64.rpm
[root@benet17 ~]# ab -n 1000 -c 2 http://www.baidu.com/index.html  # 产生一些测试数据

查看结果:

image-20240714183505144

实战2: 使用nethogs找出使用带宽最多的进程

实战情景:突然今天12:00左右,运维人员接到IDC机房电话,说你的网站流量对外输出很多,这样应该怎么办?

  1. 上传到nethogs到linux上:
    nethogs-0.8.5-1.el7.x86_64.rpm 程序包下载:
[root@benet17 ~]# wget http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/n/nethogs-0.8.5-1.el7.x86_64.rpm
[root@benet17 ~]# rpm -ivh nethogs-0.8.5-1.el7.x86_64.rpm
[root@benet17 ~]# nethogs
  1. 在另一个终端生成一些数据:
[root@benet17 ~]# wget http://issuecdn.baidupcs.com/issue/netdisk/yunguanjia/BaiduNetdisk_5.5.3.exe

查看结果,找出wget是使用流量最多的进程。

image-20240714183804935

十、查看系统整体运行状态

10.1 使用vmstat查看内存及系统整体运行状态

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,MEM内存使用,VMSwap虚拟内存交换情况,IO读写情况。使用vmstat可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率。比top命令节省资源。

注:当机器运行比较慢时,建议大家使用vmstat查看运行状态,不需要使用top,因为top使用资源比较多。

例:

[root@benet17 ~]# vmstat

输入vmstat命令详情看参数

每一列参数作用:

  • r 运行状态的进程个数。展示了正在执行和等待cpu资源的任务个数。当这个值超过了cpu个数,就会出现cpu瓶颈。
  • b 不可中断睡眠 正在进行i/o等待--阻塞状态的进程个数 进程读取外设上的数据,等待时
  • free 剩余内存,单位是KB
  • buffers 内存从磁盘读出的内容
  • cached 内存需要写入磁盘的内容
  • si swapin swap换入到内存
  • so swapout 内存换出到swap 换出的越多,内存越不够用
  • bi blockin 从硬盘往内存读。单位是块。把磁盘中的数据读入内存
  • bo blockout 从内存拿出到硬盘 (周期性的有值) 写到硬盘
  • in 系统的中断次数,cpu调度的次数多
  • cs 每秒的上下文切换速度
  • CPU上下文切换--程序在运行的时候,CPU对每个程序切换的过程。

image-20240714183859695

10.2 使用sar命令记录系统一段时间的运行状态

安装sar命令
[root@benet17 ~]# yum -y install sysstat

sysstat工具包可以把检查到的信息保存下来,存在/var/log/sa目录下。sar默认显示每10分钟统计一次状态信息(从装sysstat包开始)。

sar命令行的常用格式:

sar [options] [-A] [-o file] t [n]

在命令行中,n和t两个参数组合起来定义采样间隔和次数,t为采样间隔,是必须有的参数,n为采样次数,是可选的,默认值是1,-o file表示将命令结果以二进制格式存放在当前目录下的文件中,file在此处不是关键字,是文件名。options为命令行选项,sar命令的选项很多,下面只列出常用选项:

  • -A:所有报告的总和。
  • -v:进程、I节点、文件和锁表状态。
  • -n:网络接口的情况。 #常用参数
  • -u:CPU利用率 #常用参数
  • -d:硬盘使用报告。
  • -o 文件名:打印到屏幕并将采样结果以二进制形式存入当前目录下的文件中。
  • -f 文件名:查看之前保存的二进制文件。
  • -r:没有使用的内存页面和硬盘块。
  • -g:串口I/O的情况。
  • -b:缓冲区使用情况。
  • -a:文件读写情况。
  • -c:系统调用情况。
  • -R:进程的活动情况。
  • -y:终端设备活动情况。
  • -w:系统交换活动。
  • -d:显示磁盘。
  • -d 1 100 # 必须得指定次数。
  • -c:每秒创建进程的个数。
  • -i 1 10 # 指定时间间隔。
  • -P:查看cpu。
  • -r:查看内存。
  • -w:每秒上下文切换次数。
  • -o /cpu.sar # 保存并显示。
  • -f cpu.sar # 读取。
例1:每2秒采样一次,连续采样5次,观察CPU的使用情况,并将采样结果以二进制形式存入当前目录下的文件cpu.sar中
[root@benet17 ~]# sar -u 2 5 -o cpu.sar  # 屏幕显示如下内容,同时内容也会写到当前目录的./cpu.sar中
[root@benet17 ~]# sar -u 2 5 -o cpu.sar
Linux 3.10.0-693.2.2.el7.x86_64 (benet17.cn) 2018年10月15日 _x86_64_ (4 CPU) 22时29分59秒 CPU %user %nice %system %iowait %steal %idle
22时30分01秒 all 1.52 0.13 2

.40 0.63 0.00 95.33
22时30分03秒 all 0.00 0.00 0.50 1.13 0.00 98.37
22时30分05秒 all 0.00 0.00 0.25 0.00 0.00 99.75
22时30分07秒 all 0.12 0.00 0.12 0.00 0.00 99.75
22时30分09秒 all 0.13 0.00 0.25 0.00 0.00 99.62
平均时间: all 0.35 0.03 0.70 0.35 0.00 98.57

image-20240714184133254

在显示内容包括:

  • %usr:CPU处在用户模式下的时间百分比。
  • %sys:CPU处在系统模式下的时间百分比。
  • %wio:CPU等待输入输出完成时间的百分比。
  • %idle:CPU空闲时间百分比。

在所有的显示中,我们应主要注意%wio和%idle,%wio的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。

例2:查看二进制文件cpu.sar中的内容
[root@benet17 ~]# sar -u -f cpu.sar

注:sar命令即可以实时采样,又可以对以往的采样结果进行查询。

image-20240714184210547

64_ (4 CPU) 22时29分59秒 CPU %user %nice %system %iowait %steal %idle
22时30分01秒 all 1.52 0.13 2

.40 0.63 0.00 95.33
22时30分03秒 all 0.00 0.00 0.50 1.13 0.00 98.37
22时30分05秒 all 0.00 0.00 0.25 0.00 0.00 99.75
22时30分07秒 all 0.12 0.00 0.12 0.00 0.00 99.75
22时30分09秒 all 0.13 0.00 0.25 0.00 0.00 99.62
平均时间: all 0.35 0.03 0.70 0.35 0.00 98.57


[外链图片转存中...(img-69ktoed1-1720956501165)]

**在显示内容包括:**

- %usr:CPU处在用户模式下的时间百分比。
- %sys:CPU处在系统模式下的时间百分比。
- %wio:CPU等待输入输出完成时间的百分比。
- %idle:CPU空闲时间百分比。

在所有的显示中,我们应主要注意%wio和%idle,%wio的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。

#### 例2:查看二进制文件cpu.sar中的内容
```sh
[root@benet17 ~]# sar -u -f cpu.sar

注:sar命令即可以实时采样,又可以对以往的采样结果进行查询。

[外链图片转存中…(img-ko28WKqP-1720956501165)]

image-20240714184234235

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/799878.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Zynq7000系列FPGA中的DDRI和DDRC

在AXI接口设计中&#xff0c;主端口&#xff08;Master Port&#xff09;和从端口&#xff08;Slave Port&#xff09;的交互是通过仲裁器&#xff08;Arbiter&#xff09;来管理的&#xff0c;以确保多个主设备能够有序地访问共享资源&#xff08;如DDR内存&#xff09;。这个…

C++20中的constinit说明符

constinit说明符断言(assert)变量具有静态初始化&#xff0c;即零初始化和常量初始化(zero initialization and constant initialization)&#xff0c;否则程序格式不正确(program is ill-formed)。 constinit说明符声明具有静态或线程存储持续时间(thread storage duration)的…

捷配笔记-PCB阻焊颜色对产品有什么影响?

阻焊层也称为阻焊层或阻焊剂。它是一种薄的聚合物层&#xff0c;应用于&#xff08;PCB&#xff09;。阻焊层的目的是保护PCB表面&#xff0c;并有助于防止焊桥。焊桥是两个导体之间的无意连接&#xff0c;通常是由于存在一小块焊料。需要注意的是&#xff0c;阻焊层被视为其单…

书生大模型实战营--L0关卡-Linux

一、SSH登录并完成nvidia-smi查看显卡以及安装pip install gradio4.29.0 二、完成vscode连接远程服务器 三、运行http://127.0.0.1:7860/

HTML表格表单及框架标签

一.表格标签 1.<table></table> 创建表格 2.<caption></caption> 表格的标题 3.<tr></tr>Table Row&#xff08;表格行&#xff09; 4.<td></td>Table Data&#xff08;表格数据&#xff09;其中有属性rowspan"2&quo…

单点触摸屏和多点触摸屏介绍以及原理简略

单点和多点触摸屏技术是现代触摸设备的基础&#xff0c;下述简单解释这两种技术及其差异。 单点触摸屏 单点触摸屏只能在某一时刻检测一个触摸点的位置。这种触摸屏适用于简单的触摸交互&#xff0c;如点击和拖动。 工作原理 单点触摸屏主要通过以下几种技术实现&#xff1…

SQL server 练习题2

课后作业 作业 1&#xff1a;自己查找方法&#xff0c;将 homework_1.xls 文件数据导入到 SQLServer 的 homework 数据库中。数据导入完成后&#xff0c;把表名统一改为&#xff1a;外卖表 如下所示&#xff1a; 作业 2&#xff1a;找出所有在 2020 年 5 月 1 日至 5 月 31 …

【Redis从0到1进阶】Redis 持久化

笔记内容来自B站博主《遇见狂神说》&#xff1a;Redis视频链接 Redis 是内存数据库&#xff0c;如果不将内存中的数据库状态保存到磁盘&#xff0c;那么一旦服务器进程退出&#xff0c;服务器中的数据库状态也会消失。所有Redis 提供了持久化功能&#xff01; 一、RDB&#xff…

【256 Days】我的创作纪念日

目录 &#x1f33c;01 机缘 &#x1f33c;02 收获 &#x1f33c;03 日常 &#x1f33c;04 成就 &#x1f33c;05 憧憬 最近收到官方来信&#xff0c; 突然发现&#xff0c;不知不觉间&#xff0c;距离发布的第一篇博客已过256天&#xff0c;这期间我经历了春秋招、毕业答辩…

AV1 编码标准熵编码技术概述

AV1熵编码 AV1编码技术是一种开源的视频编解码标准&#xff0c;由开放媒体联盟&#xff08;AOMedia&#xff09;开发&#xff0c;旨在提供高效的视频压缩&#xff0c;同时避免复杂的专利授权问题。在熵编码方面&#xff0c;AV1采用了一种多符号上下文自适应算术编码技术&#x…

在 PostgreSQL 里如何实现数据的实时监控和性能瓶颈的快速定位?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 在 PostgreSQL 里如何实现数据的实时监控和性能瓶颈的快速定位一、数据实时监控的重要性二、PostgreSQ…

数据库:基本操作

SQL struct query language 关系型数据库 非关系 芒果db ddl data defination language 建表 dml 新增 修改 删除一行 data modifty dql 查询 data query language 查询 select 数据库 sun solaris gnu 1、分类&#xff1a; 大型 中型 …

MySQL学习记录 —— 이십 常用工具包

文章目录 1、总览2、mysqlcheck - 表维护程序1、作用2、注意事项3、语法4、命令选项下面每块都大致有这四个部分 3、Mysqldump - 数据库备份程序4、mysqladmin - MySQL 服务器管理程序5、mysqlshow - 显示数据库、表和列信息6、mysqldumpslow - 总结慢查询日志文件7、mysqlbinl…

内存ECC基础纠错算法有哪些?

3.1 基础纠错算法 3.1.1 SECDED纠错算法 SECDED&#xff08;Single Error Correction Double Error Detection&#xff09;是一种经典的ECC方案&#xff0c;能够纠正单比特错误并检测出双比特错误。在图4(a)中&#xff0c;展示了SECDED的编码过程。在这个过程中&#xff0c;使…

STM32之八:IIC通信协议

目录 1. IIC协议简介 1.1 主从模式 1.2 2根通信线 2. IIC协议时序 2.1 起始条件和终止条件 2.2 发送一个字节 2.3 接收一个字节 2.4 应答信号 1. IIC协议简介 IIC协议是一个半双工、同步、一主多从、多主多从的串行通用数据总线。该通信模式需要2根线&#xff1a;SCL、…

mysql(5.5)启动服务和环境配置

正常启动 参考&#xff1a;Javaweb基础之mysql回溯笔记(一) 总的来说就是在mysql的安装目录下&#xff0c;找到bin下面的msyqld.exe&#xff0c;双击即启动了mysql服务&#xff1b; 启动方式二 也可以直接找到windows的服务项进行启动&#xff0c;操作如下&#xff1a; 打开…

opencascade AIS_InteractiveContext源码学习8 trihedron display attributes

AIS_InteractiveContext 前言 交互上下文&#xff08;Interactive Context&#xff09;允许您在一个或多个视图器中管理交互对象的图形行为和选择。类方法使这一操作非常透明。需要记住的是&#xff0c;对于已经被交互上下文识别的交互对象&#xff0c;必须使用上下文方法进行…

MySQL集群、Redis集群、RabbitMQ集群

一、MySQL集群 1、集群原理 MySQL-MMM 是 Master-Master Replication Manager for MySQL&#xff08;mysql 主主复制管理器&#xff09;的简称。脚本&#xff09;。MMM 基于 MySQL Replication 做的扩展架构&#xff0c;主要用来监控 mysql 主主复制并做失败转移。其原理是将真…

linux高级编程(网络)(www,http,URL)

数据的封包和拆包 封包&#xff1a; 应用层数据&#xff08;例如HTTP请求&#xff09;被传递给传输层。传输层&#xff08;TCP&#xff09;在数据前添加TCP头部&#xff08;包含端口号、序列号等&#xff09;。网络层&#xff08;IP&#xff09;在TCP段前添加IP头部&#xff…

解读InnoDB数据库索引页与数据行的紧密关联

目录 一、快速走进索引页结构 &#xff08;一&#xff09;整体展示说明 &#xff08;二&#xff09;内容说明 File Header&#xff08;文件头部&#xff09; Page Header&#xff08;页面头部&#xff09; Infimum Supremum&#xff08;最小记录和最大记录&#xff09; …