Linux云计算架构-如何查看系统整体及各资源状态

Linux云计算架构-如何查看系统整体及各资源状态

1. 什么是进程?

进程:已启动的可执行程序的运行实例。动态的,有生命周期和运行状态。 包括以下部分:

  • 已分配内存的地址空间
  • 安全属性,包括所有权凭据和特权
  • 程序的一个或者多个执行线程
  • 进程状态

程序:可执行的二进制文件。

线程:进程和线程都是程序的基本单元,系统利用它们实现系统对应用的并发性。

一个程序至少有一个进程,一个进程至少有一个线程。

关于进程的一些概念:父进程、子进程、僵尸进程

场景拟合: 当第一个进程[PID=1](centos5/6 init 或者 centos7 systemd)产生,不断创建子进程、子子进程,每个父进程都要负责管理自己的子进程,而当父进程结束,而子进程无父进程管理,就会变成僵尸进程。

进程的属性:

属性 详情
进程PID 进程PID,区分进程
父进程PPID 父进程PPID
UID GID 启动进程的用户ID和用户组ID
进程状态 运行R、休眠S、僵尸Z、不可中断D、停止T
进程执行的优先级 一般指top内的NI,用户可调整的优先级
进程连接的终端名 tty=0表示进程运行在第一个终端上
[root@master ~]# tty
/dev/pts/0
进程资源占用 占用资源的大小(内存、cpu)

2. ps命令静态查看进程运行情况

参数 作用
-a 显示所有进程(常用)
-u 显示用户及其他详细信息
-x 显示没有控制终端的进程
-e 显示所有的进程
-f 显示完整格式输出
进程状态 具体描述
R(运行) 进程正在运行或在运行队列中等待
S(中断) 进程处于休眠,当接收到某个信号会脱离该状态
D(不可中断) 进程无法中断
Z(僵死) 进程已经终止,但是进程描述符仍然存在。理论上终止了,系统中仍存在。
T(停止) 进程收到停止信号后停止运行

2.1 ps aux 按BSD格式显示进程

在这里插入图片描述

列名 含义
USER 启动进程的用户
PID 进程ID
%CPU 进程占用CPU的百分比
%MEM 进程占用内存的百分比
VSZ 进程占用虚拟内存的大小
RSS 进程占用物理内存的大小
TTY 系统运行所在终端,tty0-tty6。
?表示不在终端上运行,一般为内核态进程。
STAT 进程当前的状态。有RSTDZ五种进程状态
R:程序运行
S:程序休眠,可唤醒
T:程序停止
Z:程序应该停止了,但父进程无法停止该进程,导致进程僵死。
START 进程启动的时间
TIME 进程实际使用cpu的时间
COMMAND 进程的实际指令
# 第一个终端编辑a.txt
[root@master ~]# vim a.txt
# 第二个终端查看进程状态,可以看到该进程处于S+状态,即表示当前进程运行在前台,可见的。
[root@master ~]# ps aux | grep vim
root       9390  0.4  0.2 151792  5340 pts/1    S+   07:40   0:00 vim a.txt
root       9392  0.0  0.0 112724   988 pts/0    S+   07:41   0:00 grep --color=auto vim
[root@master ~]# ps aux | grep vim
root       9390  0.0  0.2 151792  5340 pts/1    T    07:40   0:00 vim a.txt
root       9424  0.0  0.0 112724   988 pts/0    S+   07:42   0:00 grep --color=auto vim
# 第一个终端,按ctrl+z,进程会收到sigstop信号,暂停该进程。再次查该进程的状态,会发现已经由S+变成T了。
# ctrl+c   进程会收到sigint信号,终止一个进程。
# ctrl+d   表示输入结束或注销,即EOF

在这里插入图片描述
在这里插入图片描述

2.2 ps -ef 按标准格式显示进程

在这里插入图片描述

列名 含义
UID 启动进程的用户
PID 进程ID
PPID 父进程ID
C 进程的cpu利用率
TIME 进程的启动时间
TTY 系统运行所在终端,tty1-tty6。
?表示不在终端上运行,一般为内核态进程。
TIME 进程实际使用cpu的时间
CMD 进程的实际指令

3. uptime命令查看系统负载

[root@master ~]# uptime
 02:47:10 up  4:52,  3 users,  load average: 0.35, 0.11, 0.08

02:47:10 当前时间
up  4:52 系统运行时间,4小时52分
3 users  当前登录用户数
load average: 0.35, 0.11, 0.08   系统负载,1分钟、5分钟、15分钟前到当前时间的平均负载值。

