系统性能监控-Linux命令

文章介绍了在Linux系统中如何使用各种命令工具来监控CPU、内存、网络流量以及磁盘使用情况。包括使用ps命令查看进程,通过free命令查看内存,利用ethtool和netstat分析网络,以及df和iostat命令检查磁盘性能。此外,还提到了其他如sar和top等高级监控工具。
摘要由CSDN通过智能技术生成

看CPU情况

jobs:查看当前终端后台运行的进程
fg:将进程调到前台
lscpu:查看CPU信息
cat /proc/cpuinfo:查看CPU信息

看进程情况

ps命令
   -a  显示所有终端机下执行的进程,除了阶段作业领导者之外。
    a  显示现行终端机下的所有进程,包括其他用户的进程。
  -A  显示所有进程。
  -c  显示CLS和PRI栏位。
   c  列出进程时,显示每个进程真正的指令名称,而不包含路径,参数或常驻服务的标示。
  -C<指令名称>  指定执行指令的名称,并列出该指令的进程的状况。
  -d  显示所有进程,但不包括阶段作业领导者的进程。
  -e  此参数的效果和指定"A"参数相同。
   e  列出进程时,显示每个进程所使用的环境变量。
  -f  显示UID,PPID,C与STIME栏位。
   f  用ASCII字符显示树状结构,表达进程间的相互关系。
  -g<群组名称>  此参数的效果和指定"-G"参数相同,当亦能使用阶段作业领导者的名称来指定。
   g  显示现行终端机下的所有进程,包括群组领导者的进程。
  -G<群组识别码>  列出属于该群组的进程的状况,也可使用群组名称来指定。
   h  不显示标题列。
  -H  显示树状结构,表示进程间的相互关系。
  -j或j  采用工作控制的格式显示进程状况。
  -l或l  采用详细的格式来显示进程状况。
   L  列出栏位的相关信息。
  -m或m  显示所有的执行绪。
   n  以数字来表示USER和WCHAN栏位。
  -N  显示所有的进程,除了执行ps指令终端机下的进程之外。
  -p<进程识别码>  指定进程识别码,并列出该进程的状况。
   p<进程识别码>  此参数的效果和指定"-p"参数相同,只在列表格式方面稍有差异。
   r  只列出现行终端机正在执行中的进程。
  -s<阶段作业>  指定阶段作业的进程识别码,并列出隶属该阶段作业的进程的状况。
   s  采用进程信号的格式显示进程状况。
   S  列出进程时,包括已中断的子进程资料。
  -t<终端机编号>  指定终端机编号,并列出属于该终端机的进程的状况。
   t<终端机编号>  此参数的效果和指定"-t"参数相同,只在列表格式方面稍有差异。
  -T  显示现行终端机下的所有进程。
  -u<用户识别码>  此参数的效果和指定"-U"参数相同。
   u  以用户为主的格式来显示进程状况。
  -U<用户识别码>  列出属于该用户的进程的状况,也可使用用户名称来指定。
   U<用户名称>  列出属于该用户的进程的状况。
   v  采用虚拟内存的格式显示进程状况。
  -V或V  显示版本信息。
  -w或w  采用宽阔的格式来显示进程状况。 
[root@monitor_server lianxi]# ps aux|grep ssh
root       1015  0.0  0.2 112900  4308 ?        Ss   09:53   0:00 /usr/sbin/sshd -D
root       2206  0.0  0.3 158904  5592 ?        Ss   14:22   0:00 sshd: root@pts/1
root       2382  0.0  0.3 158904  5596 ?        Ss   15:27   0:00 sshd: root@pts/2
root       3034  0.0  0.0 112824   984 pts/1    S+   17:31   0:00 grep --color=auto ssh
pstree命令

看进程关系

[root@monitor_server lianxi]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
        ├─VGAuthService
        ├─auditd───{auditd}
        ├─chronyd
        ├─crond
        ├─dbus-daemon───{dbus-daemon}
        ├─grafana───12*[{grafana}]
        ├─gssproxy───5*[{gssproxy}]
        ├─irqbalance
        ├─login───bash
        ├─lvmetad
        ├─master─┬─pickup
        │        └─qmgr
        ├─nginx───nginx
        ├─polkitd───6*[{polkitd}]
        ├─prometheus───9*[{prometheus}]
        ├─rpcbind
        ├─rsyslogd───2*[{rsyslogd}]
        ├─sshd─┬─sshd───bash───pstree
        │      └─sshd───bash
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        ├─tuned───4*[{tuned}]
        └─vmtoolsd───2*[{vmtoolsd}]

