1、Linux内置计算器

使用bc命令可以调出命令行的计算器,可以实现简单加减乘除运算

[root@test01 ~]# bc
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1+2
3
2+2
4
2*3
6
1+2*3
7
quit

2、常用性能监控工具

以下工具对于调优人员用的很多,我们也可以看见一些自己熟悉的性能监控工具,比如:ss、ip、free、top、ps、ethtool、netstat……

  系统性能调优学习笔记01_系统调优笔记

2.1、 使用PS命令查看进程

1) 常用PS显示参数说明

ps命令对于运维人员用的比较多了,常见的ps aux、ps -ef都是查看进程的命令

ps常用参数

说明

UID

用户ID

PID

进程ID

TIME

自启动以来消耗总CPU时间

%CPU

前一秒CPU使用率

RSS

显示非交换物理内存

%MEM

占用物理机内存比例

ps -ef

[root@test01 ~]# ps -ef | head -5
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 14:45 ? 00:00:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 17
root 2 0 0 14:45 ? 00:00:00 [kthreadd]
root 3 2 0 14:45 ? 00:00:00 [rcu_gp]
root 4 2 0 14:45 ? 00:00:00 [rcu_par_gp]

ps aux

[root@test01 ~]# ps aux | head -5
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.2 0.3 245184 13852 ? Ss 14:45 0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 17
root 2 0.0 0.0 0 0 ? S 14:45 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 14:45 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< 14:45 0:00 [rcu_par_gp]

2) 使用-p列出PID

ps + pidof 服务名称命令组合使用可以查看一组服务得到进程ID

ps -p $(pidof sshd)

[root@test01 ~]# ps -p $(pidof sshd)
PID TTY STAT TIME COMMAND
932 ? Ss 0:00 /usr/sbin/sshd -D -oCiphers=aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@opens
1145 ? Ss 0:00 sshd: root [priv]
1234 ? S 0:00 sshd: root@pts/0

3) 格式化打印信息

如果只想单独查看某进程的部分信息,可以使用--format参数格式化打印输出出来

用法: ps aux --format [参数1,参数2,参数...] [ --sort -%mem]

[root@test01 ~]# ps ax --format user,%mem,cmd --sort -%mem | head -n5
USER %MEM CMD
root 1.0 /usr/libexec/sssd/sssd_nss --uid 0 --gid 0 --logger=files
root 1.0 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork --nopid
root 0.7 /usr/libexec/platform-python -Es /usr/sbin/tuned -l -P
polkitd 0.6 /usr/lib/polkit-1/polkitd --no-debug

2.2、使用top监控系统

top命令可以对系统状况进行实时报告,并为用户提供了一个用户过滤和操作数据的接口,顶部显示的是概要信息,底部显示的是进程列表,默认情况下按照CPU占用情况进行排序。

  系统性能调优学习笔记01_系统调优笔记_02

top排序操作

快捷键

说明

RES

shift+m

基于消耗内存进行排序

PID

shift+n

基于PID进行排序

TIME+

shift+t

基于CPU允许时间进行排序

2.3、使用free监控内存使用率

free命令列出了空闲和已使用的物理内存以及交换内存

free命令选项

说明

-b

字节

-k

KB

-m

MB

-g

GB

-s 1

每XX秒更新一次

-h

人类易读方式

  系统性能调优学习笔记01_常用性能监控工具_03

2.4、 监控文件系统使用率

与文件系统相关联的一个稳定标识符是它的UUID,这是一个非常长的十六进制数字,用作普遍唯一的标识符。这个UUID是文件系统的一部分,只要不重新创建文件系统,它就保持不变。

1) lsblk命令

lsblk-fp命令列出了设备的完整路径,以及uuid和挂载点,以及分区中的文件系统类型。如果文件系统未挂载,则挂载点显示为空。