# cpu负载情况分析
# 单核cpu 1分钟负载>=3,则为高负载
# 4核cpu 1分钟负载>=12,则为高负载
# 负载过高,应升级cpu

4. top命令动态查看系统进程的总体情况

在这里插入图片描述

# 第一行与uptime命令的结果一样

# 第二行为系统进程处于运行、休眠、停止、僵尸状态的进程数

# 第三行:cpu百分比:系统用户进程使用(us)、内核中的进程占用(sy)、用户进程中改变过优先级进程所使用(ni)、空闲的(id)、cpu等待I/O完成的时间总量(wa)、硬中断消耗时间(hi)、软中断消耗时间(si)、虚拟机偷取物理的时间(st)

# 第四行:内存使用情况:物理内存总量(total)、空闲内内存总量(free)、已使用物理内存总量(used)、内核缓存的内存量(buff/cache)

# 第五行:交换内存使用情况:交换分区总量(total)、空闲交换分区总量(free)、已使用交换分区总量(used)、可利用的内存总量(avail Mem)
# 一般交换分区只有在内存不足时才会使用。

# 第六行:空行

# 第七行:进程ID(PID)、启动进程的用户(USER)、内核动态调整的优先级(PR)、可调整的进程优先级(NI)、进程需要的虚拟内存大小(VIRT)[ps.VSZ=top.VIRT]、进程实际使用的物理内存大小(RES)[ps.RSS=top.RES]、共享内存大小(SHR)、进程状态(S)、cpu占用百分比(%CPU)、内存占用百分比(%MEM)、进程占用cpu的时间(TIME+)[单位0.01s]、进程实际使用命令(COMMAND)

# 进程所占用的物理内存大小 = RES - SHR
# top命令下快捷键的使用
①3s刷新,s设置刷新时间,空格立即刷新
②q退出
③P按%CPU排序   M按%MEM排序  T按时间TIME+排序
④1显示各个内核的cpu使用率
⑤u指定显示哪个用户下的进程
⑥h帮助说明
⑦Z设置显示的颜色
⑧z颜色切换
# top动态查询某个进程的信息
# 获取进程的PID
aster ~]# ps aux | grep vim
[root@master ~]# top -p 23549

# 找出进程中占用cpu最多的进程
top  P按cpu降序排列

# 找出进程中占用内存最多的进程
top  M按内存降序排列

# 查看系统cpu信息  
[root@monitor ~]# cat /proc/cpuinfo | grep processor
processor	: 0
processor	: 1
processor	: 2
processor	: 3
processor	: 4
processor	: 5
processor	: 6
processor	: 7

# 按CPU降序显示系统进程
[root@monitor ~]# ps aux --sort pcpu | more

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

5. lsof命令查看正在打开的文件和进程

作用:查看正在打开的文件或进程的信息

# lsof的使用
# -i 协议
# -i :端口
# -i @ip
# -i 4
# -i 6
[root@master ~]# lsof -i tcp
[root@master ~]# lsof -i :22
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    6862 root    3u  IPv4  40811      0t0  TCP *:ssh (LISTEN)
sshd    6862 root    4u  IPv6  40813      0t0  TCP *:ssh (LISTEN)
[root@master ~]# lsof -i @192.168.8.141
[root@master ~]# lsof -i 4  # ipv4
[root@master ~]# lsof -i 6  # ipv6

# -p 进程号
[root@master ~]# ps aux | grep vim
root       9909  0.0  0.2 151800  5372 pts/1    S+   07:53   0:00 vim a.txt
root       9947  0.0  0.0 112724   988 pts/0    S+   07:54   0:00 grep --color=auto vim
[root@master ~]# lsof -p 9909

6. pstree树状图查看进程

pstree  # 仅显示进程名
pstree -p   # 显示进程名和进程PID

7. 前台进程和后台进程查看和切换

前台进程:在终端中运行的命令,该终端为控制终端,终端关闭,进程结束。

后台进程:也叫守护进程。运行在后台的、不受终端控制的。如web服务器的httpd。

命令 作用
& 命令后加&,后台执行
ctrl+z 前台命令,放到后台并停止
jobs 查看当前的后台进程
fg(foreground) [后台序号] 后台命令调至前台继续运行
bg(background) 后台命令继续执行
# ctrl+z停止或挂起一个进程,并放到后台
[root@master ~]# vim a.txt

[1]+  已停止               vim a.txt
[root@master ~]# jobs
[1]+  已停止               vim a.txt

# 将后台挂起的进程恢复到前台继续运行
[root@master ~]# fg 1

# 将一个命令放到后台,并停止运行
[root@master ~]# jobs
[root@master ~]# vim a.txt &
[1] 10373
[root@master ~]# jobs
[1]+  已停止               vim a.txt