看内存情况

free -h:

[root@monitor_server lianxi]# free -h
              total        used        free      shared  buff/cache   available
Mem:           1.8G        269M        1.0G        9.6M        502M        1.4G
Swap:          1.0G          0B        1.0G

Mem:内存
total:总的内存
used:使用的
free:空闲的
shared:共享的内存
buff/cache:缓存
buff:在内存的临时存放地,满了就read/write,主要是写入,内存->磁盘
cache:也是一个临时存放地,主要是读取,磁盘->内存
available:可以给下一个进程使用的空间(free+buff/cache)

Swap:交换分区(从磁盘中开辟一块空间作为临时内存使用)

[root@monitor_server lianxi]# cat /proc/sys/vm/swappiness 
30
[root@monitor_server lianxi]# vim /etc/sysctl.conf
[root@monitor_server lianxi]# cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
vm.swappiness=0
[root@monitor_server lianxi]# sysctl -p
vm.swappiness = 0

当物理内存只剩30%时使用交换分区,可以调整为0%

OOM
内存溢出:申请内存超过系统能提供的内存
进程出现oom现象一般都是不能提供业务访问,会被内核杀死

查看网络流量

可以使用监控软件查看路由器和交换机
需要在交换机和路由器上打开snmp协议(简单网络管理协议)

ethtool ens33:
[root@monitor_server /]# ethtool ens33
Settings for ens33:
	Supported ports: [ TP ]
	Supported link modes:   10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	                        1000baseT/Full 
	Supported pause frame use: No
	Supports auto-negotiation: Yes
	Supported FEC modes: Not reported
	Advertised link modes:  10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	                        1000baseT/Full 
	Advertised pause frame use: No
	Advertised auto-negotiation: Yes
	Advertised FEC modes: Not reported
	Speed: 1000Mb/s
	Duplex: Full
	Port: Twisted Pair
	PHYAD: 0
	Transceiver: internal
	Auto-negotiation: on
	MDI-X: off (auto)
	Supports Wake-on: d
	Wake-on: d
	Current message level: 0x00000007 (7)
			       drv probe link
	Link detected: yes

ss、netstat命令:

–verbose , -v

详细模式运行。特别是打印一些关于未配置地址族的有用信息。
–numeric , -n

显示数字形式地址而不是去解析主机、端口或用户名。 [[ ]]
–numeric-hosts

显示数字形式的主机但是不影响端口或用户名的解析。 [[ ]]
–numeric-ports

显示数字端口号,但是不影响主机或用户名的解析。 [[ ]]
–numeric-users

显示数字的用户ID,但是不影响主机和端口名的解析。 [[ ]]
–protocol=family , -A

指定要显示哪些连接的地址族(也许在底层协议中可以更好地描述)。 family 以逗号分隔的地址族列表,比如 inet , unix ,
ipx , ax25 , netrom , 和 ddp 。 这样和使用 --inet , --unix ( -x ), --ipx ,
–ax25 , --netrom, 和 --ddp 选项效果相同。 地址族 inet 包括raw, udp 和tcp 协议套接字。 [[ ]]
-c, --continuous

将使 netstat 不断地每秒输出所选的信息。 [[ ]]
-e, --extend

显示附加信息。使用这个选项两次来获得所有细节。 [[ ]]
-o, --timers

包含与网络定时器有关的信息。 [[ ]]
-p, --programs

显示套接字所属进程的PID和名称。 [[ ]]
-l, --listening

只显示正在侦听的套接字(这是默认的选项) [[ ]]
-a, --all

显示所有正在或不在侦听的套接字。加上 --interfaces 选项将显示没有标记的接口。 [[ ]]
-F

显示FIB中的路由信息。(这是默认的选项) [[ ]]
-C

显示路由缓冲中的路由信息。