[root@test01 ~]# lsblk -fp
NAME FSTYPE LABEL UUID MOUNTPOINT
/dev/sr0
/dev/vda
├─/dev/vda1 xfs 9aa64678-9610-4652-a563-0728ebc9a7c1 /boot
└─/dev/vda2 LVM2_member qLf0f9-jMrY-6eIV-63U3-OQyH-fufo-mYS416
├─/dev/mapper/cs-root xfs 210df3f4-2d3f-4cc5-9b6c-2b17bb6b83a5 /
├─/dev/mapper/cs-swap swap 0d5ff9f0-2fec-46bb-bb29-8c86312e55c3 [SWAP]
└─/dev/mapper/cs-home xfs f2c2d606-ca7c-4775-ad85-40e9140ad544

2) findmnt命令

findmnt命令允许用户快速查看在哪里挂载了什么,以及使用哪些选项。执行不带任何选项的findnt命令将以树状布局列出所有已挂载的文件系统。

findmnt参数

说明

-s

从/etc/fstab文件中读取文件系统

-S

根据源磁盘搜索文件系统

[root@test01 ~]# findmnt -s /dev/vda1 
TARGET SOURCE FSTYPE OPTIONS
/boot UUID=9aa64678-9610-4652-a563-0728ebc9a7c1 xfs defaults
[root@test01 ~]# findmnt -S /dev/vda1
TARGET SOURCE FSTYPE OPTIONS
/boot /dev/vda1 xfs rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota

3) dh命令

df命令提供有关文件系统使用总量的信息

dh参数

说明

-h

转成人类可读的方式

[root@test01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 8.5M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/cs-root 70G 2.6G 68G 4% /
/dev/vda1 1014M 199M 816M 20% /boot
tmpfs 374M 0 374M 0% /run/user/0

4) du命令

du命令显示给定目录及其子目录中所有文件的总大小

du参数

说明

-s

总数

-h

人类易读方式

[root@test01 ~]# du -s /etc/
23096 /etc/
[root@test01 ~]# du -sh /etc/
23M /etc/

2.5、 使用GNOME系统监控

GNOME桌面上可用的System Monitor提供了关于系统状态、负载和进程的统计数据,以及操作这些进程的能力。与其他监视工具(如top、ps和free命令)类似,System Monitor提供系统范围和每个进程的数据。这些监视工具检索常用的查看信息,并可以通过命令行或图形用户界面(由系统管理员决定)使用。

gnome-system-monitor

  系统性能调优学习笔记01_常用性能监控工具_04

3、sysstat工具包

sysstat包提供了Linux系统性能监控工具。sysstat包工具从内核计数器获取数据,列出他们并且从进程执行历史中在一个数据库中保存数据。一些工具在搜集完数据之后将信息存放在一个文件中,然后计算有意义的数值。这让用户可以用时间间隔访问数据。

工具名

说明

mpstat

报告CPU相关统计报告

iostat

报告磁盘IO统计信息信息

pidstat

报告系统进程统计信息

tapestat

报告连接到系统的device设备信息

cifsiostat

共享存储统计信息

sar

搜集、报告和保存系统活动信息

安装sysstat软件包

[root@test02 ~]# yum -y install sysstat

3.1 监控CPU利用率

mpstat命令提供关于每个处理器活动的统计数据

1 mpstat字段

mpstat字段

说明

CPU

显示处理器的逻辑ID

%usr

执行用户空间进程的CPU使用率百分比

%sys

执行内核空间进程的CPU使用率百分比

%idle

闲置CPU使用率百分比

[root@test01 ~]# mpstat -P ALL
Linux 4.18.0-269.el8.x86_64 (test01) 02/12/2023 _x86_64_ (4 CPU)

05:30:00 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
05:30:00 PM all 0.11 0.00 0.23 0.20 0.00 0.03 0.00 0.00 0.00 99.42
05:30:00 PM 0 0.09 0.00 0.26 0.30 0.00 0.04 0.00 0.00 0.00 99.30
05:30:00 PM 1 0.13 0.00 0.22 0.15 0.00 0.02 0.00 0.00 0.00 99.48
05:30:00 PM 2 0.12 0.00 0.21 0.19 0.00 0.04 0.00 0.00 0.00 99.43
05:30:00 PM 3 0.13 0.00 0.23 0.15 0.00 0.02 0.01 0.00 0.00 99.46

2 mpstat常用选项

mpstat选项