# 后台进程继续执行,vim a.txt命令的执行只能在前台执行,故依旧停止。
[root@master ~]# bg 1
[1]+ vim a.txt &

[1]+  已停止               vim a.txt

# 在工作中,可以这么做。
# vim 编辑一个文档,ctrl+z挂起,查看其他文件内容,再jobs查看后台进程,使用fg 后台进程号 恢复到相应的vim中继续编辑。

8. kill杀死进程

命令 作用
kill PID 杀死某个进程
kill -9 PID 强制终止某个进程
killall 进程名 杀死某个进程名对应的所有进程
pkill 进程名 杀死某个进程名对应的所有进程
# 杀进程这种事情要请示领导,最好不要直接杀,因为该进程可能是其他进程的父进程或者子进程,杀死可能会带来连锁反应。
# 停止状态的进程无法kill
[root@master ~]# ps aux | grep a.txt
root      10373  0.0  0.2 149408  4992 pts/0    T    07:58   0:00 vim a.txt
root      10531  0.0  0.0 112724  1000 pts/0    S+   08:06   0:00 grep --color=auto a.txt
[root@master ~]# kill 10373
[root@master ~]# ps aux | grep a.txt
root      10373  0.0  0.2 149408  4992 pts/0    T    07:58   0:00 vim a.txt
root      10545  0.0  0.0 112724  1000 pts/0    S+   08:06   0:00 grep --color=auto a.txt
# 加参数-9,强制终止进程
[root@master ~]# kill -9 10373
[1]+  已杀死               vim a.txt
[root@master ~]# ps aux | grep a.txt
root      10570  0.0  0.0 112724  1000 pts/0    S+   08:06   0:00 grep --color=auto a.txt

# 杀死sshd有关的进程
[root@master ~]# killall sshd
[root@master ~]# pkill sshd

7. free 查看物理内存和交换分区的使用情况

在这里插入图片描述

字段名 含义
Mem: 内存的使用情况
Swap: 交换区间的使用情况
total 总的可用内存大小、交换分区大小
used 已用的内存大小、已用的交换分区大小
free 空闲的内存大小、空闲的交换分区大小
shared 共享使用的物理内存大小
buff/cache buff和cache(缓冲区)使用的物理内存大小
available 可被应用程序使用的物理内存大小
# 通过文件查看内存
[root@monitor ~]# cat /proc/meminfo 
MemTotal:        1863252 kB
MemFree:          893860 kB    # 剩余内存
MemAvailable:    1227232 kB    # 可用内存
Buffers:            2116 kB
Cached:           461608 kB
SwapCached:            0 kB
Active:           333936 kB    # 活跃内存
Inactive:         398148 kB    # 不活跃内存
# 当内存不够时,若存在交换内存,会把不活跃的内存放到交换内存中,这时候就会空出来一部分内存资源。
# 活跃内存不足,增加内存
# 不活跃内存不足,增加交换内存。


# 按照实际内存使用,从大到小排序显示进程
[root@monitor ~]# ps aux --sort -rss | more  # 降序
[root@monitor ~]# ps aux --sort rss | more   # 升序

8. netstat 检测IP或端口占用情况

在这里插入图片描述

字段 含义
Proto 协议名tcp、udp
Recv-Q 网络接收队列,一般都是0
Send-Q 网络发送队列,一般都是0
Local-Address 监听的本地IP及端口号
Foreign-Address 与本机端口通信的外部socket
State 监听状态,LISTEN表示正在监听。其他状态可参考TCP协议的三次握手、四次挥手
PID/Program name 进程ID和运行的程序名
参数 含义
-a -all 显示所有连线的Socket
-n 直接使用ip地址,不使用域名
-t 显示TCP传输协议的连线状况
-u 显示UDP传输协议的连线状况
-p 显示正在使用Socket的程序识别码和程序名称。
-l 显示监控中的服务器的Socket。
# 日常用法
[root@master ~]# netstat -antup 

[root@master ~]# netstat -lntp

# TCP的四次挥手断开连接时,主动断开方会发送一个ACK包给被动断开方,然后进入TIME_WAIT状态,这时只要被动断开方表示接收到了这个ACK包,就让主动断开方断开连接。时间默认为60s,过了这个时间仍没确认,则主动断开方继续保持连接。
# 若系统中存在大量的处于TIME_WAIT状态的连接,非常占用系统内存和tcp连接,这时可以通过缩短TIME_WAIT的时间用以优化TCP连接。
[root@master ~]# netstat -antup | grep TIME_WAIT
[root@master ~]# cat /proc/sys/net/ipv4/tcp_fin_timeout 
60
[root@master ~]# echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
[root@master ~]# cat /proc/sys/net/ipv4/tcp_fin_timeout 
30