[root@monitor_server /]# netstat -anplut
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1289/master     

相关参数含义:

Proto

套接字使用的协议。 [[ ]] Recv-Q

连接此套接字的用户程序未拷贝的字节数。 [[ ]] Send-Q

远程主机未确认的字节数。 [[ ]] Local Address

套接字的本地地址(本地主机名)和端口号。除非给定-n --numeric ( -n )
选项,否则套接字地址按标准主机名(FQDN)进行解析,而端口号则转换到相应的服务名。 [[ ]] Foreign Address

套接字的远程地址(远程主机名)和端口号。 Analogous to “Local Address.” [[ ]] State

套接字的状态。因为在RAW协议中没有状态,而且UDP也不用状态信息,所以此行留空。通常它为以下几个值之一:

ESTABLISHED
套接字有一个有效连接。 SYN_SENT
套接字尝试建立一个连接。 SYN_RECV
从网络上收到一个连接请求。 FIN_WAIT1
套接字已关闭,连接正在断开。 FIN_WAIT2
连接已关闭,套接字等待远程方中止。 TIME_WAIT
在关闭之后,套接字等待处理仍然在网络中的分组 CLOSED
套接字未用。 CLOSE_WAIT
远程方已关闭,等待套接字关闭。 LAST_ACK
远程方中止,套接字已关闭。等待确认。 LISTEN
套接字监听进来的连接。如果不设置 --listening (-l) 或者 --all (-a) 选项,将不显示出来这些连接。 CLOSING
套接字都已关闭,而还未把所有数据发出。 UNKNOWN
套接字状态未知。

lsof命令

查看本机端口、进程

[root@monitor_server /]# lsof -i:22
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1015 root    3u  IPv4  23632      0t0  TCP *:ssh (LISTEN)
sshd    1015 root    4u  IPv6  23634      0t0  TCP *:ssh (LISTEN)
sshd    1556 root    3u  IPv4  22345      0t0  TCP monitor_server:ssh->192.168.2.110:50067 (ESTABLISHED)
sshd    2206 root    3u  IPv4  46610      0t0  TCP monitor_server:ssh->192.168.2.110:53686 (ESTABLISHED)
[root@monitor_server /]# lsof -p 1
COMMAND PID USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
systemd   1 root  cwd       DIR              253,0     4096         64 /
systemd   1 root  rtd       DIR              253,0     4096         64 /
systemd   1 root  txt       REG              253,0  1632776     358540 /usr/lib/systemd/systemd
[root@monitor_server /]# lsof /root
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
bash    1532 root  cwd    DIR  253,0      178 8409153 /root

dstat
[root@monitor_server lianxi]# dstat -ma
------memory-usage----- ----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
 used  buff  cach  free|usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw 
 323M 2108k  468M 1026M|  0   0 100   0   0   0|  52k   22k|   0     0 |   0     0 |  75   123 
 323M 2108k  468M 1026M|  0   0 100   0   0   0|   0     0 | 150B 1102B|   0     0 |  88   128 
 323M 2108k  468M 1026M|  0   0 100   0   0   0|   0     0 |  60B  426B|   0     0 |  60   104 
 323M 2108k  468M 1026M|  0   0 100   0   0   0|   0     0 |  60B  426B|   0     0 |  58    97 

nc、nmap、fping、iftop命令

nc:
-g<网关> 设置路由器跃程通信网关,最多可设置8个。
-G<指向器数目> 设置来源路由指向器,其数值为4的倍数。
-h 在线帮助。
-i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。
-l 使用监听模式,管控传入的资料。
-n 直接使用IP地址,而不通过域名服务器。
-o<输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。
-p<通信端口> 设置本地主机使用的通信端口。
-r 乱数指定本地与远端主机的通信端口。
-s<来源位址> 设置本地主机送出数据包的IP地址。
-u 使用UDP传输协议。
-v 显示指令执行过程。
-w<超时秒数> 设置等待连线的时间。
-z 使用0输入/输出模式,只在扫描通信端口时使用。

nmap

[root@monitor_server lianxi]# nmap 192.168.2.202