说明

-I

显示硬件和软件中断数量的统计信息

-o JSON

通过json格式进行输出

-A

列举所有信息

ALL

列出所有

列举CPU信息

[root@test01 ~]# mpstat -I CPU
Linux 4.18.0-269.el8.x86_64 (test01) 02/12/2023 _x86_64_ (4 CPU)

05:43:58 PM CPU 0/s 1/s 7/s 8/s 9/s 11/s 12/s 14/s 15/s 24/s 25/s 26/s 27/s 28/s 29/s 30/s 31/s 32/s 33/s 34/s 35/s 36/s 37/s NMI/s LOC/s SPU/s PMI/s IWI/s RTR/s RES/s CAL/s TLB/s TRM/s THR/s DFR/s MCE/s MCP/s HYP/s HRE/s HVS/s ERR/s MIS/s PIN/s NPI/s PIW/s
05:43:58 PM 0 0.01 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.05 0.00 0.00 0.00 0.01 0.00 0.00 0.00 0.08 0.00 0.00 0.05 0.00 0.00 0.06 0.00 31.47 0.00 0.00 0.00 0.00 8.39 2.32 0.02 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
05:43:58 PM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.92 0.00 0.00 0.00 0.00 0.01 0.00 0.00 0.02 0.00 0.00 0.01 0.00 0.00 0.01 0.00 25.78 0.00 0.00 0.00 0.00 8.68 1.13 0.02 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
05:43:58 PM 2 0.00 0.00 0.00 0.00 0.00 0.01 0.00 0.00 0.00 0.00 0.00 0.00 4.91 0.00 0.00 0.00 0.00 0.00 0.00 0.03 0.00 0.00 0.04 0.00 30.40 0.00 0.00 0.00 0.00 8.22 1.19 0.01 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
05:43:58 PM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.01 0.00 0.04 0.00 2.94 0.00 0.00 8.84 0.00 0.00 0.03 0.00 0.00 0.05 0.00 0.00 0.02 0.00 22.39 0.00 0.00 0.00 0.00 6.27 0.70 0.02 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

通过JSON方式显示统计信息

[root@test01 ~]# mpstat -N ALL -o JSON
{"sysstat": {
"hosts": [
{
"nodename": "test01",
"sysname": "Linux",
"release": "4.18.0-269.el8.x86_64",
"machine": "x86_64",
"number-of-cpus": 4,
"date": "02/12/2023",
"statistics": [
{
"timestamp": "05:37:06 PM",
"node-load": [
{
"node": "all",
"usr": 0.09,
"ni "gnice": 0.00, "idle": 99.51},{"node": "0",
"usr": 0.09,
"nicegnice": 0.00,
"idle": 99.51
}
]
}
]
}
]
}}

3.2 监控磁盘I/O利用率

通过iostat命令可以监控磁盘的使用情况

1) iostat字段

iostat字段

说明

tps

每毫秒的事务数(IOPS)

kB_read/s

千字节读/每秒 统计

kB_wrtn/s

千字节写/每秒 统计

kB_read

总千字节读统计

kB_wrtn

总千字节写统计

[root@test01 ~]# iostat
Linux 4.18.0-269.el8.x86_64 (test01) 02/12/2023 _x86_64_ (4 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
0.06 0.00 0.20 0.08 0.00 99.65

Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
vda 2.40 59.06 11.57 198009 38797
scd0 0.00 0.00 0.00 1 0
dm-0 1.78 45.93 11.11 153982 37260
dm-1 0.03 0.66 0.00 2220 0
dm-2 0.01 0.31 0.00 1044 0

2) 参数说明

iostat参数

说明

-d

显示磁盘I/O使用率报告

-y

忽略启动以来第一个统计数据报告

-z

省略没有任何活动的报告

-x

显示额外的列,包括IOPS、性能表征和延迟分析

