赞
踩
目录
首先,从 CPU 的角度来说,主要的性能指标就是 CPU 的使用率、上下文切换以及 CPU Cache 的命中率等。下面这张图就列出了常见的 CPU 性能指标。
从这些指标出发,再把 CPU 使用率,划分为系统和进程两个维度,我们就可以得到,下面这个
CPU 性能工具速查表。注意,因为每种性能指标都可能对应多种工具,我在每个指标的说明中,
都帮你总结了这些工具的特点和注意事项。
接着我们来看内存方面。从内存的角度来说,主要的性能指标,就是系统内存的分配和使用、进
程内存的分配和使用以及 SWAP 的用量。下面这张图列出了常见的内存性能指标。
接下来,从文件系统和磁盘 I/O 的角度来说,主要性能指标,就是文件系统的使用、缓存和缓冲
区的使用,以及磁盘 I/O 的使用率、吞吐量和延迟等。下面这张图列出了常见的 I/O 性能指标。
从网络的角度来说,主要性能指标就是吞吐量、响应时间、连接数、丢包数等。根据 TCP/IP 网络协议栈的原理,我们可以把这些性能指标,进一步细化为每层协议的具体指标。这里同样用一张图,分别从链路层、网络层、传输层和应用层,列出了各层的主要指标。
除了性能分析外,很多时候,我们还需要对系统性能进行基准测试。比如:
在文件系统和磁盘 I/O 模块中,我们使用 fio 工具,测试了磁盘 I/O 的性能。
在网络模块中,我们使用 iperf、pktgen 等,测试了网络的性能。
而在很多基于 Nginx 的案例中,我们则使用 ab、wrk 等,测试 Nginx 应用的性能。
除了这些工具外,对于 Linux 的各个子系统来说,还有很多其他的基准测试工具可能会用到。下面这张图,是 Brendan Gregg 整理的 Linux 基准测试工具图谱,可以保存下来,在需要时参考。
Linux ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。
语法
ps [options] [--help]
参数:
ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
-A 列出所有的进程
-w 显示加宽可以显示较多的资讯
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的行程
au(x) 输出格式 :
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER: 行程拥有者
PID: pid
%CPU: 占用的 CPU 使用率
%MEM: 占用的记忆体使用率
VSZ: 占用的虚拟记忆体大小
RSS: 占用的记忆体大小
TTY: 终端的次要装置号码 (minor device number of tty)
STAT: 该行程的状态:D: 无法中断的休眠状态 (通常 IO 的进程)
R: 正在执行中
S: 静止状态
T: 暂停执行
Z: 不存在但暂时无法消除
W: 没有足够的记忆体分页可分配
<: 高优先序的行程
N: 低优先序的行程
L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
START: 行程开始时间
TIME: 执行的时间
COMMAND:所执行的指令
- 查找指定进程格式:
-
- ps -ef | grep 进程关键字
- 例如显示 php 的进程:
-
- # ps -ef | grep php
- root 794 1 0 2020 ? 00:00:52 php-fpm: master process (/etc/php/7.3/fpm/php-fpm.conf)
- www-data 951 794 0 2020 ? 00:24:15 php-fpm: pool www
- www-data 953 794 0 2020 ? 00:24:14 php-fpm: pool www
- www-data 954 794 0 2020 ? 00:24:29 php-fpm: pool www
- ...
- 显示进程信息:
-
- # ps -A
- PID TTY TIME CMD
- 1 ? 00:00:02 init
- 2 ? 00:00:00 kthreadd
- 3 ? 00:00:00 migration/0
- 4 ? 00:00:00 ksoftirqd/0
- 5 ? 00:00:00 watchdog/0
- 6 ? 00:00:00 events/0
- 7 ? 00:00:00 cpuset
- 8 ? 00:00:00 khelper
- 9 ? 00:00:00 netns
- 10 ? 00:00:00 async/mgr
- 11 ? 00:00:00 pm
- 12 ? 00:00:00 sync_supers
- 13 ? 00:00:00 bdi-default
- 14 ? 00:00:00 kintegrityd/0
- 15 ? 00:00:02 kblockd/0
- 16 ? 00:00:00 kacpid
- 17 ? 00:00:00 kacpi_notify
- 18 ? 00:00:00 kacpi_hotplug
- 19 ? 00:00:27 ata/0
- ……省略部分结果
- 30749 pts/0 00:00:15 gedit
- 30886 ? 00:01:10 qtcreator.bin
- 30894 ? 00:00:00 qtcreator.bin
- 31160 ? 00:00:00 dhclient
- 31211 ? 00:00:00 aptd
- 31302 ? 00:00:00 sshd
- 31374 pts/2 00:00:00 bash
- 31396 pts/2 00:00:00 ps
- 显示指定用户信息
-
- # ps -u root //显示root进程用户信息
- PID TTY TIME CMD
- 1 ? 00:00:02 init
- 2 ? 00:00:00 kthreadd
- 3 ? 00:00:00 migration/0
- 4 ? 00:00:00 ksoftirqd/0
- 5 ? 00:00:00 watchdog/0
- 6 ? 00:00:00 events/0
- 7 ? 00:00:00 cpuset
- 8 ? 00:00:00 khelper
- 9 ? 00:00:00 netns
- 10 ? 00:00:00 async/mgr
- 11 ? 00:00:00 pm
- 12 ? 00:00:00 sync_supers
- 13 ? 00:00:00 bdi-default
- 14 ? 00:00:00 kintegrityd/0
- 15 ? 00:00:02 kblockd/0
- 16 ? 00:00:00 kacpid
- ……省略部分结果
- 30487 ? 00:00:06 gnome-terminal
- 30488 ? 00:00:00 gnome-pty-helpe
- 30489 pts/0 00:00:00 bash
- 30670 ? 00:00:00 debconf-communi
- 30749 pts/0 00:00:15 gedit
- 30886 ? 00:01:10 qtcreator.bin
- 30894 ? 00:00:00 qtcreator.bin
- 31160 ? 00:00:00 dhclient
- 31211 ? 00:00:00 aptd
- 31302 ? 00:00:00 sshd
- 31374 pts/2 00:00:00 bash
- 31397 pts/2 00:00:00 ps
- 显示所有进程信息,连同命令行
-
- # ps -ef //显示所有命令,连带命令行
- UID PID PPID C STIME TTY TIME CMD
- root 1 0 0 10:22 ? 00:00:02 /sbin/init
- root 2 0 0 10:22 ? 00:00:00 [kthreadd]
- root 3 2 0 10:22 ? 00:00:00 [migration/0]
- root 4 2 0 10:22 ? 00:00:00 [ksoftirqd/0]
- root 5 2 0 10:22 ? 00:00:00 [watchdog/0]
- root 6 2 0 10:22 ? /usr/lib/NetworkManager
- ……省略部分结果
- root 31302 2095 0 17:42 ? 00:00:00 sshd: root@pts/2
- root 31374 31302 0 17:42 pts/2 00:00:00 -bash
- root 31400 1 0 17:46 ? 00:00:00 /usr/bin/python /usr/sbin/aptd
- root 31407 31374 0 17:48 pts/2 00:00:00 ps -ef
Linux top命令用于实时显示 process 的动态。
使用权限:所有使用者。
语法
top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]
参数说明:
d : 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s
q : 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行
c : 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称
S : 累积模式,会将己完成或消失的子进程 ( dead child process ) 的 CPU time 累积起来
s : 安全模式,将交谈式指令取消, 避免潜在的危机
i : 不显示任何闲置 (idle) 或无用 (zombie) 的进程
n : 更新的次数,完成后将会退出 top
b : 批次档模式,搭配 "n" 参数一起使用,可以用来将 top 的结果输出到档案内
第一行,任务队列信息,同 uptime 命令的执行结果
系统时间:07:27:05
运行时间:up 1:57 min,
当前登录用户: 3 user
负载均衡(uptime) load average: 0.00, 0.00, 0.00
average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。
load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了
第二行,Tasks — 任务(进程)
总进程:150 total, 运行:1 running, 休眠:149 sleeping, 停止: 0 stopped, 僵尸进程: 0 zombie
第三行,cpu状态信息
0.0%us【user space】— 用户空间占用CPU的百分比。
0.3%sy【sysctl】— 内核空间占用CPU的百分比。
0.0%ni【】— 改变过优先级的进程占用CPU的百分比
99.7%id【idolt】— 空闲CPU百分比
0.0%wa【wait】— IO等待占用CPU的百分比
0.0%hi【Hardware IRQ】— 硬中断占用CPU的百分比
0.0%si【Software Interrupts】— 软中断占用CPU的百分比
第四行,内存状态
1003020k total, 234464k used, 777824k free, 24084k buffers【缓存的内存量】
第五行,swap交换分区信息
2031612k total, 536k used, 2031076k free, 505864k cached【缓冲的交换区总量】
备注:
可用内存=free + buffer + cached
对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。
第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,
第四行中空闲内存总量(free)是内核还未纳入其管控范围的数量。
纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。
第六行,空行
第七行以下:各进程(任务)的状态监控
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S —进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)
详解
VIRT:virtual memory usage 虚拟内存
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量
RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括swap out
2、包含其他进程的共享
3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小
SHR:shared memory 共享内存
1、除了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR
4、swap out后,它将会降下来
DATA
1、数据占用的内存。如果top没有显示,按f键可以显示出来。
2、真正的该程序要求的数据空间,是真正在运行中要使用的。
top 运行中可以通过 top 的内部命令对进程的显示方式进行控制。
内部命令如下:
s – 改变画面更新频率
l – 关闭或开启第一部分第一行 top 信息的表示
t – 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示
m – 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示
N – 以 PID 的大小的顺序排列表示进程列表
P – 以 CPU 占用率大小的顺序排列进程列表
M – 以内存占用率大小的顺序排列进程列表
h – 显示帮助
n – 设置在进程列表所显示进程的数量
q – 退出 top
Ctrl+L:擦除并且重写屏幕
K:终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
i:忽略闲置和僵死进程。这是一个开关式命令。
r:重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
S:切换到累计模式。
s:改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
f或者F:从当前显示中添加或者删除项目。
o或者O:改变显示项目的顺序
c:切换显示命令名称和完整命令行。
T:根据时间/累计时间进行排序。
W:将当前设置写入~/.toprc文件中。
- 显示进程信息
-
- # top
-
- 显示完整命令
-
- # top -c
-
- 以批处理模式显示程序信息
-
- # top -b
-
- 以累积模式显示程序信息
-
- # top -S
-
- 设置信息更新次数
-
- top -n 2
-
- //表示更新两次后终止更新显示
- 设置信息更新时间
-
- # top -d 3
-
- //表示更新周期为3秒
- 显示指定的进程信息
-
- # top -p 139
-
- //显示进程号为139的进程信息,CPU、内存占用率等
- 显示更新十次后退出
-
- top -n 10
-
- 使用者将不能利用交谈式指令来对行程下命令
-
- top -s
Linux vmstat命令的含义为显示虚拟内存状态(“Virtual Memory Statistics”),但是它可以报告关于进程、内存、I/O等系统整体运行状态。
语法
vmstat (选项) (参数)
选项
-a:显示活动内页;
-f:显示启动后创建的进程总数;
-m:显示slab信息;
-n:头信息仅显示一次;
-s:以表格方式显示事件计数器和内存状态;
-d:报告磁盘状态;
-p:显示指定的硬盘分区状态;
-S:输出信息的单位。
参数
事件间隔:状态信息刷新的时间间隔;
次数:显示报告的次数。
实例
vmstat 3
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 320 42188 167332 1534368 0 0 4 7 1 0 0 0 99 0 0
0 0 320 42188 167332 1534392 0 0 0 0 1002 39 0 0 100 0 0
0 0 320 42188 167336 1534392 0 0 0 19 1002 44 0 0 100 0 0
0 0 320 42188 167336 1534392 0 0 0 0 1002 41 0 0 100 0 0
0 0 320 42188 167336 1534392 0 0 0 0 1002 41 0 0 100 0 0
字段说明:
Procs(进程)
r: 运行队列中进程数量,这个值也可以判断是否需要增加CPU。(长期大于1)
b: 等待IO的进程数量。
Memory(内存)
swpd: 使用虚拟内存大小,如果swpd的值不为0,但是SI,SO的值长期为0,这种情况不会影响系统性能。
free: 空闲物理内存大小。
buff: 用作缓冲的内存大小。
cache: 用作缓存的内存大小,如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小。
Swap
si: 每秒从交换区写到内存的大小,由磁盘调入内存。
so: 每秒写入交换区的内存大小,由内存调入磁盘。
注意:内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。有些朋友看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,不能光看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。
IO(现在的Linux版本块的大小为1kb)
bi: 每秒读取的块数
bo: 每秒写入的块数
注意:随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大。
system(系统)
in: 每秒中断数,包括时钟中断。
cs: 每秒上下文切换数。
注意:上面2个值越大,会看到由内核消耗的CPU时间会越大。
CPU(以百分比表示)
us: 用户进程执行时间百分比(user time)
us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速。
sy: 内核系统进程执行时间百分比(system time)
sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因。
wa: IO等待时间百分比
wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。
id: 空闲时间百分比
pidstat是sysstat工具的一个命令,用于监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况。pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。
pidstat 的用法:
pidstat [ 选项 ] [ <时间间隔> ] [ <次数> ]
[root@VM_2_4_centos ~]# pidstat -help
Usage: pidstat [ options ] [ <interval> [ <count> ] ]
Options are:
[ -C <command> ] [ -d ] [ -h ] [ -I ] [ -l ] [ -r ] [ -t ] [ -u ] [ -V ] [ -w ]
[ -p { <pid> [,...] | SELF | ALL } ] [ -T { TASK | CHILD | ALL } ]
常用的参数:
-u:默认的参数,显示各个进程的cpu使用统计
-r:显示各个进程的内存使用统计
-d:显示各个进程的IO使用情况
-p:指定进程号
-w:显示每个进程的上下文切换情况
-t:显示选择任务的线程的统计信息外的额外信息
-T { TASK | CHILD | ALL }
这个选项指定了pidstat监控的。TASK表示报告独立的task,CHILD关键字表示报告进程下所有线程统计信息。ALL表示报告独立的task和task下面的所有线程。
注意:task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。
-V:版本号
-h:在一行上显示了所有活动,这样其他程序可以容易解析。
-I:在SMP环境,表示任务的CPU使用率/内核数量
-l:显示命令名和所有参数
- 示例一:查看所有进程的 CPU 使用情况( -u -p ALL)
- pidstat
- pidstat -u -p ALL
- pidstat 和 pidstat -u -p ALL 是等效的。
- pidstat 默认显示了所有进程的cpu使用率。
-
- [root@VM_2_4_centos ~]# pidstat
- Linux 2.6.32-696.6.3.el6.x86_64 (VM_2_4_centos) 06/20/2019 _x86_64_ (8 CPU)
-
- 05:29:28 PM PID %usr %system %guest %CPU CPU Command
- 05:29:28 PM 1 0.00 0.00 0.00 0.00 4 init
- 05:29:28 PM 3 0.00 0.00 0.00 0.00 0 migration/0
- 05:29:28 PM 4 0.00 0.00 0.00 0.00 0 ksoftirqd/0
- 05:29:28 PM 6 0.00 0.00 0.00 0.00 0 watchdog/0
- 05:29:28 PM 7 0.00 0.00 0.00 0.00 1 migration/1
- 05:29:28 PM 9 0.00 0.00 0.00 0.00 1 ksoftirqd/1
- 05:29:28 PM 10 0.00 0.00 0.00 0.00 1 watchdog/1
- 05:29:28 PM 11 0.00 0.00 0.00 0.00 2 migration/2
- 05:29:28 PM 13 0.00 0.00 0.00 0.00 2 ksoftirqd/2
- 05:29:28 PM 14 0.00 0.00 0.00 0.00 2 watchdog/2
- 05:29:28 PM 15 0.00 0.00 0.00 0.00 3 migration/3
- 05:29:28 PM 17 0.00 0.00 0.00 0.00 3 ksoftirqd/3
- 05:29:28 PM 18 0.00 0.00 0.00 0.00 3 watchdog/3
- 05:29:28 PM 19 0.00 0.00 0.00 0.00 4 migration/4
- 05:29:28 PM 21 0.00 0.00 0.00 0.00 4 ksoftirqd/4
- 05:29:28 PM 22 0.00 0.00 0.00 0.00 4 watchdog/4
- 05:29:28 PM 23 0.00 0.00 0.00 0.00 5 migration/5
- 05:29:28 PM 25 0.00 0.00 0.00 0.00 5 ksoftirqd/5
- 05:29:28 PM 26 0.00 0.00 0.00 0.00 5 watchdog/5
-
- 详细说明
- PID:进程ID
- %usr:进程在用户空间占用cpu的百分比
- %system:进程在内核空间占用cpu的百分比
- %guest:进程在虚拟机占用cpu的百分比
- %CPU:进程占用cpu的百分比
- CPU:处理进程的cpu编号
- Command:当前进程对应的命令
- 示例二: cpu使用情况统计(-u)
- pidstat -u
- 使用-u选项,pidstat将显示各活动进程的cpu使用统计,执行”pidstat -u”与单独执行”pidstat”的效果一样。
-
- 示例三: 内存使用情况统计(-r)
- pidstat -r
- 使用-r选项,pidstat将显示各活动进程的内存使用统计:
-
- [root@VM_2_4_centos ~]# pidstat -r
- Linux 2.6.32-696.6.3.el6.x86_64 (VM_2_4_centos) 06/20/2019 _x86_64_ (8 CPU)
-
- 05:30:53 PM PID minflt/s majflt/s VSZ RSS %MEM Command
- 05:30:53 PM 1 0.00 0.00 21392 652 0.00 init
- 05:30:53 PM 526 0.00 0.00 12848 576 0.00 udevd
- 05:30:53 PM 832 0.00 0.00 6120 88 0.00 agetty
- 05:30:53 PM 980 0.00 0.00 95244 720 0.00 auditd
- 05:30:53 PM 996 0.00 0.00 254004 5476 0.02 rsyslogd
- 05:30:53 PM 1048 0.02 0.00 592936 18728 0.06 YDService
- 05:30:53 PM 1097 0.00 0.00 23448 240 0.00 dbus-daemon
- 05:30:53 PM 1126 0.00 0.00 6124 112 0.00 acpid
- 05:30:53 PM 1236 0.01 0.00 82992 1088 0.00 master
- 05:30:53 PM 1242 0.00 0.00 102040 4052 0.01 sshd
- 05:30:53 PM 1251 0.00 0.00 110712 2260 0.01 bash
- 05:30:53 PM 1254 0.30 0.00 118452 1028 0.00 crond
- 05:30:53 PM 1263 0.00 0.00 83244 1460 0.00 qmgr
- 05:30:53 PM 1271 0.00 0.00 23120 216 0.00 atd
- 05:30:53 PM 1384 0.00 0.00 6108 88 0.00 mingetty
- 05:30:53 PM 1386 0.00 0.00 6108 96 0.00 mingetty
- 05:30:53 PM 1388 0.00 0.00 6108 92 0.00 mingetty
- 05:30:53 PM 1390 0.00 0.00 6108 92 0.00 mingetty
- 05:30:53 PM 1392 0.00 0.00 6108 2128 0.01 mingetty
- 05:30:53 PM 1394 0.00 0.00 6108 88 0.00 mingetty
- 05:30:53 PM 6722 0.00 0.00 149772 7564 0.02 barad_agent
- 05:30:53 PM 6726 0.14 0.00 152684 9320 0.03 barad_agent
-
- PID:进程标识符
- Minflt/s:任务每秒发生的次要错误,不需要从磁盘中加载页
- Majflt/s:任务每秒发生的主要错误,需要从磁盘中加载页
- VSZ:虚拟地址大小,虚拟内存的使用KB
- RSS:常驻集合大小,非交换区五里内存使用KB
- Command:task命令名
-
- 示例四:显示各个进程的IO使用情况(-d)
- pidstat -d
-
- [root@VM_2_4_centos ~]# pidstat -d
- Linux 2.6.32-696.6.3.el6.x86_64 (VM_2_4_centos) 06/20/2019 _x86_64_ (8 CPU)
-
- 05:31:26 PM PID kB_rd/s kB_wr/s kB_ccwr/s Command
- 05:31:26 PM 1 1.79 15.40 0.33 init
- 05:31:26 PM 127 0.00 0.00 0.00 khugepaged
- 05:31:26 PM 438 0.00 2.11 0.00 kjournald
- 05:31:26 PM 526 0.00 0.00 0.00 udevd
- 05:31:26 PM 790 0.00 1.85 0.00 kjournald
- 05:31:26 PM 832 0.00 0.00 0.00 agetty
- 05:31:26 PM 980 0.00 0.46 0.00 auditd
- 05:31:26 PM 996 0.00 0.17 0.00 rsyslogd
- 05:31:26 PM 1048 0.00 0.00 0.00 YDService
- 05:31:26 PM 1126 0.00 0.00 0.00 acpid
- 05:31:26 PM 1236 0.00 0.00 0.00 master
- 05:31:26 PM 1242 0.00 0.00 0.00 sshd
- 05:31:26 PM 1251 0.00 0.00 0.00 bash
- 05:31:26 PM 1254 0.00 0.00 0.00 crond
- 05:31:26 PM 1263 0.00 0.00 0.00 qmgr
- 05:31:26 PM 1271 0.00 0.00 0.00 atd
- 05:31:26 PM 1384 0.00 0.00 0.00 mingetty
- 05:31:26 PM 1392 0.00 0.00 0.00 mingetty
- 05:31:26 PM 6722 0.00 0.00 0.00 barad_agent
- 05:31:26 PM 6726 0.00 0.01 0.00 barad_agent
-
- 报告IO统计显示以下信息:
-
- PID:进程id
- kB_rd/s:每秒从磁盘读取的KB
- kB_wr/s:每秒写入磁盘KB
- kB_ccwr/s:任务取消的写入磁盘的KB。当任务截断脏的pagecache的时候会发生。
- COMMAND:task的命令名
-
- 示例五:显示每个进程的上下文切换情况(-w)
-
- [root@VM_2_4_centos ~]# pidstat -w -p 10154
- Linux 2.6.32-696.6.3.el6.x86_64 (VM_2_4_centos) 06/20/2019 _x86_64_ (8 CPU)
-
- 05:32:37 PM PID cswch/s nvcswch/s Command
- 05:32:37 PM 10154 0.00 0.00 zabbix_agentd
- PID:进程id
- Cswch/s:每秒主动任务上下文切换数量
- Nvcswch/s:每秒被动任务上下文切换数量
- Command:命令名
-
- 示例六:显示选择任务的线程的统计信息外的额外信息 (-t)
-
- [root@VM_2_4_centos ~]# pidstat -t -p 10154
- Linux 2.6.32-696.6.3.el6.x86_64 (VM_2_4_centos) 06/20/2019 _x86_64_ (8 CPU)
-
- 05:33:21 PM TGID TID %usr %system %guest %CPU CPU Command
- 05:33:21 PM 10154 - 0.00 0.00 0.00 0.00 2 zabbix_agentd
- 05:33:21 PM - 10154 0.00 0.00 0.00 0.00 2 |__zabbix_agentd
-
- TGID:主线程的表示
- TID:线程id
- %usr:进程在用户空间占用cpu的百分比
- %system:进程在内核空间占用cpu的百分比
- %guest:进程在虚拟机占用cpu的百分比
- %CPU:进程占用cpu的百分比
- CPU:处理进程的cpu编号
- Command:当前进程对应的命令
-
- 示例七:pidstat -T
- pidstat -T TASK
- pidstat -T CHILD
- pidstat -T ALL
- TASK表示报告独立的task。
- CHILD关键字表示报告进程下所有线程统计信息。
- ALL表示报告独立的task和task下面的所有线程。
-
- 注意:task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。
-
- [root@VM_2_4_centos ~]# pidstat -T ALL -p 10154
- Linux 2.6.32-696.6.3.el6.x86_64 (VM_2_4_centos) 06/20/2019 _x86_64_ (8 CPU)
-
- 05:34:13 PM PID %usr %system %guest %CPU CPU Command
- 05:34:13 PM 10154 0.00 0.00 0.00 0.00 2 zabbix_agentd
-
- 05:34:13 PM PID usr-ms system-ms guest-ms Command
- 05:34:13 PM 10154 0 0 0 zabbix_agentd
- PID:进程id
- Usr-ms:任务和子线程在用户级别使用的毫秒数。
- System-ms:任务和子线程在系统级别使用的毫秒数。
- Guest-ms:任务和子线程在虚拟机(running a virtual processor)使用的毫秒数。
- Command:命令名
sar(SYstem ActivityReporter系统活动情况报告)是目前Linux上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况,系统调用的使用情况,磁盘I/O,CPU效率,内存使用状况,进程活动及IPC有关的活动;
语法格式
sar [ 选项 ] [ <时间间隔> [ <次数> ] ]
sar -h 显示:
-A:所有报告的总和
-b:显示I/O和传递速率的统计信息
-B:显示换页状态
-d:输出每一块磁盘的使用信息
-e:设置显示报告的结束时间
-f:从制定的文件读取报告
-i:设置状态信息刷新的间隔时间
-P:报告每个CPU的状态
-R:显示内存状态
–u:输出cpu使用情况和统计信息
–v:显示索引节点、文件和其他内核表的状态
-w:显示交换分区的状态
-x:显示给定进程的装
-r:报告内存利用率的统计信息
使用总结
默认监控: sar 1 1 // CPU和IOWAIT统计状态
(1) sar -b 1 1 // IO传送速率
(2) sar -B 1 1 // 页交换速率
(3) sar -c 1 1 // 进程创建的速率
(4) sar -d 1 1 // 块设备的活跃信息
(5) sar -n DEV 1 1 // 网路设备的状态信息
(6) sar -n SOCK 1 1 // SOCK的使用情况
(7) sar -n ALL 1 1 // 所有的网络状态信息
(8) sar -P ALL 1 1 // 每颗CPU的使用状态信息和IOWAIT统计状态
(9) sar -q 1 1 // 队列的长度(等待运行的进程数)和负载的状态
(10) sar -r 1 1 // 内存和swap空间使用情况
(11) sar -R 1 1 // 内存的统计信息(内存页的分配和释放、系统每秒作为BUFFER使用内存页、每秒被cache到的内存页)
(12) sar -u 1 1 // CPU的使用情况和IOWAIT信息(同默认监控)
(13) sar -v 1 1 // inode, file and other kernel tablesd的状态信息
(14) sar -w 1 1 // 每秒上下文交换的数目
(15) sar -W 1 1 // SWAP交换的统计信息(监控状态同iostat 的si so)
(16) sar -x 2906 1 1 // 显示指定进程(2906)的统计信息,信息包括:进程造成的错误、用户级和系统级用户CPU的占用情况、运行在哪颗CPU上
(17) sar -y 1 1 // TTY设备的活动状态
(18) 将输出到文件(-o)和读取记录信息(-f)
1.查看CPU使用情况 sar -u
sar 1 3 或 sar -u 1 3
%user 用户空间的CPU使用
%nice 改变过优先级的进程的CPU使用率
%system 内核空间的CPU使用率
%iowait CPU等待IO的百分比
%steal 虚拟机的虚拟机CPU使用的CPU
%idle 空闲的CPU
在以上的显示当中,主要看%iowait和%idle,%iowait过高表示存在I/O瓶颈,即磁盘IO无法满足业务需求,如果%idle过低表示CPU使用率比较严重,需要结合内存使用等情况判断CPU是否瓶颈。
2.将统计结果保存到文件 sar -o & sar -f
sar -o test 1 3 #保存
sar -f test #查看
3.查看平均负载 sar -q
sar -q 1 3
runq-sz 运行队列的长度(等待运行的进程数,每核的CP不能超过3个)
plist-sz 进程列表中的进程(processes)和线程数(threads)的数量
ldavg-1 最后1分钟的CPU平均负载,即将多核CPU过去一分钟的负载相加再除以核心数得出的平均值,5分钟和15分钟以此类推
ldavg-5 最后5分钟的CPU平均负载
ldavg-15 最后15分钟的CPU平均负载
blocked
4.查看内存使用情况 sar -r
sar -r 1 3
kbmemfree 空闲的物理内存大小
kbmemused 使用中的物理内存大小
%memused 物理内存使用率
kbbuffers 内核中作为缓冲区使用的物理内存大小,kbbuffers和kbcached:这两个值就是free命令中的buffer和cache.
kbcached 缓存的文件大小
kbcommit 保证当前系统正常运行所需要的最小内存,即为了确保内存不溢出而需要的最少内存(物理内存+Swap分区)
commit 这个值是kbcommit与内存总量(物理内存+swap分区)的一个百分比的值
kbactive
kbinact
kbdirty
5.查看系统swap分区统计情况 sar -W
sar -W 1 3
pswpin/s 每秒从交换分区到系统的交换页面(swap page)数量
pswpott/s 每秒从系统交换到swap的交换页面(swap page)的数量
6.查看IO和传递速率 sar -b
sar -b 1 3
tps 磁盘每秒钟的IO总数,等于iostat中的tps
rtps 每秒钟从磁盘读取的IO总数
wtps 每秒钟从写入到磁盘的IO总数
bread/s 每秒钟从磁盘读取的块总数
bwrtn/s 每秒钟此写入到磁盘的块总数
7.查看磁盘使用情况 sar -d
sar -d
DEV 磁盘设备的名称,如果不加-p,会显示dev253-0类似的设备名称,因此加上-p显示的名称更直接
tps 每秒I/O的传输总数
rd_sec/s 每秒读取的扇区的总数
wr_sec/s 每秒写入的扇区的总数
avgrq-sz 平均每次次磁盘I/O操作的数据大小(扇区)
avgqu-sz 磁盘请求队列的平均长度
await 从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒等于1000毫秒),等于寻道时间+队列时间+服务时间
svctm I/O的服务处理时间,即不包括请求队列中的时间
%util I/O请求占用的CPU百分比,值越高,说明I/O越慢
8. 统计网络信息 sar -n
-n { <关键词> [,...] | ALL }
关键词可以是:
DEV 网卡
EDEV 网卡 (错误)
NFS NFS 客户端
NFSD NFS 服务器
SOCK Sockets (套接字) (v4)
IP IP 流 (v4)
EIP IP 流 (v4) (错误)
ICMP ICMP 流 (v4)
EICMP ICMP 流 (v4) (错误)
TCP TCP 流 (v4)
ETCP TCP 流 (v4) (错误)
UDP UDP 流 (v4)
SOCK6 Sockets (套接字) (v6)
IP6 IP 流 (v6)
EIP6 IP 流 (v6) (错误)
ICMP6 ICMP 流 (v6)
EICMP6 ICMP 流 (v6) (错误)
UDP6 UDP 流 (v6)
8.1 网络接口信息 sar -n DEV
sar -n DEV 1 1
IFACE 本地网卡接口的名称
rxpck/s 每秒钟接受的数据包
txpck/s 每秒钟发送的数据库
rxKB/S 每秒钟接受的数据包大小,单位为KB
txKB/S 每秒钟发送的数据包大小,单位为KB
rxcmp/s 每秒钟接受的压缩数据包
txcmp/s 每秒钟发送的压缩包
rxmcst/s 每秒钟接收的多播数据包
8.2 网络设备通信失败信息 sar -n EDVE
sar -n EDEV 1 1
IFACE 网卡名称
rxerr/s 每秒钟接收到的损坏的数据包
txerr/s 每秒钟发送的数据包错误数
coll/s 当发送数据包时候,每秒钟发生的冲撞(collisions)数,这个是在半双工模式下才有
rxdrop/s 当由于缓冲区满的时候,网卡设备接收端每秒钟丢掉的网络包的数目
txdrop/s 当由于缓冲区满的时候,网络设备发送端每秒钟丢掉的网络包的数目
txcarr/s 当发送数据包的时候,每秒钟载波错误发生的次数
rxfram/s 在接收数据包的时候,每秒钟发生的帧对其错误的次数
rxfifo/s 在接收数据包的时候,每秒钟缓冲区溢出的错误发生的次数
txfifo/s 在发生数据包 的时候,每秒钟缓冲区溢出的错误发生的次数
8.3统计socket连接信息 sar -n SOCK
sar -n SOCK 1 1
totsck 当前被使用的socket总数
tcpsck 当前正在被使用的TCP的socket总数
udpsck 当前正在被使用的UDP的socket总数
rawsck 当前正在被使用于RAW的skcket总数
if-frag 当前的IP分片的数目
tcp-tw TCP套接字中处于TIME-WAIT状态的连接数量
8.4 TCP连接的统计 sar -n TCP
sar -n TCP 1 1
active/s 新的主动连接
passive/s 新的被动连接
iseg/s 接受的段
oseg/s 输出的段
Linux kill 命令用于删除执行中的程序或工作。
kill 可将指定的信息送至程序。预设的信息为 SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序。程序或工作的编号可利用 ps 指令或 jobs 指令查看。
语法
kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>]
参数说明:
-l <信息编号> 若不加<信息编号>选项,则 -l 参数会列出全部的信息名称。
-s <信息名称或编号> 指定要送出的信息。
[程序] [程序]可以是程序的PID或是PGID,也可以是工作编号。
使用 kill -l 命令列出所有可用信号。
最常用的信号是:1 (HUP):重新加载进程。
9 (KILL):杀死一个进程。
15 (TERM):正常停止一个进程。
- 杀死进程
-
- # kill 12345
-
- 强制杀死进程
-
- # kill -KILL 123456
-
- 发送SIGHUP信号,可以使用一下信号
-
- # kill -HUP pid
-
- 彻底杀死进程
-
- # kill -9 123456
-
- 显示信号
-
- # kill -l
- 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
- 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
- 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
- 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
- 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
- 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
- 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
- 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
- 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
- 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
- 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
- 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
- 63) SIGRTMAX-1 64) SIGRTMAX
-
- 杀死指定用户所有进程
-
- #kill -9 $(ps -ef | grep hnlinux) //方法一 过滤出hnlinux用户进程
- #kill -u hnlinux //方法二
Linux free命令用于显示内存状态。
free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。
语法
free [-bkmotV][-s <间隔秒数>]
参数说明:
-b 以Byte为单位显示内存使用情况。
-k 以KB为单位显示内存使用情况。
-m 以MB为单位显示内存使用情况。
-h 以合适的单位显示内存使用情况,最大为三位数,自动计算对应的单位值。单位有:B = bytes
K = kilos
M = megas
G = gigas
T = teras
-o 不显示缓冲区调节列。
-s<间隔秒数> 持续观察内存使用状况。
-t 显示内存总和列。
-V 显示版本信息。
- 显示内存使用情况
-
- # free //显示内存使用信息
- total used free shared buffers cached
- Mem: 254772 184568 70204 0 5692 89892
- -/+ buffers/cache: 88984 165788
- Swap: 524280 65116 459164
- 以总和的形式显示内存的使用信息
-
- # free -t //以总和的形式查询内存的使用信息
- total used free shared buffers cached
- Mem: 254772 184868 69904 0 5936 89908
- -/+ buffers/cache: 89024 165748
- Swap: 524280 65116 459164
- Total: 779052 249984 529068
- 周期性的查询内存使用信息
-
- # free -s 10 //每10s 执行一次命令
- total used free shared buffers cached
- Mem: 254772 187628 67144 0 6140 89964
- -/+ buffers/cache: 91524 163248
- Swap: 524280 65116 459164
-
- total used free shared buffers cached
- Mem: 254772 187748 67024 0 6164 89940
- -/+ buffers/cache: 91644 163128
- Swap: 524280 65116 459164
Pmap 提供了进程的内存映射,pmap命令用于显示一个或多个进程的内存状态。其报告进程的地址空间和内存状态信息。Pmap实际上是一个Sun OS上的命令,linux仅支持其有限的功能。但是它还是对查看完整的进程地址空间很有帮助。我们需要PID或者运行的进程的唯一进程ID来查看进程内存状态,我们可以通过/proc或者常规命令比如top或ps得到它。
名称:
pmap - report memory map of a process(查看进程的内存映像信息)
用法
pmap [ -x | -d ] [ -q ] pids...
pmap -V
选项含义
-x extended Show the extended format. 显示扩展格式
-d device Show the deviceformat. 显示设备格式
-q quiet Do not display some header/footerlines. 不显示头尾行
-V show version Displays version of program. 显示版本
扩展格式和设备格式域:
Address: start address ofmap 映像起始地址
Kbytes: size of map in kilobytes 映像大小
RSS: resident set size inkilobytes 驻留集大小
Dirty: dirty pages (both sharedand private) in kilobytes 脏页大小
Mode: permissions on map 映像权限: r=read,w=write, x=execute, s=shared, p=private (copy on write)
Mapping: file backing the map ,or '[ anon ]' for allocated memory, or '[ stack ]' for the program stack. 映像支持文件,[anon]为已分配内存[stack]为程序堆栈
Offset: offset into the file 文件偏移
Device: device name(major:minor) 设备名
- 查看进程1的设备格式
-
- [root@C44 ~]# pmap -d 1
-
- 1: init [5]
-
- Address Kbytes Mode Offset Device Mapping
-
- 00934000 88 r-x-- 0000000000000000 008:00005ld-2.3.4.so
-
- 0094a000 4 r---- 0000000000015000 008:00005ld-2.3.4.so
-
- 0094b000 4 rw--- 0000000000016000 008:00005ld-2.3.4.so
-
- 0094e000 1188 r-x-- 0000000000000000 008:00005 libc-2.3.4.so
-
- 00a77000 8 r---- 0000000000129000 008:00005libc-2.3.4.so
-
- 00a79000 8 rw--- 000000000012b000 008:00005libc-2.3.4.so
-
- 00a7b000 8 rw--- 0000000000a7b000 000:00000 [ anon ]
-
- 00a85000 52 r-x-- 0000000000000000 008:00005libsepol.so.1
-
- 00a92000 4 rw--- 000000000000c000 008:00005libsepol.so.1
-
- 00a93000 32 rw--- 0000000000a93000 000:00000 [ anon ]
-
- 00d9d000 52 r-x-- 0000000000000000 008:00005libselinux.so.1
-
- 00daa000 4 rw--- 000000000000d000 008:00005libselinux.so.1
-
- 08048000 28 r-x-- 0000000000000000 008:00005 init
-
- 0804f000 4 rw--- 0000000000007000 008:00005 init
-
- 084e1000 132 rw--- 00000000084e1000 000:00000 [ anon ]
-
- b7f5d000 8 rw--- 00000000b7f5d000 000:00000 [ anon ]
-
- bffee000 72 rw--- 00000000bffee000 000:00000 [ stack ]
-
- ffffe000 4 ----- 0000000000000000 000:00000 [ anon ]
-
- mapped: 1700K writeable/private: 276K shared: 0K
-
- [root@C44 ~]#
-
-
-
- 最后一行的值
-
- mapped 表示该进程映射的虚拟地址空间大小,也就是该进程预先分配的虚拟内存大小,即ps出的vsz
-
- writeable/private 表示进程所占用的私有地址空间大小,也就是该进程实际使用的内存大小
-
- shared 表示进程和其他进程共享的内存大小
-
-
-
- 查看进程1的设备格式,不显示头尾行
-
- [root@C44 ~]# pmap -d -q 1
-
- 1: init [5]
-
- 00934000 88 r-x-- 0000000000000000 008:00005ld-2.3.4.so
-
- 0094a000 4 r---- 0000000000015000 008:00005ld-2.3.4.so
-
- 0094b000 4 rw--- 0000000000016000 008:00005ld-2.3.4.so
-
- 0094e000 1188 r-x-- 0000000000000000 008:00005 libc-2.3.4.so
-
- 00a77000 8 r---- 0000000000129000 008:00005libc-2.3.4.so
-
- 00a79000 8 rw--- 000000000012b000 008:00005libc-2.3.4.so
-
- 00a7b000 8 rw--- 0000000000a7b000 000:00000 [ anon ]
-
- 00a85000 52 r-x-- 0000000000000000 008:00005libsepol.so.1
-
- 00a92000 4 rw--- 000000000000c000 008:00005libsepol.so.1
-
- 00a93000 32 rw--- 0000000000a93000 000:00000 [ anon ]
-
- 00d9d000 52 r-x-- 0000000000000000 008:00005libselinux.so.1
-
- 00daa000 4 rw--- 000000000000d000 008:00005libselinux.so.1
-
- 08048000 28 r-x-- 0000000000000000 008:00005 init
-
- 0804f000 4 rw--- 0000000000007000008:00005 init
-
- 084e1000 132 rw--- 00000000084e1000 000:00000 [ anon ]
-
- b7f5d000 8 rw--- 00000000b7f5d000 000:00000 [ anon ]
-
- bffee000 72 rw--- 00000000bffee000 000:00000 [ stack ]
-
- ffffe000 4 ----- 0000000000000000 000:00000 [ anon ]
-
- [root@C44 ~]#
-
-
-
- 查看进程1的扩展格式
-
- [root@C44 ~]# pmap -x 1
-
- 1: init [5]
-
- Address Kbytes RSS Anon Locked Mode Mapping
-
- 00934000 88 - - - r-x-- ld-2.3.4.so
-
- 0094a000 4 - - - r---- ld-2.3.4.so
-
- 0094b000 4 - - - rw--- ld-2.3.4.so
-
- 0094e000 1188 - - - r-x-- libc-2.3.4.so
-
- 00a77000 8 - - - r---- libc-2.3.4.so
-
- 00a79000 8 - - - rw--- libc-2.3.4.so
-
- 00a7b000 8 - - - rw--- [ anon ]
-
- 00a85000 52 - - - r-x-- libsepol.so.1
-
- 00a92000 4 - - - rw--- libsepol.so.1
-
- 00a93000 32 - - - rw--- [ anon ]
-
- 00d9d000 52 - - - r-x-- libselinux.so.1
-
- 00daa000 4 - - - rw--- libselinux.so.1
-
- 08048000 28 - - - r-x-- init
-
- 0804f000 4 - - - rw--- init
-
- 084e1000 132 - - - rw--- [ anon ]
-
- b7f5d000 8 - - - rw--- [ anon ]
-
- bffee000 72 - - - rw--- [ stack ]
-
- ffffe000 4 - - - ----- [ anon ]
-
- -------- ------- ------- ------- -------
-
- total kB 1700 - - -
-
- [root@C44 ~]#
-
-
-
- 循环显示进程3066的设备格式的最后1行,间隔2秒,
-
- [root@C44 ~]# while true; do pmap -d 3066 | tail -1; sleep 2; done
-
- mapped: 5412K writeable/private: 2028K shared: 0K
-
- mapped: 5412K writeable/private: 2028K shared: 0K
-
- mapped: 5412K writeable/private: 2028K shared: 0K
-
- mapped: 5412K writeable/private: 2028K shared: 0K
-
- mapped: 5412K writeable/private: 2028K shared: 0K
-
- mapped: 5412K writeable/private: 2028K shared: 0K
-
- mapped: 5412K writeable/private: 2028K shared: 0K
-
- mapped: 5412K writeable/private: 2028K shared: 0K
-
- mapped: 5412K writeable/private: 2028K shared: 0K
-
- mapped: 5412K writeable/private: 2028K shared: 0K
-
- mapped: 5412K writeable/private: 2028K shared: 0K
-
- mapped: 5412K writeable/private: 2028K shared: 0K
-
- mapped: 5412K writeable/private: 2028K shared: 0K
Linux df(英文全拼:disk free) 命令用于显示目前在 Linux 系统上的文件系统磁盘使用情况统计。
语法
df [选项]... [FILE]...
文件-a, --all 包含所有的具有 0 Blocks 的文件系统
文件--block-size={SIZE} 使用 {SIZE} 大小的 Blocks
文件-h, --human-readable 使用人类可读的格式(预设值是不加这个选项的...)
文件-H, --si 很像 -h, 但是用 1000 为单位而不是用 1024
文件-i, --inodes 列出 inode 资讯,不列出已使用 block
文件-k, --kilobytes 就像是 --block-size=1024
文件-l, --local 限制列出的文件结构
文件-m, --megabytes 就像 --block-size=1048576
文件--no-sync 取得资讯前不 sync (预设值)
文件-P, --portability 使用 POSIX 输出格式
文件--sync 在取得资讯前 sync
文件-t, --type=TYPE 限制列出文件系统的 TYPE
文件-T, --print-type 显示文件系统的形式
文件-x, --exclude-type=TYPE 限制列出文件系统不要显示 TYPE
文件-v (忽略)
文件--help 显示这个帮手并且离开
文件--version 输出版本资讯并且离开
- 显示文件系统的磁盘使用情况统计:
-
- # df
- Filesystem 1K-blocks Used Available Use% Mounted on
- /dev/sda6 29640780 4320704 23814388 16% /
- udev 1536756 4 1536752 1% /dev
- tmpfs 617620 888 616732 1% /run
- none 5120 0 5120 0% /run/lock
- none 1544044 156 1543888 1% /run/shm
-
- 第一列指定文件系统的名称,第二列指定一个特定的文件系统1K-块1K是1024字节为单位的总内存。用和可用列正在使用中,分别指定的内存量。
-
- 使用列指定使用的内存的百分比,而最后一栏"安装在"指定的文件系统的挂载点。
-
- df也可以显示磁盘使用的文件系统信息:
-
- # df test
- Filesystem 1K-blocks Used Available Use% Mounted on
- /dev/sda6 29640780 4320600 23814492 16% /
-
- 用一个-i选项的df命令的输出显示inode信息而非块使用量。
-
- df -i
- Filesystem Inodes IUsed IFree IUse% Mounted on
- /dev/sda6 1884160 261964 1622196 14% /
- udev 212748 560 212188 1% /dev
- tmpfs 216392 477 215915 1% /run
- none 216392 3 216389 1% /run/lock
- none 216392 8 216384 1% /run/shm
-
- 显示所有的信息:
-
- # df --total
- Filesystem 1K-blocks Used Available Use% Mounted on
- /dev/sda6 29640780 4320720 23814372 16% /
- udev 1536756 4 1536752 1% /dev
- tmpfs 617620 892 616728 1% /run
- none 5120 0 5120 0% /run/lock
- none 1544044 156 1543888 1% /run/shm
- total 33344320 4321772 27516860 14%
-
- 我们看到输出的末尾,包含一个额外的行,显示总的每一列。
-
- -h选项,通过它可以产生可读的格式df命令的输出:
-
- # df -h
- Filesystem Size Used Avail Use% Mounted on
- /dev/sda6 29G 4.2G 23G 16% /
- udev 1.5G 4.0K 1.5G 1% /dev
- tmpfs 604M 892K 603M 1% /run
- none 5.0M 0 5.0M 0% /run/lock
- none 1.5G 156K 1.5G 1% /run/shm
-
- 我们可以看到输出显示的数字形式的'G'(千兆字节),"M"(兆字节)和"K"(千字节)。
-
- 这使输出容易阅读和理解,从而使显示可读的。请注意,第二列的名称也发生了变化,为了使显示可读的"大小"。
Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。
输出信息含义
执行netstat后,其输出结果为
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 2 210.34.6.89:telnet 210.34.6.96:2873 ESTABLISHED
tcp 296 0 210.34.6.89:1165 210.34.6.84:netbios-ssn ESTABLISHED
tcp 0 0 localhost.localdom:9001 localhost.localdom:1162 ESTABLISHED
tcp 0 0 localhost.localdom:1162 localhost.localdom:9001 ESTABLISHED
tcp 0 80 210.34.6.89:1161 210.34.6.10:netbios-ssn CLOSE
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 1 [ ] STREAM CONNECTED 16178 @000000dd
unix 1 [ ] STREAM CONNECTED 16176 @000000dc
unix 9 [ ] DGRAM 5292 /dev/log
unix 1 [ ] STREAM CONNECTED 16182 @000000df
从整体上看,netstat的输出结果可以分为两个部分:
一个是Active Internet connections,称为有源TCP连接,其中"Recv-Q"和"Send-Q"指%0A的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。
另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。
Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。
常见参数
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。
提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到
实用命令实例
- 1. 列出所有端口 (包括监听和未监听的)
- 列出所有端口 netstat -a
-
- # netstat -a | more
- Active Internet connections (servers and established)
- Proto Recv-Q Send-Q Local Address Foreign Address State
- tcp 0 0 localhost:30037 *:* LISTEN
- udp 0 0 *:bootpc *:*
-
- Active UNIX domain sockets (servers and established)
- Proto RefCnt Flags Type State I-Node Path
- unix 2 [ ACC ] STREAM LISTENING 6135 /tmp/.X11-unix/X0
- unix 2 [ ACC ] STREAM LISTENING 5140 /var/run/acpid.socket
- 列出所有 tcp 端口 netstat -at
-
- # netstat -at
- Active Internet connections (servers and established)
- Proto Recv-Q Send-Q Local Address Foreign Address State
- tcp 0 0 localhost:30037 *:* LISTEN
- tcp 0 0 localhost:ipp *:* LISTEN
- tcp 0 0 *:smtp *:* LISTEN
- tcp6 0 0 localhost:ipp [::]:* LISTEN
- 列出所有 udp 端口 netstat -au
-
- # netstat -au
- Active Internet connections (servers and established)
- Proto Recv-Q Send-Q Local Address Foreign Address State
- udp 0 0 *:bootpc *:*
- udp 0 0 *:49119 *:*
- udp 0 0 *:mdns *:*
-
- 2. 列出所有处于监听状态的 Sockets
- 只显示监听端口 netstat -l
-
- # netstat -l
- Active Internet connections (only servers)
- Proto Recv-Q Send-Q Local Address Foreign Address State
- tcp 0 0 localhost:ipp *:* LISTEN
- tcp6 0 0 localhost:ipp [::]:* LISTEN
- udp 0 0 *:49119 *:*
- 只列出所有监听 tcp 端口 netstat -lt
-
- # netstat -lt
- Active Internet connections (only servers)
- Proto Recv-Q Send-Q Local Address Foreign Address State
- tcp 0 0 localhost:30037 *:* LISTEN
- tcp 0 0 *:smtp *:* LISTEN
- tcp6 0 0 localhost:ipp [::]:* LISTEN
- 只列出所有监听 udp 端口 netstat -lu
-
- # netstat -lu
- Active Internet connections (only servers)
- Proto Recv-Q Send-Q Local Address Foreign Address State
- udp 0 0 *:49119 *:*
- udp 0 0 *:mdns *:*
- 只列出所有监听 UNIX 端口 netstat -lx
-
- # netstat -lx
- Active UNIX domain sockets (only servers)
- Proto RefCnt Flags Type State I-Node Path
- unix 2 [ ACC ] STREAM LISTENING 6294 private/maildrop
- unix 2 [ ACC ] STREAM LISTENING 6203 public/cleanup
- unix 2 [ ACC ] STREAM LISTENING 6302 private/ifmail
- unix 2 [ ACC ] STREAM LISTENING 6306 private/bsmtp
-
-
- 3. 显示每个协议的统计信息
- 显示所有端口的统计信息 netstat -s
-
- # netstat -s
- Ip:
- 11150 total packets received
- 1 with invalid addresses
- 0 forwarded
- 0 incoming packets discarded
- 11149 incoming packets delivered
- 11635 requests sent out
- Icmp:
- 0 ICMP messages received
- 0 input ICMP message failed.
- Tcp:
- 582 active connections openings
- 2 failed connection attempts
- 25 connection resets received
- Udp:
- 1183 packets received
- 4 packets to unknown port received.
- .....
- 显示 TCP 或 UDP 端口的统计信息 netstat -st 或 -su
-
- # netstat -st
- # netstat -su
-
- 4. 在 netstat 输出中显示 PID 和进程名称 netstat -p
- netstat -p 可以与其它开关一起使用,就可以添加 “PID/进程名称” 到 netstat 输出中,这样 debugging 的时候可以很方便的发现特定端口运行的程序。
-
- # netstat -pt
- Active Internet connections (w/o servers)
- Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
- tcp 1 0 ramesh-laptop.loc:47212 192.168.185.75:www CLOSE_WAIT 2109/firefox
- tcp 0 0 ramesh-laptop.loc:52750 lax:www ESTABLISHED 2109/firefox
-
- 5. 在 netstat 输出中不显示主机,端口和用户名 (host, port or user)
- 当你不想让主机,端口和用户名显示,使用 netstat -n。将会使用数字代替那些名称。
-
- 同样可以加速输出,因为不用进行比对查询。
-
- # netstat -an
-
- 如果只是不想让这三个名称中的一个被显示,使用以下命令
-
- # netsat -a --numeric-ports
- # netsat -a --numeric-hosts
- # netsat -a --numeric-users
-
- 6. 持续输出 netstat 信息
- netstat 将每隔一秒输出网络信息。
-
- # netstat -c
- Active Internet connections (w/o servers)
- Proto Recv-Q Send-Q Local Address Foreign Address State
- tcp 0 0 ramesh-laptop.loc:36130 101-101-181-225.ama:www ESTABLISHED
- tcp 1 1 ramesh-laptop.loc:52564 101.11.169.230:www CLOSING
- tcp 0 0 ramesh-laptop.loc:43758 server-101-101-43-2:www ESTABLISHED
- tcp 1 1 ramesh-laptop.loc:42367 101.101.34.101:www CLOSING
- ^C
-
- 7. 显示系统不支持的地址族 (Address Families)
- netstat --verbose
-
- 在输出的末尾,会有如下的信息
-
- netstat: no support for `AF IPX' on this system.
- netstat: no support for `AF AX25' on this system.
- netstat: no support for `AF X25' on this system.
- netstat: no support for `AF NETROM' on this system.
-
- 8. 显示核心路由信息 netstat -r
- # netstat -r
- Kernel IP routing table
- Destination Gateway Genmask Flags MSS Window irtt Iface
- 192.168.1.0 * 255.255.255.0 U 0 0 0 eth2
- link-local * 255.255.0.0 U 0 0 0 eth2
- default 192.168.1.1 0.0.0.0 UG 0 0 0 eth2
-
- 注意: 使用 netstat -rn 显示数字格式,不查询主机名称。
-
-
- 9. 找出程序运行的端口
- 并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。
-
- # netstat -ap | grep ssh
- tcp 1 0 dev-db:ssh 101.174.100.22:39213 CLOSE_WAIT -
- tcp 1 0 dev-db:ssh 101.174.100.22:57643 CLOSE_WAIT -
-
- 找出运行在指定端口的进程
-
- # netstat -an | grep ':80'
-
- 10. 显示网络接口列表
- # netstat -i
- Kernel Interface table
- Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
- eth0 1500 0 0 0 0 0 0 0 0 0 BMU
- eth2 1500 0 26196 0 0 0 26883 6 0 0 BMRU
- lo 16436 0 4 0 0 0 4 0 0 0 LRU
-
- 显示详细信息,像是 ifconfig 使用 netstat -ie:
-
- # netstat -ie
- Kernel Interface table
- eth0 Link encap:Ethernet HWaddr 00:10:40:11:11:11
- UP BROADCAST MULTICAST MTU:1500 Metric:1
- RX packets:0 errors:0 dropped:0 overruns:0 frame:0
- TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
- collisions:0 txqueuelen:1000
- RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
- Memory:f6ae0000-f6b00000
-
- 11. IP和TCP分析
-
- 查看连接某服务端口最多的的IP地址
-
- wss8848@ubuntu:~$ netstat -nat | grep "192.168.1.15:22" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -20
- 18 221.136.168.36
- 3 154.74.45.242
- 2 78.173.31.236
- 2 62.183.207.98
- 2 192.168.1.14
- 2 182.48.111.215
- 2 124.193.219.34
- 2 119.145.41.2
- 2 114.255.41.30
- 1 75.102.11.99
-
- TCP各种状态列表
-
- wss8848@ubuntu:~$ netstat -nat |awk '{print $6}'
- established)
- Foreign
- LISTEN
- TIME_WAIT
- ESTABLISHED
- TIME_WAIT
- SYN_SENT
-
- 先把状态全都取出来,然后使用uniq -c统计,之后再进行排序。
-
- wss8848@ubuntu:~$ netstat -nat |awk '{print $6}'|sort|uniq -c
- 143 ESTABLISHED
- 1 FIN_WAIT1
- 1 Foreign
- 1 LAST_ACK
- 36 LISTEN
- 6 SYN_SENT
- 113 TIME_WAIT
- 1 established)
-
- 最后的命令如下:
-
- netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn
-
- 分析access.log获得访问前10位的ip地址
-
- awk '{print $1}' access.log |sort|uniq -c|sort -nr|head -10
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。