Starting Nmap 6.40 ( http://nmap.org ) at 2023-05-07 15:59 CST
Nmap scan report for 192.168.2.202
Host is up (0.0000020s latency).
Not shown: 995 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
111/tcp  open  rpcbind
3000/tcp open  ppp
9090/tcp open  zeus-admin

Nmap done: 1 IP address (1 host up) scanned in 1.98 seconds

fping
扫描网段看那些在用,那些没用
iftop
查看实时流量变化

查看磁盘情况

df 命令
-a, --all
    列出包括BLOCK为0的文件系统 
--block-size=SIZE use SIZE-byte blocks
    指定块的大小 
-h,--human-readable
    用常见的格式显示出大小(例如:1K 234M 2G) 
-H,--si
    同上,但是这里的1k等于1000字节而不是1024字节 
-i, --inodes
    用信息索引点代替块表示使用状况 
-k, --kilobytes
    指定块大小等于1024字节来显示使用状况 
-l, --local
    只显示本地文件系统使用状况 
-m, --megabytes
    以指定块大小等于1048576字节(1M)来显示使用状况 
--no-sync
    在取得使用信息前禁止调用同步 (default) 
-P, --portability
    使用POSIX格式输出 
--sync
    在取得使用信息前调用同步 
-t, --type=TYPE
    只显示指定类型(TYPE)的文件系统 
-T, --print-type
    输出每个文件系统的类型 
-x, --exclude-type=TYPE
    只显示指定类型(TYPE)之外的文件系统.
[root@monitor_server lianxi]# df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  898M     0  898M    0% /dev
tmpfs                   tmpfs     910M     0  910M    0% /dev/shm
tmpfs                   tmpfs     910M  9.6M  901M    2% /run
tmpfs                   tmpfs     910M     0  910M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs       8.0G  2.7G  5.4G   34% /
/dev/sda1               xfs      1014M  151M  864M   15% /boot
tmpfs                   tmpfs     182M     0  182M    0% /run/user/0

sar命令

sar命令常用格式
sar [options] [-A] [-o file] t [n]

每间隔一秒采集三次

[root@monitor_server lianxi]# sar -d 1 3
Linux 3.10.0-1160.el7.x86_64 (monitor_server) 	2023年05月07日 	_x86_64_	(4 CPU)

16时18分02秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
16时18分03秒    dev8-0    125.74      0.00   3892.08     30.95      0.08      0.65      0.05      0.59
16时18分03秒   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
16时18分03秒  dev253-0    172.28      0.00   3892.08     22.59      0.11      0.65      0.03      0.59
16时18分03秒  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

DEV
tps:每秒中访问次数
rd_sec/s :每秒读的速度
wr_sec/s :每秒写的速度
avgrq-sz:平均每次设备I/O操作的数据大小(扇区).
avgqu-sz:磁盘请求队列的平均长度.
await:从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒=1000毫秒).
svctm:系统处理每次请求的平均时间,不包括在请求队列中消耗的时间.
%util:繁忙度