[root@test01 ~]# iostat -dyz -x
Linux 4.18.0-269.el8.x86_64 (test01) 02/12/2023 _x86_64_ (4 CPU)

Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
vda 2.04 0.34 58.27 11.45 0.01 0.05 0.67 12.60 4.35 1.52 0.01 28.55 33.99 1.68 0.40
scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.22 0.00 0.00 0.17 0.00 0.78 0.00
dm-0 1.38 0.38 45.31 11.00 0.00 0.00 0.00 0.00 5.91 1.53 0.01 32.72 28.87 2.03 0.36
dm-1 0.03 0.00 0.65 0.00 0.00 0.00 0.00 0.00 1.11 0.00 0.00 22.65 0.00 0.81 0.00
dm-2 0.01 0.00 0.31 0.00 0.00 0.00 0.00 0.00 2.02 0.00 0.00 21.75 0.00 1.88 0.00

3.3 监控进程使用率

通过pidstat命令报告进程或CPU、磁盘I/O、内存的使用情况

pidstat选项

说明

-t

显示每个进程信息

-d

显示进程的磁盘统计信息

-r

显示进程的页故障和内存使用情况

-u

显示进程的CPU利用率(默认值)

[root@test01 ~]# pidof sshd
1554 1500 1487 1483 938
[root@test01 ~]# pidstat -p 1554 1 3
Linux 4.18.0-269.el8.x86_64 (test01) 02/12/2023 _x86_64_ (4 CPU)

06:05:43 PM UID PID %usr %system %guest %wait %CPU CPU Command
06:05:44 PM 0 1554 0.00 0.00 0.00 0.00 0.00 2 sshd
06:05:45 PM 0 1554 0.00 0.00 0.00 0.00 0.00 2 sshd
06:05:46 PM 0 1554 0.00 0.00 0.00 0.00 0.00 2 sshd
Average: 0 1554 0.00 0.00 0.00 0.00 0.00 - sshd

显示进程信息(sshd)

[root@test01 ~]# pidstat -p 1554 -t -d -r
Linux 4.18.0-269.el8.x86_64 (test01) 02/12/2023 _x86_64_ (4 CPU)

06:17:15 PM UID TGID TID minflt/s majflt/s VSZ RSS %MEM Command
06:17:15 PM 0 1554 - 0.04 0.00 168500 5500 0.14 sshd
06:17:15 PM 0 - 1554 0.04 0.00 168500 5500 0.14 |__sshd

06:17:15 PM UID TGID TID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
06:17:15 PM 0 1554 - 0.00 0.00 0.00 0 sshd
06:17:15 PM 0 - 1554 0.00 0.00 0.00 0 |__sshd

3.4 监控虚拟内存利用率

vmstat参数位于procps-ng包的一部分,包括常见的性能分析命令top和free,内存统计信息默认值为KiB,允许一些其他单位进行统计

1) vmstat字段

vmstat字段

统计数据

说明

process

r

等待运行进程数

b

不可中断或睡眠进程数

memory

swpd

交换内存使用量

free

空闲内存

buff

缓冲区内存量

cache

缓存内存量

swap

si

每秒交换的内存页数

so

每秒换出的内存页数

io

bi

每秒从块设备接收的块

bo

每秒送到块的设备

system

in

每秒引发终端的数

cs

每秒切换的上下文

cpu

us

运行用户空间代码的时间百分比

sy

运行kernel空间代码时间百分比

id

空闲时间百分比

wa

等待I/O完成阻塞的时间百分比

st

进程已经准备好即将运行,但CPU时间被支持该虚拟机的管理程序窃取时间百分比(CPU被其他虚拟机使用)

2) vmstat选项

vmstat -S选项

说明

k

KB 进行统计

K

KiB 进行统计

m

MB 进行统计

M

MiB 进行统计

# 通过四种不同单位进行统计
[root@test01 ~]# for i in {k,K,m,M}; do vmstat -S $i ; done
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 3458322 3239 248279 0 0 11 2 38 37 0 0 100 0 0
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 3377296 3164 242460 0 0 11 2 38 37 0 0 100 0 0
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 3458 3 248 0 0 11 2 38 37 0 0 100 0 0
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 3298 3 236 0 0 11 2 38 37 0 0 100 0 0

3.5 生成系统活动报告

system activity reports(sar)监视当前系统活动,并可以将配置存档和报告历史统计信息,sar命令从内核搜集信息。

  系统性能调优学习笔记01_系统调优笔记_05

