计算机系统由四个模块组成,分别是cpu、网络、磁盘和内存。在系统和程序出现问题时,应按照一定先后顺序对这四个模块进行排查。下面介绍几种常用工具:
1、top性能监控命令
可以定期显示所有正在运行和实际运行的cpu使用、内存使用、交换内存、缓存大小、缓冲区大小、过程控制、用户等内容。(实时动态)
语法:
top [-] [d] [p] [u] [S] [s] [i] [c]
参数:
d:指定每次刷信息刷新间隔,按空格立即刷新
p:指定监控进程的ID,可以指定查看一个或多个
i:不显示任何闲置或者僵尸进程
c:显示整个命令而不是整个命令名
u:查看指定用户的进程
[root@192 ~]# top
top - 02:05:10 up 2:39, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 158 total, 1 running, 157 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1797052 total, 1511836 free, 167148 used, 118068 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 1491412 avail MemPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1885 root 20 0 159380 6012 4652 S 0.3 0.3 0:00.35 sshd
1 root 20 0 125372 3856 2568 S 0.0 0.2 0:01.16 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:00.17 ksoftirqd/0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:00.47 rcu_sched
现实的进程信息分为两部分,上面5行为整体 信息,下面为每一个进程的信息。
第1行:top - 02:05:10:当前时间 up 2:39:启动时间 2 users:当前用户在线数
load average: 0.00, 0.01, 0.05:cpu最近1,5,15分钟平均负载值。
red hat 官方手册:假如系统有四个cpu,把每个时间段负载值除于4就是每个cpu的负载值,大于1表明cpu过载。
第2行:Tasks: 158 total:进程个数 1 running:正在使用cpu的进程的个数 157 sleeping:进程 睡眠个数 0 stopped:进程停止个数 0 zombie:进程僵尸个数
第3行: CPU使用情况
第4行:内存使用情况
第5行:交换分区使用情况
下部分:
PR:进程优先级 0-40 NI:进程优先级 -20-19 (越小优先级越高)
VIRT:虚拟内存,如:进程申请100MB的内存,但实际使用10MB,那么他会增长100M,而不是实际使用量。
RES:常驻内存,进程当前使用内存大小。如:申请100M的内存,实际使用10M,他只增长10M。
按M以内存占用率排序
按P以CPU使用率排序
按N以PID数值大小排序
按R对排序进行反转
按F显示自定义字段,按上下键移动,按空格键选中,q退出,W保存
按1显示所有CPU负载
top命令是Linux进行系统监控的首选命令,但top监控有很大局限性,通常使用ps和netstat这两个命令来补充top的不足。
2、ps实时监控系统命令
top是对进程实时监控,ps是显示进程状态但是不是动态连续的。ps是常用的监控后台进程的工作情况,如需检测后台情况,就需要使用ps了。
语法:ps [选项]
参数:
-a:同一终端下所有程序
-A:显示所有进程
-au:显示较详细的信息
-aux:显示所有其他使用者的进程
-e:等于-A
-f:全部列出
-x:显示没有终端控制的进程
r:显示当前终端进程
u:指定用户的进程
-l 让系统显示应用程序的详细运作信息
ps axo 自定义字段
常用的是ps aux 和 ps -ef
root@192 ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 125372 3856 ? Ss Jun30 0:01 /usr/lib/systemd/systemd
root 2 0.0 0.0 0 0 ? S Jun30 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< Jun30 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? S Jun30 0:00 [ksoftirqd/0]
root 7 0.0 0.0 0 0 ? S Jun30 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S Jun30 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? R Jun30 0:00 [rcu_sched]
root 10 0.0 0.0 0 0 ? S< Jun30 0:00 [lru-add-drain]
root 11 0.0 0.0 0 0 ? S Jun30 0:00 [watchdog/0]
root 13 0.0 0.0 0 0 ? S Jun30 0:00 [kdevtmpfs]
root 14 0.0 0.0 0 0 ? S< Jun30 0:00 [netns]
root 15 0.0 0.0 0 0 ? S Jun30 0:00 [khungtaskd]
root 16 0.0 0.0 0 0 ? S< Jun30 0:00 [writeback]
root 17 0.0 0.0 0 0 ? S< Jun30 0:00 [kintegrityd]
root 18 0.0 0.0 0 0 ? S< Jun30 0:00 [bioset]
root 19 0.0 0.0 0 0 ? S< Jun30 0:00 [bioset]
root 20 0.0 0.0 0 0 ? S< Jun30 0:00 [bioset]
root 21 0.0 0.0 0 0 ? S< Jun30 0:00 [kblockd]
root 22 0.0 0.0 0 0 ? S< Jun30 0:00 [md]
[root@192 ~]# ps -ef |head -5
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Jun30 ? 00:00:01 /usr/lib/systemd/systemd
root 2 0 0 Jun30 ? 00:00:00 [kthreadd]
root 4 2 0 Jun30 ? 00:00:00 [kworker/0:0H]
root 6 2 0 Jun30 ? 00:00:00 [ksoftirqd/0]
VSZ:虚拟内存 RSS:实际内存 TTY:启动进程终端名称,不是从终端启动的进程显示为?
STAT:运行状态。R表示运行,S表示可中断休眠,D表示不可中断休眠,T表示停止的进程,Z表示僵尸进程,X表示死掉的进程,s进程的领导者(在他之下有子进程),<高优先级进程,+位于后台的进程组。
介绍几种查看指定进程PID的方法:
1.cat命令
如:cat /run/sshd.pid
2.使用pidof
如:pidof sshd
3.使用pgrep
如:pgrep sshd
pidof
只能使用进程名称来查找与之关联的 PID。pgrep
允许使用更强大的模式匹配(正则表达式或通配符)来查找与之关联的 PID。如:pgrep 'httpd*'
3、kill命令(信号控制)
kill命令用于终止指定进程的运行。kill -l查看全部信号。
常用信号(默认15):
1 SIGHUP 启动被终止的进程,重新加载PID不会发生变化
9 SIGKILL 强制终止进程,此信号可能导致进程无法再次重启
15 SIGTERM 默认信号,正常终止
18 SIGCONT 恢复进程
19 SIGSTOP 暂停进程
killall 命令用于终止某个指定名称的服务所对应的全部进程。如:killall vsftpd
pkill是一个用于向进程发送信号并终止它们的命令行工具。使用 pkill
,你可以通过进程名称或其他匹配模式来杀死一个或多个进程。它会发送一个指定的信号给匹配的进程。
如:1.通过进程名称终止进程:
pkill apache
2.通过匹配模式终止进程:
pkill -f <匹配模式>
例如,要终止所有命令行中包含 httpd
的进程,可以运行命令:pkill -f httpd
。
注意:作业控制
作业控制是一个命令行功能,允许一个shell实列运行和管理多个命令。如果没有作业控制,父进程fork()一个子进程后将休眠,直到子进程退出。使用作业控制可以选择性暂停、恢复以及异步运行命令,让shell可以在子进程期间返回接受其他命令。
前台进程:是在终端运行的命令,该终端为进程的控制端。前台进程接收键盘产生的输入和信号,并允许从终端读取或写入到终端。
后台进程:没有控制端,不需要终端交互。
在后台创建的进程,使用ctrl+c组合键并不能结束该进程。
&为后台符,ctrl+z组合键可以暂停进程,bg可以把任务移至后台,fg可以后台 移至前台。jobs查看当前作业。
4、netstat监控网络状态命令
用来显示网络连接、路由表和网络接口信息。
语法:netstat [-选项]
参数:
-a 显示所有套接字,包括正在监听的套接字
-i 显示所有网络接口信息
-n 以网络IP地址代替名称,显示网络连接情形
-t 显示TCP协议连接情况
-u 显示UDP协议连接情况
-v 显示正在进行工作的
-p 显示建立相关的程序名和pid
-r 显示核心路由表,同route -e
-s 显示每个协议的统计
5、ifconfig查看地址命令
通常要以root身份登录或使用sudo权限。
语法:ifconfig [网络设备] [参数]
up 启动指定网络设备
down 关闭指定网络设备
add 设置IPv6地址
del 删除指定IPv6地址
address 设置IPv4地址
6、ss显示连接状态命令
查看服务器连接数一般使用netstat命令。ss命令的优势在于他能够显示更多、更详细关于TCP的连接状态信息,而且更加快速。
语法:
ss [参数] 或 ss [参数] [过滤]
参数:
-n 不解析主机名
-r 解析主机名
-a 显示所有套接字
-l 显示监听状态的套接字
-m 显示套接字的内存使用情况
-p 显示使用套接字的进程
-4 仅显示IPv4的套接字
-6 仅显示IPv6的套接字
-t 仅显示TCP套接字
-u 仅显示UDP套接字
列出处于time-wait 状态的IPv4套接字
ss -4 stat time-wait
显示所有源端口或目的端口为ssh的套接字
ss -l '( sport = :22 or dport = :22 )'
显示目的端口是443或80的套接字
ss -nt '( dst :443 or dst :80 )'
对地址和端口进行过滤
ss -nt dst 192.168.100.1:22
7、free显示内存命令
语法:free -[选项]
参数:
-m 以MB为单位输出样例
-h 以人类可读方式显示
-t 列出每列统计信息
-s 设置多少秒自动刷新
-c 与-s配合使用,控制刷新结果次数
8、df查看磁盘占用命令
df命令主要是用来展示每个文件系统的信息,包括文系统,已使用、未使用、已使用空间的占用百分比,以及挂载点信息。df命令的功能是显示指定磁盘文件的可用空间,如果没有指定文件名,则显示当前被挂载的文件系统的可用空间。
语法:df [选项] [文件]
参数:
-a 显示全部文件系统列表
-h 以人类 易读的方式显示
-i 显示inode信息
-l 只显示本地文件系统
-T 列出文件系统类型
-t<> 只显示指定文件系统的磁盘信息