linux命令之系统管理命令(上)
1.lsof:查看进程打开的文件
该命令可以列举系统中已经被打开的文件,可以根据文件找到对应的进程信息,同时也可以根据进程信息找到进程打开的文件。
参数 | 说明 |
-c 进程名 | 显示指定的进程名打开的文件 |
-p 进程号 | 显示指定进程号打开的文件 |
-u | 显示指定用户使用的文件 |
-i | 通过监听指定的协议,端口和主机,显示符合条件的进程信息 |
示例:
1)显示使用文件的进程
[root@boxiaoyuan ~]# lsof /var/log/messages COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rsyslogd 2086 root 1w REG 8,2 13184 686170 /var/log/messages
说明:如上所示,使用messages文件的进程为rsyslogd进程。
COMMAND:进程的名称;PID:进程号;USER:进程的所有者;FD:文件描述符(0表示标准输出,1表示标准输入,2表示标准错误,u表示该文件被打开并处于/读取/写入模式,r表示改文件被打开并处于只读模式,w表示该文件被打开并处于写入模式);TYPE:文件类型,REG为普通文件;DEVICE:磁盘的名称;SIZE/OFF:文件的大小;NODE:索引节点;NAME:文件名。
2)显示指定进程打开的文件,使用-c选项
[root@boxiaoyuan ~]# lsof -c rsyslogd COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rsyslogd 2086 root cwd DIR 8,2 4096 2 / rsyslogd 2086 root rtd DIR 8,2 4096 2 / rsyslogd 2086 root txt REG 8,2 391360 409835 /sbin/rsyslogd
...
3)显示指定进程号所打开的文件,使用-p选项
[root@boxiaoyuan ~]# lsof -p 2086 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rsyslogd 2086 root cwd DIR 8,2 4096 2 / rsyslogd 2086 root rtd DIR 8,2 4096 2 / rsyslogd 2086 root txt REG 8,2 391360 409835 /sbin/rsyslogd ...
4)显示指定用户使用的文件,使用-u选项
[root@boxiaoyuan ~]# lsof -u root | more 10 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME init 1 root cwd DIR 8,2 4096 2 / init 1 root rtd DIR 8,2 4096 2 / init 1 root txt REG 8,2 150352 397555 /sbin/init ...
5)监听指定的协议,端口号和主机,显示符合条件的进程信息
lsof -i [46] [protocol][@hostname][:service|port]
说明:
46:4代表IPv4,6代表IPv6。
protocol:表示传输协议,可以是TCP或者UDP。
hostname:表示主机名或者IP地址。
service:进程的服务名,如NFS,SSH等。
port:表示端口号,如HTTP服务默认的端口号为80,SSH服务默认的端口号为22。
[root@boxiaoyuan ~]# lsof -i :22 # 显示端口22对应的进程,此命令很常用 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 2468 root 3u IPv4 15855 0t0 TCP *:ssh (LISTEN) sshd 2468 root 4u IPv6 15869 0t0 TCP *:ssh (LISTEN) sshd 76600 root 3r IPv4 180345 0t0 TCP 192.168.13.128:ssh->192.168.13.1:12793 (ESTABLISHED)
2.uptime:显示系统的运行时间及负载
该命令可以输出系统的当前时间,系统从开机到现在的运行时间,当前有多少用户在线和系统平均负载等信息。
示例:
1)显示系统的运行时间和平均负载等信息。
[root@boxiaoyuan ~]# uptime 16:35:02 up 19:21, 3 users, load average: 0.12, 0.35, 0.43 系统时间 运行时长 当前登录用户数 平均负载 1min 5min 15min
3.free:查看系统内存信息
该命令可以显示系统内存信息,包括物理内存,虚拟内存,共享内存和系统缓存等。
参数 | 说明 |
-m(常用) | 以MB为单位显示内存的使用情况 |
-h(常用) | 以人类可读的形式显示内存的使用情况 |
-s(常用) | 根据指定的间隔秒数持续显示内存的使用情况 |
1)查看系统内存
[root@boxiaoyuan ~]# free -m # 以MB为单位显示内存的使用情况 total used free shared buffers cached Mem: 1861 1637 223 6 27 286 -/+ buffers/cache: 1323 537 Swap: 8191 454 7737 [root@boxiaoyuan ~]# free -h # 使用-h根据实际大小自动转换为MB,KB单位 total used free shared buffers cached Mem: 1.8G 1.6G 223M 6.6M 27M 286M -/+ buffers/cache: 1.3G 537M Swap: 8.0G 454M 7.6G [root@boxiaoyuan ~]#
说明:上面所示,系统真正的可用内存为537M,buffers表示写入数据缓冲区,cache表示读取数据缓存区。
2)定时查询内存
[root@boxiaoyuan ~]# free -h -s 10 total used free shared buffers cached Mem: 1.8G 1.6G 222M 6.6M 28M 286M -/+ buffers/cache: 1.3G 537M Swap: 8.0G 454M 7.6G total used free shared buffers cached Mem: 1.8G 1.6G 222M 6.6M 28M 286M -/+ buffers/cache: 1.3G 537M Swap: 8.0G 454M 7.6G
4.iftop:动态显示网络接口流量信息
该命令可用于监控TCP/IP连接,需要以root用户运行,该命令在最小安装包中不存在,需要额外安装。
[root@boxiaoyuan ~]# iftop -bash: iftop: command not found [root@boxiaoyuan ~]# yum install iftop -y ...
参数 | 说明 |
-i(常用) | 指定监控的网络端口 |
-n(常用) | 不进行DNS解析 |
-N(常用) | 不将端口号解析成服务名 |
-B(常用) | 以字节为单位显示流量 |
-P(常用) | 显示端口号 |
常用命令组合:iftop -nNBP
TX:发送的流量;RX:接收的流量;TOTAL:总流量;Cum:运行iftop到目前为止的总流量;peak:流量峰值;rates:过去2s、10s、40s的平均流量。
命令说明:
-n:不进行DNS解析,显示IP数字地址。
N:显示数字形式的端口号
B:以字节形式为单位
P:显示端口号
5.vmstat:虚拟内存统计
该命令可以对操作系统的内存信息,进程状态,CPU活动等进行监视,但是只能对系统的整体情况进行统计,无法对某个具体进程进行分析。
vmstat 【option】 【delay [count]】
常用参数为s,表示显示内存相关统计信息及所有的系统活动数量。
示例:
1)显示虚拟内存的使用情况
[root@boxiaoyuan ~]# 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 479872 247808 27084 294052 2 7 70 47 113 224 1 1 97 1 0
procs 显示进程相关信息:
r :表示运行队列中的进程数,如果长期大于服务器cpu的个数,则说明cpu不够用了;
b :表示等待资源的进程数(阻塞的进程数),比如等待I/O, 内存等,这列的值如果长时间大于1,则需要关注一下了;
memory 内存相关信息:
swpd :虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了 ;
free :空闲物理内存量(不含buffer和cache);
buf:内存中的buffers使用量;
cache :内存中的cache使用量;
swap 内存交换情况:
si :每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了;
so :每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上;
io 磁盘使用情况:
bi :从块设备读取数据的总量(读磁盘);
bo: 从块设备写入数据的总量(写磁盘);
system 显示采集间隔内发生的中断数:
in :表示在某一时间间隔中观测到的每秒设备中断数;
cs :表示每秒产生的上下文切换次数;
CPU 显示cpu的使用状态:
us :用户进程 cpu消耗时间的百分比;
sy :内核(系统)进程cpu消耗时间百分比;
id :表示cpu处于空闲状态的时间百分比;
wa :表示I/O等待时间百分比;
st :虚拟机管理程序占用时间百分比(一般都为0,不用关注);
注:以上所介绍的各个参数中,经常会关注r列,b列和wa列。IO部分的bi以及bo也是要经常参考的对象。如果磁盘io压力很大时,这两列的数值会比较高。另外当si, so两列的数值比较高,并且在不断变化时,说明内存不够了,内存中的数据频繁交换到交换分区中,这往往对系统性能影响极大。
2)查看内存使用的详细信息
[root@boxiaoyuan ~]# vmstat -s 1906280 total memory 1659124 used memory 1014932 active memory 415248 inactive memory 247156 free memory ...
6.mpstat:CPU信息统计
该命令可以输出CPU的一些统计信息,可以查看多CPU中每个计算核心的统计数据。
mpstat 【option】 【delay [count]】
-P选项可以用来指定CPU编号,如-P表示第一个CPU。
[root@boxiaoyuan ~]# mpstat Linux 2.6.32-642.el6.x86_64 (boxiaoyuan) 2019年04月09日 _x86_64_ (1 CPU) 19时08分19秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 19时08分19秒 all 1.20 0.01 0.67 1.37 0.00 0.06 0.00 0.00 96.69
说明:
%usr 表示用户进程所消耗的CPU时间百分比
%nice 表示修改过优先级的进程占用的 CPU 时间百分比
%sys 表示内核(系统)进程消耗的 CPU时间 百分比
%iowait 表示I/O等待占用的的 CPU 时间百分比
%irq 表示硬中断占用的CPU时间百分比
%soft 表示软中断的 CPU 时间百分比
%steal 表示虚拟机强制CPU等待的时间百分比
%guest 表示虚拟机占用CPU时间的百分比
%idle 显示 CPU 的空闲状态的时间百分比
%intr/s 显示每秒 CPU 接收的中断总数
7.iostat:I/O信息统计
该命令主要对系统的磁盘I/O操作进行监视,输出主要显示磁盘读写操作的统计信息,同时也会给出CPU的使用情况,该命令和vmstat一样,只能对系统整体情况进行分析。
iostat [option] [interval[count]]
常用参数为-c:显示CPU的使用情况;-d:显示磁盘的使用情况。
[root@boxiaoyuan ~]# iostat Linux 2.6.32-642.el6.x86_64 (boxiaoyuan) 2019年04月09日 _x86_64_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 1.19 0.01 0.72 1.36 0.00 96.72 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 2.94 133.39 90.52 10455482 7095512
avg-cpu: 总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值
Device: 各磁盘设备的IO统计信息
对于cpu统计信息一行,我们主要看iowait的值,它指示cpu用于等待io请求完成的时间。
Device中各列含义如下:
Device: 以sdX形式显示的设备名称
tps: 每秒进程下发的IO读、写请求数量
Blk_read/s: 每秒读扇区数量(一扇区为512bytes)
Blk_wrtn/s: 每秒写扇区数量
Blk_read: 取样时间间隔内读扇区总数量
Blk_wrtn: 取样时间间隔内写扇区总数量
8.iotop:动态显示磁盘的I/O统计信息
该命令可以方便的查看每个进程使用磁盘I/O的情况,需要使用root用户运行,最小化系统中没有安装该命令,需要使用进行额外安装。
[root@boxiaoyuan ~]# iotop -bash: iotop: command not found [root@boxiaoyuan ~]# yum install iotop -y ...
该命令的常用参数为-o:显示正在使用I/O的进程或者线程,默认显示所有;-p:只显示指定的PID的信息。
[root@boxiaoyuan ~]# iotop Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init 2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd] 3 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/0] 4 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0]
说明:
Total DISK READ:总的磁盘读取速度;Total DISK WRITE:总的磁盘写入速度;TID:进程的Pid值;PRIO:优先级;USER:用户;DISK READ:磁盘读取速度;DISK WRITE:磁盘写入速度;SWAPIN:从swap分区读取数据占用的百分比;IO:I/O占用的百分比;COMMAND:消耗I/O的进程名。
9.sar:收集系统信息
该命令可以全面的获取系统的CPU,运行队列,磁盘I/O,分页(交换区),内存、CPU中断和网络等性能数据。
sar [option] [interval [count]]
参数 | 说明 |
-u(常用) | 显示系统所有CPU在采样时间内的负载状态 |
-d(常用) | 显示系统所有硬盘设备在采样时间内的使用状况 |
-r(常用) | 显示在采样时间内系统内存的使用状况 |
-b(常用) | 显示在采样时间内缓冲区的使用情况 |
-q(常用) | 显示运行队列的大小,它与系统当时的平均负载相同 |
-n(常用) | 显示网络运行状况 |
示例:
1)查看系统CPU的整体负载情况
[root@centos76 ~]# sar -u 2 3 Linux 4.20.13-1.el7.elrepo.x86_64 (centos76) 04/10/2019 _x86_64_ (1 CPU) 12:36:32 PM CPU %user %nice %system %iowait %steal %idle 12:36:34 PM all 7.85 0.00 5.82 0.00 0.00 86.33 12:36:36 PM all 8.16 0.00 5.10 0.00 0.00 86.73 12:36:38 PM all 8.61 0.00 5.57 0.00 0.00 85.82 Average: all 8.21 0.00 5.50 0.00 0.00 86.29 [root@centos76 ~]#
说明:
%user 表示用户进程所消耗的CPU时间百分比
%nice 表示修改过优先级的进程占用的 CPU 时间百分比
%system 表示内核(系统)进程消耗的 CPU时间 百分比
%iowait 表示I/O等待占用的的 CPU 时间百分比
%steal 表示虚拟机强制CPU等待的时间百分比
%idle 显示 CPU 处于空闲状态的时间百分比
2)显示运行队列的大小
[root@boxiaoyuan ~]# sar -q 2 3 Linux 2.6.32-642.el6.x86_64 (boxiaoyuan) 2019年04月10日 _x86_64_ (1 CPU) 12时46分01秒 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 12时46分03秒 0 406 1.54 1.16 0.90 12时46分05秒 0 406 1.54 1.16 0.90 12时46分07秒 0 406 1.54 1.16 0.90 平均时间: 0 406 1.54 1.16 0.90
说明:
runq-sz 表示等待运行的进程数
plist-sz 表示进程列表中进程和线程的数量
ldavg-1 表示最后一分钟的系统平均负载
ldavg-5 表示过去5分钟的系统平均负载
ldavg-15 表示过去15分钟的系统平均负载
3)显示系统的内存使用情况
[root@boxiaoyuan ~]# sar -r 2 3 Linux 2.6.32-642.el6.x86_64 (boxiaoyuan) 2019年04月10日 _x86_64_ (1 CPU) 12时46分55秒 kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit 12时46分57秒 125500 1780780 93.42 42576 358072 3314308 32.19 12时46分59秒 125500 1780780 93.42 42576 358072 3314308 32.19 12时47分01秒 125500 1780780 93.42 42576 358072 3314308 32.19 平均时间: 125500 1780780 93.42 42576 358072 3314308 32.19
说明:
kbmemfree 表示空闲的物理内存量
kbmemused 表示使用中的物理内存量
%memused 表示物理内存的使用率
kbbuffers 内核中作为缓冲区使用的物理内存容量
kbcached 内核中作为缓存区使用的物理内存容量
kbcommit 应用程序当前使用的内存大小
%commit 应用程序当前使用的内存大小占总的内存大小的百分比
4)显示缓冲区的使用情况
[root@boxiaoyuan ~]# sar -b 2 3 Linux 2.6.32-642.el6.x86_64 (boxiaoyuan) 2019年04月10日 _x86_64_ (1 CPU) 12时52分54秒 tps rtps wtps bread/s bwrtn/s 12时52分56秒 4.57 0.00 4.57 0.00 40.61 12时52分58秒 0.00 0.00 0.00 0.00 0.00 12时53分00秒 0.00 0.00 0.00 0.00 0.00 平均时间: 1.52 0.00 1.52 0.00 13.49
说明:
tps 表示每秒钟物理设备的IO传输总量
rtps 表示每秒钟从物理设备读入的数量总量
wtps 表示每秒钟向物理设备写入的数据总量
bread/s 表示每秒钟从物理设备读入的数据量,块/s
bwrtn/s 表示每秒钟向物理设备写入的数据量,块/s
5)显示网络的运行状态
[root@boxiaoyuan ~]# sar -n DEV 2 3 Linux 2.6.32-642.el6.x86_64 (boxiaoyuan) 2019年04月10日 _x86_64_ (1 CPU) 13时25分03秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 13时25分05秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 13时25分05秒 eth0 0.51 0.00 0.03 0.00 0.00 0.00 0.00 13时25分05秒 pan0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 13时25分05秒 docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 13时25分05秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 13时25分07秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 13时25分07秒 eth0 1.01 0.51 0.06 0.31 0.00 0.00 0.00 13时25分07秒 pan0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 13时25分07秒 docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 13时25分07秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 13时25分09秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 13时25分09秒 eth0 0.51 0.51 0.03 0.31 0.00 0.00 0.00 13时25分09秒 pan0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 13时25分09秒 docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 平均时间: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 平均时间: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 平均时间: eth0 0.68 0.34 0.04 0.21 0.00 0.00 0.00 平均时间: pan0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 平均时间: docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
说明:
IFACE 表示网络接口
rxpck/s 每秒钟接收的数据包
txpck/s 每秒钟发送的数据包
rxkB/s 每秒钟接收的字节数
txkB/s 每秒钟发送的字节数
rxcmp/s 每秒钟接收的压缩数据包
txcmp/s 每没中发送的压缩数据包
rxmcst/s 每秒钟接收的多播数据包
6)查看系统磁盘的读写性能
[root@boxiaoyuan ~]# sar -d 2 3 Linux 2.6.32-642.el6.x86_64 (boxiaoyuan) 2019年04月10日 _x86_64_ (1 CPU) 13时30分53秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 13时30分55秒 dev8-0 1.02 0.00 12.18 12.00 0.01 9.50 9.50 0.96 13时30分55秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 13时30分57秒 dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 13时30分57秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 13时30分59秒 dev8-0 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 avgqu-sz await svctm %util 平均时间: dev8-0 0.34 0.00 4.05 12.00 0.00 9.50 9.50 0.32
说明:
DEV 表示磁盘的设备名称
tps 表示设备每秒的传输次数
rd_sec/s 表示每秒从设备中读取的扇区数
wr_sec/s 表示每秒写入设备的扇区数
avgrq-sz 表示平均每次IO操作的数据大小
avgqu-sz 表示平均I/O队列长度
await 表示平均每次I/O操作的等待时间(毫秒)
svctm 表示每次I/O操作的服务时间(毫秒)
%util 表示每秒用于I/O操作的百分比
10.pidstat:监控系统资源
该命令主要用于监控全部或者指定集成占用系统资源的情况,如CPU,内存,IO等。
常用参数为-u:显示各个进程的CPU使用统计;-r:显示各个进程的内存使用统计;-d:显示各个进程的IO使用情况。
[root@boxiaoyuan ~]# pidstat -u 5 1 Linux 2.6.32-642.el6.x86_64 (boxiaoyuan) 2019年12月05日 _x86_64_ (2 CPU) 05时45分33秒 PID %usr %system %guest %CPU CPU Command 05时45分38秒 4 0.00 0.20 0.00 0.20 0 ksoftirqd/0 05时45分38秒 1226 0.20 0.20 0.00 0.40 1 redis-server 05时45分38秒 1228 0.60 0.00 0.00 0.60 1 ruby 05时45分38秒 1232 0.00 0.20 0.00 0.20 1 gitlab-unicorn- 05时45分38秒 30035 0.00 0.20 0.00 0.20 0 pidstat
说明:
PID:进程ID
%usr:进程在用户空间占用CPU的百分比
%system:进程在内核空间占用CPU的百分比
%guest:进程在虚拟机占用CPU的百分比
%CPU:进程占用的CPU的百分比
注:本文内容为《跟老男孩学linux运维 核心系统命令实践》的学习笔记。