常见sar命令选项

说明

-B

报告内存分页统计

-b

报告所有设备的I/O和传输统计信息

-d

报告每个块设备的磁盘I/O统计信息

-n

用于网络统计

-r

报告内存利用率统计信息

-o

输出值XX

# 所有设备I/O传输统计信息
[root@test01 ~]# sar -b
Linux 4.18.0-269.el8.x86_64 (test01) 02/12/2023 _x86_64_ (4 CPU)

14:45:29 LINUX RESTART (4 CPU)

02:50:01 PM tps rtps wtps bread/s bwrtn/s
03:00:01 PM 0.23 0.01 0.21 0.89 2.66
03:10:01 PM 0.28 0.02 0.25 0.84 3.05
03:20:01 PM 0.25 0.01 0.25 0.39 3.27
03:30:01 PM 2.82 2.29 0.53 405.05 40.80
03:40:01 PM 0.49 0.07 0.42 2.35 10.32
03:50:01 PM 0.33 0.04 0.29 0.81 4.35
04:00:01 PM 0.32 0.02 0.29 0.28 3.71
Average: 0.67 0.35 0.32 58.66 9.74

05:06:49 PM LINUX RESTART (4 CPU)

05:10:01 PM tps rtps wtps bread/s bwrtn/s
05:20:01 PM 0.22 0.00 0.22 0.00 2.43
05:30:01 PM 0.24 0.00 0.24 0.01 2.66
05:40:01 PM 0.24 0.00 0.24 0.00 2.68
05:50:01 PM 0.25 0.00 0.25 0.00 2.86
06:00:01 PM 0.27 0.01 0.26 0.33 3.40
06:10:01 PM 0.25 0.01 0.23 0.51 2.82
06:20:01 PM 0.23 0.00 0.23 0.13 2.59
06:30:01 PM 0.26 0.00 0.26 0.00 3.48
06:40:01 PM 0.26 0.00 0.26 0.00 4.88
Average: 0.25 0.00 0.25 0.11 3.09
[root@test01 ~]# sar -o report.out 1 3 -b
Linux 4.18.0-269.el8.x86_64 (test01) 02/12/2023 _x86_64_ (4 CPU)

06:51:24 PM tps rtps wtps bread/s bwrtn/s
06:51:25 PM 0.00 0.00 0.00 0.00 0.00
06:51:26 PM 0.00 0.00 0.00 0.00 0.00
06:51:27 PM 0.00 0.00 0.00 0.00 0.00
Average: 0.00 0.00 0.00 0.00 0.00

通过sar -q -f XX查看输出信息

[root@test01 ~]# sar -q -f report.out
Linux 4.18.0-269.el8.x86_64 (test01) 02/12/2023 _x86_64_ (4 CPU)

06:51:24 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
06:51:25 PM 0 150 0.00 0.00 0.00 0
06:51:26 PM 0 150 0.00 0.00 0.00 0
06:51:27 PM 0 150 0.00 0.00 0.00 0
Average: 0 150 0.00 0.00 0.00 0

查看磁盘状况

[student@servera ~]$ sar -n DEV
Linux 4.18.0-80.el8.x86_64 (servera.lab.example.com) 02/12/2023 _x86_64_ (2 CPU)