# 也可以使用以下方法修改TIME_WAIT的默认时间
[root@master ~]# vim /etc/sysctl.conf 
net.ipv4.tcp_fin_timeout=30
[root@master ~]# sysctl -p
net.ipv4.tcp_fin_timeout = 30

9. 进程优先级调整

进程优先级所在区间(-20,19)

# 创建一个进程
[root@master ~]# vim a.txt
# 另开一个终端查看优先级
# 查看进程的PID
[root@master ~]# ps aux | grep a.txt
root      11070  0.0  0.2 151792  5372 pts/0    S+   08:41   0:00 vim a.txt
root      11180  0.0  0.0 112724  1000 pts/1    S+   08:43   0:00 grep --color=auto a.txt
# top查看进程的优先级
[root@master ~]# top -p 11070               

在这里插入图片描述
NI=0,即优先级为0。

# 指定优先级执行命令
[root@master ~]# nice -n 5 vim a.txt

# 另开一个终端查看优先级
[root@master ~]# ps aux | grep a.txt
root      11264  0.1  0.2 151792  5376 pts/0    SN+  08:46   0:00 vim a.txt
root      11291  0.0  0.0 112724  1000 pts/1    S+   08:47   0:00 grep --color=auto a.txt
[root@master ~]# top -p 11264

在这里插入图片描述
NI=5,即优先级为5。

# 修改某个进程的优先级
[root@master ~]# ps aux | grep vim
root      11312  0.0  0.2 151792  5372 pts/0    SN+  08:49   0:00 vim a.txt
root      11399  0.0  0.0 112724   984 pts/2    S+   08:50   0:00 grep --color=auto vim
[root@master ~]# renice -10 11312
11312 (进程 ID) 旧优先级为 5,新优先级为 -10
[root@master ~]# top -p 11312

在这里插入图片描述

10. screen后台执行长时间命令·

screen的作用是建立会话,会话中执行的命令是不会因为终端关闭而终止执行的。

当通过远程工具连接服务器执行长时间命令时,不会因为远程工具断开连接而导致执行命令终止。

直接通过远程工具执行的命令,网络断开后,命令会直接终止运行。

只要服务器不关机,或者screen进程不被终止,在screen会话上运行的命令就不会终止。

# 安装screen
[root@master ~]# yum install -y screen

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
关闭终端。一段时间后,再开启一个终端,使用tail -f /root/a.txt查看,可以看到ping命令还在执行。即关闭了终端也无法终止命令的执行。

在这里插入图片描述

# 查看screen会话情况
[root@master ~]# screen -ls
There is a screen on:
	11738.pts-0.master	(Detached)
1 Socket in /var/run/screen/S-root.
# 恢复指定会话
[root@master ~]# screen -r 11738

# 指定创建会话的名称
screen -S test
# 恢复指定名称的会话
screen -r test
# 退出会话
exit

11. 查看IO运行状态

# xfs文件系统查看系统块大小
[root@monitor ~]# xfs_growfs -l /dev/sda1 | grep bsize
log size unchanged, skipping
data     =                       bsize=4096   blocks=262144, imaxpct=25
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
# tune2fs -l /dev/sda1 | grep size    【ext4文件系统查看系统块大小】


==========================================================================
# 查看硬盘的读写速率
[root@monitor ~]# rpm -qf `which iostat`
sysstat-10.1.5-17.el7.x86_64
[root@monitor ~]# iostat -d -k -p /dev/sda
# -d 仅显示磁盘统计信息;-k 以kb为单位显示每秒的磁盘请求数;-p device|ALL 指定磁盘设备
Linux 3.10.0-957.el7.x86_64 (monitor) 	2020年11月06日ZZ 	_x86_64_	(8 CPU)

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               6.40       230.44         6.43     483665      13506
sda1              0.96        12.43         0.98      26088       2048
sda2              5.43       217.21         5.46     455905      11458
[root@monitor ~]# dd if=/dev/zero of=a.txt bs=10M count=10;sync
记录了10+0 的读入
记录了10+0 的写出
104857600字节(105 MB)已复制,0.554522 秒,189 MB/秒
[root@monitor ~]# iostat -dk -p sda    # 在使用上述命令写入文件时,可以看到写入速率增大了挺多。
Linux 3.10.0-957.el7.x86_64 (monitor) 	2020年11月06日 	_x86_64_	(8 CPU)

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               5.63       198.90        47.93     483773     116571
sda1              0.83        10.73         0.84      26088       2048
sda2              4.79       187.49        47.09     456013     114523