iostat命令:
-c      只显示CPU行
-d      显示设备(磁盘)使用状态
-k      以千字节为单位显示磁盘输出
-t       在输出中包括时间戳
-x      在输出中包括扩展的磁盘指标
[root@monitor_server lianxi]# iostat -x
Linux 3.10.0-1160.el7.x86_64 (monitor_server) 	2023年05月07日 	_x86_64_	(4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.03    0.00    0.05    0.00    0.00   99.92

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.03    0.37    0.36    21.42    10.27    87.16     0.00    0.54    0.57    0.50   0.27   0.02
scd0              0.00     0.00    0.00    0.00     0.04     0.00   114.22     0.00    1.39    1.39    0.00   1.06   0.00
dm-0              0.00     0.00    0.28    0.39    20.07    10.18    90.70     0.00    0.64    0.71    0.59   0.28   0.02
dm-1              0.00     0.00    0.00    0.00     0.09     0.00    50.09     0.00    0.11    0.11    0.00   0.08   0.00

rrqm/s: 每秒进行 merge 的读操作数目。
wrqm/s: 每秒进行 merge 的写操作数目。
r/s: 每秒完成的读 I/O 设备次数。
w/s: 每秒完成的写 I/O 设备次数。
rsec/s: 每秒读扇区数。
wsec/s: 每秒写扇区数。
rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。(需要计算)
wkB/s: 每秒写K字节数。是 wsect/s 的一半。(需要计算)
avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。
avgqu-sz: 平均I/O队列长度。
await: 平均每次设备I/O操作的等待时间 (毫秒)。
svctm: 平均每次设备I/O操作的服务时间 (毫秒)。
%util: 一秒中有百分之多少的时间用于 I/O 操作。

top命令

top - 10:00:25 up 38 min,  2 users,  load average: 0.00, 0.01, 0.04
Tasks: 130 total,   1 running, 129 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.1 si,  0.0 st
KiB Mem :  1863028 total,  1183984 free,   274524 used,   404520 buff/cache
KiB Swap:  1048572 total,  1048572 free,        0 used.  1431016 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                          P

up(启动时间
load average(平均负载):过去1分钟、5分钟、15分钟处于运行或不可终段状态的平均进程数量,用来判断系统是否繁忙,1个CPU核心这个值超过1就繁忙、4个就是超过4(不标准的就是值<5就不忙)

Tasks(进程):total(有多少进程),runing(运行),sleep(相当于就绪和阻塞),stop(暂停挂起)、zombie(僵尸进程,终止了但还占用空间)
解决僵尸进程:杀死僵尸进程的父进程

PID 进程id
PPID 父进程id
RUSER Real user name
UID 进程所有者的用户id
USER 进程所有者的用户名
GROUP 进程所有者的组名
TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
PR 优先级
NI nice值。负值表示高优先级,正值表示低优先级
P 最后使用的CPU,仅在多CPU环境下有意义
%CPU 上次更新到现在的CPU时间占用百分比
TIME 进程使用的CPU时间总计,单位秒
TIME+ 进程使用的CPU时间总计,单位1/100秒
%MEM 进程使用的物理内存百分比
VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
CODE 可执行代码占用的物理内存大小,单位kb
DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
SHR 共享内存大小,单位kb
nFLT 页面错误次数
nDRT 最后一次写入到现在,被修改过的页面数。
S 进程状态。

可以按f键进入选项页面,空格确定选中:

Fields Management for window 1:Def, whose current sort field is %CPU
   Navigate with Up/Dn, Right selects for move then <Enter> or Left commits,
   'd' or <Space> toggles display, 's' sets sort.  Use 'q' or <Esc> to end!

* PID     = Process Id             P       = Last Used Cpu (SMP) 
* USER    = Effective User Name    TIME    = CPU Time            
* PR      = Priority               SWAP    = Swapped Size (KiB)  
* NI      = Nice Value             CODE    = Code Size (KiB)     
* VIRT    = Virtual Image (KiB)    DATA    = Data+Stack (KiB)    
* RES     = Resident Size (KiB)    nMaj    = Major Page Faults   
* SHR     = Shared Memory (KiB)    nMin    = Minor Page Faults   
* S       = Process Status         nDRT    = Dirty Pages Count   
* %CPU    = CPU Usage              WCHAN   = Sleeping in Function
* %MEM    = Memory Usage (RES)     Flags   = Task Flags <sched.h>
* TIME+   = CPU Time, hundredths   CGROUPS = Control Groups      
* COMMAND = Command Name/Line      SUPGIDS = Supp Groups IDs     
  PPID    = Parent Process pid     SUPGRPS = Supp Groups Names   
  UID     = Effective User Id      TGID    = Thread Group Id     
  RUID    = Real User Id           ENVIRON = Environment vars    
  RUSER   = Real User Name         vMj     = Major Faults delta  
  SUID    = Saved User Id          vMn     = Minor Faults delta  
  SUSER   = Saved User Name        USED    = Res+Swap Size (KiB) 
  GID     = Group Id               nsIPC   = IPC namespace Inode 
  GROUP   = Group Name             nsMNT   = MNT namespace Inode 
  PGRP    = Process Group Id       nsNET   = NET namespace Inode 
  TTY     = Controlling Tty        nsPID   = PID namespace Inode 
  TPGID   = Tty Process Grp Id     nsUSER  = USER namespace Inode
  SID     = Session Id             nsUTS   = UTS namespace Inode 

glance命令

直接输入:glances
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值