08:13:48 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
08:14:48 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
08:14:48 PM enp1s0 2.63 1.18 0.20 0.14 0.00 0.00 0.00 0.00
08:15:52 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
08:15:52 PM enp1s0 1.66 0.74 0.12 0.14 0.00 0.00 0.00 0.00
08:16:48 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
08:16:48 PM enp1s0 3.50 2.08 0.27 0.29 0.00 0.00 0.00 0.00
08:17:52 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
08:17:52 PM enp1s0 2.23 1.03 0.17 0.22 0.00 0.00 0.00 0.00
08:18:52 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
08:18:52 PM enp1s0 3.92 3.07 0.29 6.51 0.00 0.00 0.00 0.00
08:19:48 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
08:19:48 PM enp1s0 2.54 1.13 0.19 0.15 0.00 0.00 0.00 0.00
08:20:48 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
08:20:48 PM enp1s0 1.93 0.92 0.14 0.13 0.00 0.00 0.00 0.00
08:21:52 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
08:21:52 PM enp1s0 3.10 1.55 0.23 0.21 0.00 0.00 0.00 0.00
08:22:01 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
08:22:01 PM enp1s0 3.54 1.88 0.31 0.21 0.00 0.00 0.00 0.00
08:23:52 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
08:23:52 PM enp1s0 3.03 1.44 0.23 0.22 0.00 0.00 0.00 0.00
08:24:52 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
08:24:52 PM enp1s0 2.73 1.32 0.20 0.27 0.00 0.00 0.00 0.00
08:25:48 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
08:25:48 PM enp1s0 1.50 0.62 0.11 0.15 0.00 0.00 0.00 0.00
Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: enp1s0 2.65 1.38 0.20 0.72 0.00 0.00 0.00 0.00

3.6 使用systemd定时器

systemd计时器单元激活另一个不同类型的单元(如服务),其单元名与计时器单元名匹配。计时器单元允许基于计时器的其他单元的激活。为了便于调试,systemd在系统日志中记录定时器事件。

[root@test01 ~]# cat /usr/lib/systemd/system/sysstat-collect.timer
# /usr/lib/systemd/system/sysstat-collect.timer
# (C) 2014 Tomasz Torcz <tomek@pipebreaker.pl>
#
# sysstat-11.7.3 systemd unit file:
# Activates activity collector every 10 minutes

[Unit]
Descriptinotallow=Run system activity accounting tool every 10 minutes

# 通过Timer参数激活计时器单元
[Timer]
OnCalendar=*:00/10

[Install]
WantedBy=sysstat.service

😀不建议直接修改/usr/lib/systemd/system目录下的任何配置文件, 因为在软件更新的时候新的配置文件会覆盖旧的配置文件,可以在/etc/systemd/system目录下更改单元配置文件,/etc目录下文件如果和/usr下文件同名,systemd会优先解析/etc/systemd/system目录下的文件。

# 修改后重新加载systemd并开启服务
[root@test01 ~]# systemctl daemon-reload
[root@test01 ~]# systemctl enable --now <unitname>.timer

4、开源性能监控工具performance co-pilot(PCP)

performance co-pilot是一套用于监视、可视化、存储和分析系统级性能测量的工具、服务和库。PCP提供了监控和管理实时数据以及记录和检索历史数据的框架。它的轻量级分布式架构使得PCP非常适合集中分析本地和远程主机。

PCP体系结构是分布式的,任何PCP工具都可以远程执行。在被监视的主机上,性能度量的每个域,无论是内核、服务层、web服务器还是其他,都需要一个性能度量域代理(PMDA)来负责从该域收集性能度量。所有pmda都由同一主机上的Performance Metrics Collector Daemon (PMCD)控制。

客户机应用程序(监视工具)连接到pmcd守护进程,该守护进程通过将请求转发到适当的PMDA并将响应返回给客户机,从而充当请求的路由器。客户端还可以从PCP档案集(使用pmlogger命令创建)中访问性能数据,以便进行回顾性分析。

PCP的一个优点是,它利用通用存储结构与许多新工具一起使用,同时保留了与遗留工具类似的功能。

4.1 安装performance co-pilot工具

pcp工具有终端版和图形化版

# 命令行版
[root@test01 ~]# yum -y install pcp

# 图形化版
[root@test01 ~]# yum -y install pcp-gui

4.2 开启PCP

安装好后通过运行pmcd开启PCP