========================================================================
# 查看哪个进程使用磁盘读写最多
[root@monitor ~]# ll iotop-0.6-4.el7.noarch.rpm 
-rw-r--r--. 1 root root 53748 11月  6 21:31 iotop-0.6-4.el7.noarch.rpm
[root@monitor ~]# rpm -ivh iotop-0.6-4.el7.noarch.rpm 
[root@monitor ~]# iotop -o -d 1    # 1秒刷新一次

12. 查看Network运行状态

# 监控总体带宽使用情况
[root@monitor ~]# yum install nload -y
[root@monitor ~]# nload

在这里插入图片描述

# 找出使用带宽最多的进程
[root@monitor ~]# yum install nethogs -y
[root@monitor ~]# nethogs

在这里插入图片描述

13. 查看系统整体运行情况

# 查看系统整体情况,在机器运行较慢时不建议使用top查看,建议使用vmstat查看
[root@monitor ~]# vmstat
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 516760   2816 886976    0    0    18     7   22   27  0  0 100  0  0
r 运行状态的进程个数。展示了正在执行和等待cpu资源的任务个数。当这个值超过了cpu个数,就会出现cpu瓶颈。
b 不可中断睡眠、正在进行i/o等待、阻塞状态的进程个数
swpd 使用交换内存的大小
free 剩余内存,单位kb
buff 内存从磁盘读出的内容
cache 内存要写入磁盘的内容
si swapin换入内存
so swapout换出内存,换出到交换内存的越多,说明内存越不够用。
bi blockin 从硬盘往内存读的大小
bo blockout 从内存往硬盘写的大小
in 系统中断次数
cs 每秒的上下文切换速度,cpu调度次数越多,cs越大。
us 系统用户进程使用百分比
sy 内核中的进程占用百分比
id 空闲的cpu百分比
wa cpu等待I/O完成的时间总量
st 虚拟机偷取物理的时间
# 使用sar命令记录系统一段时间的运行状态
[root@monitor ~]# yum install sysstat -y
[root@monitor ~]# sar -h
用法: sar [ 选项 ] [ <时间间隔> [ <次数> ] ]
选项:
	-b	I/O 和传输速率信息状况
	-q	队列长度和平均负载
	-r	内存利用率
	-R	内存状况
	-S	交换空间利用率
	-u [ ALL ] CPU 利用率
	-v	Kernel table 状况
	-w	任务创建与系统转换统计信息
	-W	交换信息
	-y	TTY 设备状况
	-o  保存结果到指定文件
	-f  读取某文件的内容
	-s  统计开始时间
	-e  统计结束时间
# 每2秒记录1次,共5次。

在这里插入图片描述

在这里插入图片描述

# 查看sar的定时任务
[root@monitor ~]# cat /etc/cron.d/sysstat 
# Run system activity accounting tool every 10 minutes
*/10 * * * * root /usr/lib64/sa/sa1 1 1
# 0 * * * * root /usr/lib64/sa/sa1 600 6 &
# Generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib64/sa/sa2 -A

# 定时任务产生的日志存放目录
[root@monitor ~]# ls /var/log/sa
sa03  sa05  sa06  sa07  sa23  sa25  sa26  sa27  sa28  sa29  sa30  sar25  sar27

# 读取日志信息
[root@monitor ~]# sar -n DEV -f /var/log/sa/sa03   # 读取日志sa03中关于网络状态的信息
[root@monitor ~]# sar -u -f /var/log/sa/sa03   # 读取日志sa03中关于CPU使用率的信息
[root@monitor ~]# sar -r -f /var/log/sa/sa03   # 读取日志sa03中关于CPU使用率的信息
[root@monitor ~]# sar -d -f /var/log/sa/sa03   # 读取日志sa03中关于CPU使用率的信息

# 按时间段统计
[root@monitor ~]# sar -s 09:30:00 -e 09:50:00
Linux 3.10.0-957.el7.x86_64 (monitor) 	2020年11月07日 	_x86_64_	(8 CPU)

09时30分01秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
09时40分01秒     all      0.01      0.00      0.06      0.00      0.00     99.92
平均时间:     all      0.01      0.00      0.06      0.00      0.00     99.92

sar -s 15:00:00 -e 15:30:20 -f /var/log/sa/sa01  # 将统计结果写入日志
sar -r -s 15:00:00 -e 15:30:20 -f /var/log/sa/sa01   # 仅统计内存使用率,并写入日志

猜你喜欢

转载自blog.csdn.net/weixin_36522099/article/details/109543234