[root@test01 ~]# systemctl enable pmcd --now
[root@test01 ~]# systemctl status pmcd.service
● pmcd.service - Performance Metrics Collector Daemon
Loaded: loaded (/usr/lib/systemd/system/pmcd.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2023-02-12 20:38:27 CST; 25min ago
Docs: man:pmcd(1)
Main PID: 47748 (pmcd)
Tasks: 6 (limit: 23656)
Memory: 10.8M
CGroup: /system.slice/pmcd.service
├─47748 /usr/libexec/pcp/bin/pmcd -A
├─47818 /var/lib/pcp/pmdas/root/pmdaroot
├─47819 /var/lib/pcp/pmdas/proc/pmdaproc -d 3
├─47821 /var/lib/pcp/pmdas/xfs/pmdaxfs -d 11
├─47822 /var/lib/pcp/pmdas/linux/pmdalinux
└─47823 /var/lib/pcp/pmdas/kvm/pmdakvm -d 95

Feb 12 20:38:05 test01 systemd[1]: Starting Performance Metrics Collector Daemon...
Feb 12 20:38:27 test01 systemd[1]: Started Performance Metrics Collector Daemon.

4.3 安装额外系统监控工具

[root@test01 ~]# yum -y install pcp-system-tools

4.4 pcp使用

pcp和pcp-system-tools包提供了各种各样的cmd命令行工具收集和显示性能数据

1) pcp free

pcp free命令提供系统中空闲和使用的物理内存和交换空间总量的摘要,以及内核使用的缓存。

# 使用pcp free
[root@test01 ~]# pcp free
total used free shared buff/cache available
Mem: 3825252 247136 3053608 16872 524508 3327980
Swap 8286204 0 8286204

# 使用free,一模一样 ^ _ ^
[root@test01 ~]# free
total used free shared buff/cache available
Mem: 3825252 239924 3060816 16872 524512 3335192
Swap: 8286204 0 8286204

2)pcp dstat

pcp-dstat命令用于通用的性能分析工具,pcpdstat命令允许在同一时间间隔内查看多个系统资源。

pcp dstat选项

说明

--cpu

CPU

--disk

磁盘

--page

内存页

--sys

系统

--time

每次更新延迟

--proc

程序

-s

样本数量

-t

收集间隔

当没有为pcp dstat命令提供参数时,将使用默认选项- cdngy。默认选项分别相当于--cpu、--disk、--net、--page和--sys

[root@test01 ~]# pcp dstat
You did not select any stats, using -cdngy by default.
----total-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai stl| read writ| recv send| in out | int csw
0 0 100 0 0| 0 0 | 599B 1166B| 0 0 | 172 170
0 0 100 0 0| 0 0 |1231B 1483B| 0 0 | 168 176
1 0 100 0 0| 0 16k| 601B 1079B| 0 0 | 162 170
0 1 100 0 0| 0 0 | 600B 1730B| 0 0 | 159 168
0 0 100 0 0| 0 0 | 600B 1420B| 0 0 | 155 161
0 0 100 0 0| 0 0 |1079B 1267B| 0 0 | 169 164
0 0 100 0 0| 0 0 | 600B 1110B| 0 0 | 143 145
0 1 100 0 0| 0 0 | 600B 1046B| 0 0 | 154 169
0 0 100 0 0| 0 0 | 600B 1030B| 0 0 | 152 155
0 0 100 0 0| 0 0 |1020B 1284B| 0 0 | 152 154
0 0 100 0 0| 0 0 | 600B 960B| 0 0 | 141 146
0 0 99 0 0| 0 0 | 600B 1030B| 0 0 | 161 165
0 0 100 0 0| 0 0 | 600B 1046B| 0 0 | 209 189
0 0 100 0 0| 0 0 |1019B 1251B| 0 0 | 154 170
0 0 99 0 0| 0 0 | 600B 1047B| 0 0 | 153 158
0 0 100 0 0| 0 0 | 600B 1046B| 0 0 | 148 172
0 1 98 0 0| 0 32k| 600B 2523B| 0 0 | 698 755
0 0 99 0 0| 0 0 |1020B 1696B| 0 0 | 207 189
……

分析系统时,会持续分析,并且带颜色😀

  系统性能调优学习笔记01_系统调优笔记_06

每隔两秒,一共执行8次进行分析

[root@test01 ~]# pcp dstat --time --cpu --proc 2 8
----system---- ----total-usage---- ---procs---
time |usr sys idl wai stl|run blk new
12-02 21:20:16| | 0 0
12-02 21:20:18| 0 0 100 0 0| 0 0 6.0
12-02 21:20:20| 0 0 99 0 0| 0 0 6.0
12-02 21:20:22| 0 0 100 0 0| 0 0 6.0
12-02 21:20:24| 0 0 99 0 0| 0 0 6.0
12-02 21:20:26| 0 0 100 0 0| 0 0 6.0
12-02 21:20:28| 0 0 100 0 0| 0 0 6.0
12-02 21:20:30| 0 0 100 0 0| 0 0 6.0
12-02 21:20:32| 0 0 100 0 0| 0 0 6.0

3) pminfo

Performance Co-Pilot有一个基于文本的机制,用于查询单独跟踪的指标。要获取存储在Performance Co-Pilot数据库中的指标列表,请使用pminfo命令。使用pmval命令和度量一起收集相关数据。

# 使用proc.nprocs模块
[root@test01 ~]# pminfo | grep proc.nprocs
proc.nprocs

[root@test01 ~]# pminfo -dt proc.nprocs

proc.nprocs [instantaneous number of processes]
Data Type: 32-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff
Semantics: instant Units: none


# 每隔0.1秒刷新
[root@test01 ~]# pmval -s 5 -t 0.1 proc.nprocs

metric: proc.nprocs
host: test01
semantics: instantaneous value
units: none
samples: 5
interval: 0.10 sec
132
132
132
132
132

4.5 pcp图形工具使用

使用图形工具绘制性能度量数据

[root@mmx_ansible ~]# pmchart

pmchart命令为管理员提供了各种可用的度量来绘制图形,管理员可以配置多个图形以显示在同一个pmchart窗口中

  系统性能调优学习笔记01_常用性能监控工具_07

  系统性能调优学习笔记01_系统调优笔记_08

4.6 pcp访问远程主机

  • 通过PCP图访问远端主机从远程主机访问性能指标:在本地和远程主机上有pcp包
  • 在每个远程主机上授予对端口44321/tcp的访问权
  • 在本地和远程主机上启动并启用pmcd守护进程
  • 在任意需要系统监控工具的主机上有 pcp-system-tools

# 默认情况下,pmchart将连接到本地主机pmcd守护进程,如果要连接到远程主机,输入如下命令
[mmx@mmx_ansible ~]# pmchart -h X.X.X.X

# 安装对应软件包
[mmx@mmx_ansible ~]# yum -y install pcp pcp-system-tools
# 远程主机放行对应防火墙
[mmx@mmx_ansible ~]# firewall-cmd --add-port=44321/tcp --permanent
success
[mmx@mmx_ansible ~]# firewall-cmd --reload
success
[mmx@mmx_ansible ~]# systemctl enable pmcd --now

PCP图形化操作方式:

  • 在PCP图表界面,点击“编辑”菜单,选择“首选项”…
  • 打开Edit菜单,然后选择Preferences....
  • 在“设置”界面中,单击“主机”页签。
  • 单击“添加主机”图标。
  • 在Hostname:字段中输入远程主机名。单击OK按钮,然后单击Close按钮。
  • 要验证附加主机,请从PCP Charts界面单击New Chart图标。单击Metrics选项卡,显示连接到各自主机上pmcd守护进程的主机列表。

点击Preferences

  系统性能调优学习笔记01_常用性能监控工具_09

选择Hosts,设置远程主机

  系统性能调优学习笔记01_系统调优笔记_10

  系统性能调优学习笔记01_常用性能监控工具_11

  系统性能调优学习笔记01_常用性能监控工具_12


4.7 查看PCP日志

PCP也可以使用pmlogger命令将数据存储在日志文件中。缺省情况下pmlogger命令存储日志文件 在/var/log/pcp/pmlogger/HOSTNAME目录中

# pcp使用完之后,日志会放入以下文件夹,使用pmlogger命令查看
[mmx@mmx_ansible ~]# pmlogger /var/log/pcp/pmlogger/XXXX

添加-Z EST+5选项以确保时间戳以 与归档文件的时间戳相同的格式显示,本质上覆盖了本地系统的时区

pmdumplog -L -Z EST+5 /var/log/pcp/pmlogger/host.example.com/20290708.12.24.0