当前位置:   article > 正文

linux 查看系统性能总结_好看的linux性能占用

好看的linux性能占用

目录

各指标查看总结

CPU 性能工具

内存性能工具

​磁盘 I/O 性能工具

网络性能工具

基准测试工具

CPU相关命令

ps

top

vmstat

pidstat

sar

kill

内存相关命令

free

pmap

IO相关命令

df

网络相关命令

netstat


各指标查看总结

CPU 性能工具

首先,从 CPU 的角度来说,主要的性能指标就是 CPU 的使用率、上下文切换以及 CPU Cache 的命中率等。下面这张图就列出了常见的 CPU 性能指标。

从这些指标出发,再把 CPU 使用率,划分为系统和进程两个维度,我们就可以得到,下面这个
CPU 性能工具速查表。注意,因为每种性能指标都可能对应多种工具,我在每个指标的说明中,
都帮你总结了这些工具的特点和注意事项。 

内存性能工具

接着我们来看内存方面。从内存的角度来说,主要的性能指标,就是系统内存的分配和使用、进
程内存的分配和使用以及 SWAP 的用量。下面这张图列出了常见的内存性能指标。

磁盘 I/O 性能工具

接下来,从文件系统和磁盘 I/O 的角度来说,主要性能指标,就是文件系统的使用、缓存和缓冲
区的使用,以及磁盘 I/O 的使用率、吞吐量和延迟等。下面这张图列出了常见的 I/O 性能指标。

 

网络性能工具

从网络的角度来说,主要性能指标就是吞吐量、响应时间、连接数、丢包数等。根据 TCP/IP 网络协议栈的原理,我们可以把这些性能指标,进一步细化为每层协议的具体指标。这里同样用一张图,分别从链路层、网络层、传输层和应用层,列出了各层的主要指标。

 

 

基准测试工具

除了性能分析外,很多时候,我们还需要对系统性能进行基准测试。比如:

在文件系统和磁盘 I/O 模块中,我们使用 fio 工具,测试了磁盘 I/O 的性能。
在网络模块中,我们使用 iperf、pktgen 等,测试了网络的性能。
而在很多基于 Nginx 的案例中,我们则使用 ab、wrk 等,测试 Nginx 应用的性能。
除了这些工具外,对于 Linux 的各个子系统来说,还有很多其他的基准测试工具可能会用到。下面这张图,是 Brendan Gregg 整理的 Linux 基准测试工具图谱,可以保存下来,在需要时参考。

 

CPU相关命令

ps

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:所执行的指令

  1. 查找指定进程格式:
  2. ps -ef | grep 进程关键字
  3. 例如显示 php 的进程:
  4. # ps -ef | grep php
  5. root       794     1  0  2020 ?        00:00:52 php-fpm: master process (/etc/php/7.3/fpm/php-fpm.conf)
  6. www-data   951   794  0  2020 ?        00:24:15 php-fpm: pool www
  7. www-data   953   794  0  2020 ?        00:24:14 php-fpm: pool www
  8. www-data   954   794  0  2020 ?        00:24:29 php-fpm: pool www
  9. ...
  10. 显示进程信息:
  11. # ps -A 
  12. PID TTY     TIME CMD
  13.   1 ?    00:00:02 init
  14.   2 ?    00:00:00 kthreadd
  15.   3 ?    00:00:00 migration/0
  16.   4 ?    00:00:00 ksoftirqd/0
  17.   5 ?    00:00:00 watchdog/0
  18.   6 ?    00:00:00 events/0
  19.   7 ?    00:00:00 cpuset
  20.   8 ?    00:00:00 khelper
  21.   9 ?    00:00:00 netns
  22.   10 ?    00:00:00 async/mgr
  23.   11 ?    00:00:00 pm
  24.   12 ?    00:00:00 sync_supers
  25.   13 ?    00:00:00 bdi-default
  26.   14 ?    00:00:00 kintegrityd/0
  27.   15 ?    00:00:02 kblockd/0
  28.   16 ?    00:00:00 kacpid
  29.   17 ?    00:00:00 kacpi_notify
  30.   18 ?    00:00:00 kacpi_hotplug
  31.   19 ?    00:00:27 ata/0
  32. ……省略部分结果
  33. 30749 pts/0  00:00:15 gedit
  34. 30886 ?    00:01:10 qtcreator.bin
  35. 30894 ?    00:00:00 qtcreator.bin 
  36. 31160 ?    00:00:00 dhclient
  37. 31211 ?    00:00:00 aptd
  38. 31302 ?    00:00:00 sshd
  39. 31374 pts/2  00:00:00 bash
  40. 31396 pts/2  00:00:00 ps
  41. 显示指定用户信息
  42. # ps -u root //显示root进程用户信息
  43.  PID TTY     TIME CMD
  44.   1 ?    00:00:02 init
  45.   2 ?    00:00:00 kthreadd
  46.   3 ?    00:00:00 migration/0
  47.   4 ?    00:00:00 ksoftirqd/0
  48.   5 ?    00:00:00 watchdog/0
  49.   6 ?    00:00:00 events/0
  50.   7 ?    00:00:00 cpuset
  51.   8 ?    00:00:00 khelper
  52.   9 ?    00:00:00 netns
  53.   10 ?    00:00:00 async/mgr
  54.   11 ?    00:00:00 pm
  55.   12 ?    00:00:00 sync_supers
  56.   13 ?    00:00:00 bdi-default
  57.   14 ?    00:00:00 kintegrityd/0
  58.   15 ?    00:00:02 kblockd/0
  59.   16 ?    00:00:00 kacpid
  60. ……省略部分结果
  61. 30487 ?    00:00:06 gnome-terminal
  62. 30488 ?    00:00:00 gnome-pty-helpe
  63. 30489 pts/0  00:00:00 bash
  64. 30670 ?    00:00:00 debconf-communi 
  65. 30749 pts/0  00:00:15 gedit
  66. 30886 ?    00:01:10 qtcreator.bin
  67. 30894 ?    00:00:00 qtcreator.bin 
  68. 31160 ?    00:00:00 dhclient
  69. 31211 ?    00:00:00 aptd
  70. 31302 ?    00:00:00 sshd
  71. 31374 pts/2  00:00:00 bash
  72. 31397 pts/2  00:00:00 ps
  73. 显示所有进程信息,连同命令行
  74. # ps -ef //显示所有命令,连带命令行
  75. UID    PID PPID C STIME TTY     TIME CMD
  76. root     1   0 0 10:22 ?    00:00:02 /sbin/init
  77. root     2   0 0 10:22 ?    00:00:00 [kthreadd]
  78. root     3   2 0 10:22 ?    00:00:00 [migration/0]
  79. root     4   2 0 10:22 ?    00:00:00 [ksoftirqd/0]
  80. root     5   2 0 10:22 ?    00:00:00 [watchdog/0]
  81. root     6   2 0 10:22 ?    /usr/lib/NetworkManager
  82. ……省略部分结果
  83. root   31302 2095 0 17:42 ?    00:00:00 sshd: root@pts/2 
  84. root   31374 31302 0 17:42 pts/2  00:00:00 -bash
  85. root   31400   1 0 17:46 ?    00:00:00 /usr/bin/python /usr/sbin/aptd
  86. root   31407 31374 0 17:48 pts/2  00:00:00 ps -ef

top

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文件中。

  1. 显示进程信息
  2. # top
  3. 显示完整命令
  4. # top -c
  5. 以批处理模式显示程序信息
  6. # top -b
  7. 以累积模式显示程序信息
  8. # top -S
  9. 设置信息更新次数
  10. top -n 2
  11. //表示更新两次后终止更新显示
  12. 设置信息更新时间
  13. # top -d 3
  14. //表示更新周期为3
  15. 显示指定的进程信息
  16. # top -p 139
  17. //显示进程号为139的进程信息,CPU、内存占用率等
  18. 显示更新十次后退出
  19. top -n 10
  20. 使用者将不能利用交谈式指令来对行程下命令
  21. top -s

vmstat

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

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:显示命令名和所有参数

  1. 示例一:查看所有进程的 CPU 使用情况( -u -p ALL
  2. pidstat
  3. pidstat -u -p ALL
  4. pidstat 和 pidstat -u -p ALL 是等效的。
  5. pidstat 默认显示了所有进程的cpu使用率。
  6. [root@VM_2_4_centos ~]# pidstat
  7. Linux 2.6.32-696.6.3.el6.x86_64 (VM_2_4_centos) 06/20/2019 _x86_64_ (8 CPU)
  8. 05:29:28 PM PID %usr %system %guest %CPU CPU Command
  9. 05:29:28 PM 1 0.00 0.00 0.00 0.00 4 init
  10. 05:29:28 PM 3 0.00 0.00 0.00 0.00 0 migration/0
  11. 05:29:28 PM 4 0.00 0.00 0.00 0.00 0 ksoftirqd/0
  12. 05:29:28 PM 6 0.00 0.00 0.00 0.00 0 watchdog/0
  13. 05:29:28 PM 7 0.00 0.00 0.00 0.00 1 migration/1
  14. 05:29:28 PM 9 0.00 0.00 0.00 0.00 1 ksoftirqd/1
  15. 05:29:28 PM 10 0.00 0.00 0.00 0.00 1 watchdog/1
  16. 05:29:28 PM 11 0.00 0.00 0.00 0.00 2 migration/2
  17. 05:29:28 PM 13 0.00 0.00 0.00 0.00 2 ksoftirqd/2
  18. 05:29:28 PM 14 0.00 0.00 0.00 0.00 2 watchdog/2
  19. 05:29:28 PM 15 0.00 0.00 0.00 0.00 3 migration/3
  20. 05:29:28 PM 17 0.00 0.00 0.00 0.00 3 ksoftirqd/3
  21. 05:29:28 PM 18 0.00 0.00 0.00 0.00 3 watchdog/3
  22. 05:29:28 PM 19 0.00 0.00 0.00 0.00 4 migration/4
  23. 05:29:28 PM 21 0.00 0.00 0.00 0.00 4 ksoftirqd/4
  24. 05:29:28 PM 22 0.00 0.00 0.00 0.00 4 watchdog/4
  25. 05:29:28 PM 23 0.00 0.00 0.00 0.00 5 migration/5
  26. 05:29:28 PM 25 0.00 0.00 0.00 0.00 5 ksoftirqd/5
  27. 05:29:28 PM 26 0.00 0.00 0.00 0.00 5 watchdog/5
  28. 详细说明
  29. PID:进程ID
  30. %usr:进程在用户空间占用cpu的百分比
  31. %system:进程在内核空间占用cpu的百分比
  32. %guest:进程在虚拟机占用cpu的百分比
  33. %CPU:进程占用cpu的百分比
  34. CPU:处理进程的cpu编号
  35. Command:当前进程对应的命令
  36. 示例二: cpu使用情况统计(-u)
  37. pidstat -u
  38. 使用-u选项,pidstat将显示各活动进程的cpu使用统计,执行”pidstat -u”与单独执行”pidstat”的效果一样。
  39. 示例三: 内存使用情况统计(-r)
  40. pidstat -r
  41. 使用-r选项,pidstat将显示各活动进程的内存使用统计:
  42. [root@VM_2_4_centos ~]# pidstat -r
  43. Linux 2.6.32-696.6.3.el6.x86_64 (VM_2_4_centos) 06/20/2019 _x86_64_ (8 CPU)
  44. 05:30:53 PM PID minflt/s majflt/s VSZ RSS %MEM Command
  45. 05:30:53 PM 1 0.00 0.00 21392 652 0.00 init
  46. 05:30:53 PM 526 0.00 0.00 12848 576 0.00 udevd
  47. 05:30:53 PM 832 0.00 0.00 6120 88 0.00 agetty
  48. 05:30:53 PM 980 0.00 0.00 95244 720 0.00 auditd
  49. 05:30:53 PM 996 0.00 0.00 254004 5476 0.02 rsyslogd
  50. 05:30:53 PM 1048 0.02 0.00 592936 18728 0.06 YDService
  51. 05:30:53 PM 1097 0.00 0.00 23448 240 0.00 dbus-daemon
  52. 05:30:53 PM 1126 0.00 0.00 6124 112 0.00 acpid
  53. 05:30:53 PM 1236 0.01 0.00 82992 1088 0.00 master
  54. 05:30:53 PM 1242 0.00 0.00 102040 4052 0.01 sshd
  55. 05:30:53 PM 1251 0.00 0.00 110712 2260 0.01 bash
  56. 05:30:53 PM 1254 0.30 0.00 118452 1028 0.00 crond
  57. 05:30:53 PM 1263 0.00 0.00 83244 1460 0.00 qmgr
  58. 05:30:53 PM 1271 0.00 0.00 23120 216 0.00 atd
  59. 05:30:53 PM 1384 0.00 0.00 6108 88 0.00 mingetty
  60. 05:30:53 PM 1386 0.00 0.00 6108 96 0.00 mingetty
  61. 05:30:53 PM 1388 0.00 0.00 6108 92 0.00 mingetty
  62. 05:30:53 PM 1390 0.00 0.00 6108 92 0.00 mingetty
  63. 05:30:53 PM 1392 0.00 0.00 6108 2128 0.01 mingetty
  64. 05:30:53 PM 1394 0.00 0.00 6108 88 0.00 mingetty
  65. 05:30:53 PM 6722 0.00 0.00 149772 7564 0.02 barad_agent
  66. 05:30:53 PM 6726 0.14 0.00 152684 9320 0.03 barad_agent
  67. PID:进程标识符
  68. Minflt/s:任务每秒发生的次要错误,不需要从磁盘中加载页
  69. Majflt/s:任务每秒发生的主要错误,需要从磁盘中加载页
  70. VSZ:虚拟地址大小,虚拟内存的使用KB
  71. RSS:常驻集合大小,非交换区五里内存使用KB
  72. Command:task命令名
  73. 示例四:显示各个进程的IO使用情况(-d)
  74. pidstat -d
  75. [root@VM_2_4_centos ~]# pidstat -d
  76. Linux 2.6.32-696.6.3.el6.x86_64 (VM_2_4_centos) 06/20/2019 _x86_64_ (8 CPU)
  77. 05:31:26 PM PID kB_rd/s kB_wr/s kB_ccwr/s Command
  78. 05:31:26 PM 1 1.79 15.40 0.33 init
  79. 05:31:26 PM 127 0.00 0.00 0.00 khugepaged
  80. 05:31:26 PM 438 0.00 2.11 0.00 kjournald
  81. 05:31:26 PM 526 0.00 0.00 0.00 udevd
  82. 05:31:26 PM 790 0.00 1.85 0.00 kjournald
  83. 05:31:26 PM 832 0.00 0.00 0.00 agetty
  84. 05:31:26 PM 980 0.00 0.46 0.00 auditd
  85. 05:31:26 PM 996 0.00 0.17 0.00 rsyslogd
  86. 05:31:26 PM 1048 0.00 0.00 0.00 YDService
  87. 05:31:26 PM 1126 0.00 0.00 0.00 acpid
  88. 05:31:26 PM 1236 0.00 0.00 0.00 master
  89. 05:31:26 PM 1242 0.00 0.00 0.00 sshd
  90. 05:31:26 PM 1251 0.00 0.00 0.00 bash
  91. 05:31:26 PM 1254 0.00 0.00 0.00 crond
  92. 05:31:26 PM 1263 0.00 0.00 0.00 qmgr
  93. 05:31:26 PM 1271 0.00 0.00 0.00 atd
  94. 05:31:26 PM 1384 0.00 0.00 0.00 mingetty
  95. 05:31:26 PM 1392 0.00 0.00 0.00 mingetty
  96. 05:31:26 PM 6722 0.00 0.00 0.00 barad_agent
  97. 05:31:26 PM 6726 0.00 0.01 0.00 barad_agent
  98. 报告IO统计显示以下信息:
  99. PID:进程id
  100. kB_rd/s:每秒从磁盘读取的KB
  101. kB_wr/s:每秒写入磁盘KB
  102. kB_ccwr/s:任务取消的写入磁盘的KB。当任务截断脏的pagecache的时候会发生。
  103. COMMAND:task的命令名
  104. 示例五:显示每个进程的上下文切换情况(-w)
  105. [root@VM_2_4_centos ~]# pidstat -w -p 10154
  106. Linux 2.6.32-696.6.3.el6.x86_64 (VM_2_4_centos) 06/20/2019 _x86_64_ (8 CPU)
  107. 05:32:37 PM PID cswch/s nvcswch/s Command
  108. 05:32:37 PM 10154 0.00 0.00 zabbix_agentd
  109. PID:进程id
  110. Cswch/s:每秒主动任务上下文切换数量
  111. Nvcswch/s:每秒被动任务上下文切换数量
  112. Command:命令名
  113. 示例六:显示选择任务的线程的统计信息外的额外信息 (-t)
  114. [root@VM_2_4_centos ~]# pidstat -t -p 10154
  115. Linux 2.6.32-696.6.3.el6.x86_64 (VM_2_4_centos) 06/20/2019 _x86_64_ (8 CPU)
  116. 05:33:21 PM TGID TID %usr %system %guest %CPU CPU Command
  117. 05:33:21 PM 10154 - 0.00 0.00 0.00 0.00 2 zabbix_agentd
  118. 05:33:21 PM - 10154 0.00 0.00 0.00 0.00 2 |__zabbix_agentd
  119. TGID:主线程的表示
  120. TID:线程id
  121. %usr:进程在用户空间占用cpu的百分比
  122. %system:进程在内核空间占用cpu的百分比
  123. %guest:进程在虚拟机占用cpu的百分比
  124. %CPU:进程占用cpu的百分比
  125. CPU:处理进程的cpu编号
  126. Command:当前进程对应的命令
  127. 示例七:pidstat -T
  128. pidstat -T TASK
  129. pidstat -T CHILD
  130. pidstat -T ALL
  131. TASK表示报告独立的task。
  132. CHILD关键字表示报告进程下所有线程统计信息。
  133. ALL表示报告独立的task和task下面的所有线程。
  134. 注意:task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。
  135. [root@VM_2_4_centos ~]# pidstat -T ALL -p 10154
  136. Linux 2.6.32-696.6.3.el6.x86_64 (VM_2_4_centos) 06/20/2019 _x86_64_ (8 CPU)
  137. 05:34:13 PM PID %usr %system %guest %CPU CPU Command
  138. 05:34:13 PM 10154 0.00 0.00 0.00 0.00 2 zabbix_agentd
  139. 05:34:13 PM PID usr-ms system-ms guest-ms Command
  140. 05:34:13 PM 10154 0 0 0 zabbix_agentd
  141. PID:进程id
  142. Usr-ms:任务和子线程在用户级别使用的毫秒数。
  143. System-ms:任务和子线程在系统级别使用的毫秒数。
  144. Guest-ms:任务和子线程在虚拟机(running a virtual processor)使用的毫秒数。
  145. Command:命令名

sar

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  输出的段

kill

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):正常停止一个进程。

  1. 杀死进程
  2. # kill 12345
  3. 强制杀死进程
  4. # kill -KILL 123456
  5. 发送SIGHUP信号,可以使用一下信号
  6. # kill -HUP pid
  7. 彻底杀死进程
  8. # kill -9 123456
  9. 显示信号
  10. # kill -l
  11. 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
  12. 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
  13. 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
  14. 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
  15. 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
  16. 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
  17. 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
  18. 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
  19. 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
  20. 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
  21. 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
  22. 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
  23. 63) SIGRTMAX-1 64) SIGRTMAX
  24. 杀死指定用户所有进程
  25. #kill -9 $(ps -ef | grep hnlinux) //方法一 过滤出hnlinux用户进程
  26. #kill -u hnlinux //方法二

内存相关命令

free

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  显示版本信息。

  1. 显示内存使用情况
  2. # free //显示内存使用信息
  3. total used free shared buffers cached
  4. Mem: 254772 184568 70204 0 5692 89892
  5. -/+ buffers/cache: 88984 165788
  6. Swap: 524280 65116 459164
  7. 以总和的形式显示内存的使用信息
  8. # free -t //以总和的形式查询内存的使用信息
  9. total used free shared buffers cached
  10. Mem: 254772 184868 69904 0 5936 89908
  11. -/+ buffers/cache: 89024 165748
  12. Swap: 524280 65116 459164
  13. Total: 779052 249984 529068
  14. 周期性的查询内存使用信息
  15. # free -s 10 //10s 执行一次命令
  16. total used free shared buffers cached
  17. Mem: 254772 187628 67144 0 6140 89964
  18. -/+ buffers/cache: 91524 163248
  19. Swap: 524280 65116 459164
  20. total used free shared buffers cached
  21. Mem: 254772 187748 67024 0 6164 89940
  22. -/+ buffers/cache: 91644 163128
  23. Swap: 524280 65116 459164

pmap

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. 查看进程1的设备格式
  2. [root@C44 ~]#  pmap -d 1
  3. 1:  init [5]                   
  4. Address  Kbytes Mode  Offset           Device    Mapping
  5. 00934000      88 r-x-- 0000000000000000 008:00005ld-2.3.4.so
  6. 0094a000       4 r---- 0000000000015000 008:00005ld-2.3.4.so
  7. 0094b000       4 rw--- 0000000000016000 008:00005ld-2.3.4.so
  8. 0094e000   1188 r-x-- 0000000000000000 008:00005 libc-2.3.4.so
  9. 00a77000       8 r---- 0000000000129000 008:00005libc-2.3.4.so
  10. 00a79000       8 rw--- 000000000012b000 008:00005libc-2.3.4.so
  11. 00a7b000       8 rw--- 0000000000a7b000 000:00000   [ anon ]
  12. 00a85000      52 r-x-- 0000000000000000 008:00005libsepol.so.1
  13. 00a92000       4 rw--- 000000000000c000 008:00005libsepol.so.1
  14. 00a93000      32 rw--- 0000000000a93000 000:00000   [ anon ]
  15. 00d9d000      52 r-x-- 0000000000000000 008:00005libselinux.so.1
  16. 00daa000       4 rw--- 000000000000d000 008:00005libselinux.so.1
  17. 08048000      28 r-x-- 0000000000000000 008:00005 init
  18. 0804f000       4 rw--- 0000000000007000 008:00005 init
  19. 084e1000    132 rw--- 00000000084e1000 000:00000  [ anon ]
  20. b7f5d000       8 rw--- 00000000b7f5d000 000:00000   [ anon ]
  21. bffee000      72 rw--- 00000000bffee000 000:00000   [ stack ]
  22. ffffe000       4 ----- 0000000000000000 000:00000   [ anon ]
  23. mapped: 1700K    writeable/private: 276K    shared: 0K
  24. [root@C44 ~]# 
  25. 最后一行的值
  26. mapped 表示该进程映射的虚拟地址空间大小,也就是该进程预先分配的虚拟内存大小,即ps出的vsz
  27. writeable/private  表示进程所占用的私有地址空间大小,也就是该进程实际使用的内存大小     
  28. shared 表示进程和其他进程共享的内存大小
  29. 查看进程1的设备格式,不显示头尾行
  30. [root@C44 ~]#  pmap -d -q 1
  31. 1:  init [5]                   
  32. 00934000      88 r-x-- 0000000000000000 008:00005ld-2.3.4.so
  33. 0094a000       4 r---- 0000000000015000 008:00005ld-2.3.4.so
  34. 0094b000       4 rw--- 0000000000016000 008:00005ld-2.3.4.so
  35. 0094e000   1188 r-x-- 0000000000000000 008:00005 libc-2.3.4.so
  36. 00a77000       8 r---- 0000000000129000 008:00005libc-2.3.4.so
  37. 00a79000       8 rw--- 000000000012b000 008:00005libc-2.3.4.so
  38. 00a7b000       8 rw--- 0000000000a7b000 000:00000   [ anon ]
  39. 00a85000      52 r-x-- 0000000000000000 008:00005libsepol.so.1
  40. 00a92000       4 rw--- 000000000000c000 008:00005libsepol.so.1
  41. 00a93000      32 rw--- 0000000000a93000 000:00000   [ anon ]
  42. 00d9d000      52 r-x-- 0000000000000000 008:00005libselinux.so.1
  43. 00daa000       4 rw--- 000000000000d000 008:00005libselinux.so.1
  44. 08048000      28 r-x-- 0000000000000000 008:00005 init
  45. 0804f000      4 rw--- 0000000000007000008:00005 init
  46. 084e1000    132 rw--- 00000000084e1000 000:00000  [ anon ]
  47. b7f5d000       8 rw--- 00000000b7f5d000 000:00000   [ anon ]
  48. bffee000      72 rw--- 00000000bffee000 000:00000   [ stack ]
  49. ffffe000       4 ----- 0000000000000000 000:00000   [ anon ]
  50. [root@C44 ~]# 
  51. 查看进程1的扩展格式
  52. [root@C44 ~]#  pmap -x 1
  53. 1:  init [5]                   
  54. Address  Kbytes     RSS    Anon Locked Mode   Mapping
  55. 00934000      88      -       -       - r-x-- ld-2.3.4.so
  56. 0094a000       4      -       -       - r---- ld-2.3.4.so
  57. 0094b000       4      -       -       - rw--- ld-2.3.4.so
  58. 0094e000   1188       -       -      - r-x--  libc-2.3.4.so
  59. 00a77000       8      -       -       - r---- libc-2.3.4.so
  60. 00a79000       8      -       -       - rw--- libc-2.3.4.so
  61. 00a7b000       8      -       -       - rw---    [ anon ]
  62. 00a85000      52      -       -       - r-x-- libsepol.so.1
  63. 00a92000       4      -       -       - rw--- libsepol.so.1
  64. 00a93000     32       -      -       - rw---    [ anon ]
  65. 00d9d000      52      -       -       - r-x-- libselinux.so.1
  66. 00daa000       4      -       -       - rw--- libselinux.so.1
  67. 08048000      28      -       -       - r-x-- init
  68. 0804f000       4      -       -      - rw---  init
  69. 084e1000    132       -       -      - rw---    [ anon ]
  70. b7f5d000       8      -       -       - rw---    [ anon ]
  71. bffee000      72      -       -       - rw---    [ stack ]
  72. ffffe000       4      -       -       - -----    [ anon ]
  73. -------- ------- ------- ------- -------
  74. total kB   1700       -       -      -
  75. [root@C44 ~]# 
  76. 循环显示进程3066的设备格式的最后1行,间隔2秒,
  77. [root@C44 ~]#  while true; do pmap -d  3066 | tail -1; sleep 2; done
  78. mapped: 5412K    writeable/private: 2028K    shared: 0K
  79. mapped: 5412K    writeable/private: 2028K    shared: 0K
  80. mapped: 5412K    writeable/private: 2028K    shared: 0K
  81. mapped: 5412K    writeable/private: 2028K    shared: 0K
  82. mapped: 5412K    writeable/private: 2028K    shared: 0K
  83. mapped: 5412K    writeable/private: 2028K    shared: 0K
  84. mapped: 5412K    writeable/private: 2028K    shared: 0K
  85. mapped: 5412K    writeable/private: 2028K    shared: 0K
  86. mapped: 5412K    writeable/private: 2028K    shared: 0K
  87. mapped: 5412K    writeable/private: 2028K    shared: 0K
  88. mapped: 5412K    writeable/private: 2028K    shared: 0K
  89. mapped: 5412K    writeable/private: 2028K    shared: 0K
  90. mapped: 5412K    writeable/private: 2028K    shared: 0K

IO相关命令

df

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 输出版本资讯并且离开

  1. 显示文件系统的磁盘使用情况统计:
  2. # df
  3. Filesystem 1K-blocks Used Available Use% Mounted on
  4. /dev/sda6 29640780 4320704 23814388 16% /
  5. udev 1536756 4 1536752 1% /dev
  6. tmpfs 617620 888 616732 1% /run
  7. none 5120 0 5120 0% /run/lock
  8. none 1544044 156 1543888 1% /run/shm
  9. 第一列指定文件系统的名称,第二列指定一个特定的文件系统1K-块1K是1024字节为单位的总内存。用和可用列正在使用中,分别指定的内存量。
  10. 使用列指定使用的内存的百分比,而最后一栏"安装在"指定的文件系统的挂载点。
  11. df也可以显示磁盘使用的文件系统信息:
  12. # df test
  13. Filesystem 1K-blocks Used Available Use% Mounted on
  14. /dev/sda6 29640780 4320600 23814492 16% /
  15. 用一个-i选项的df命令的输出显示inode信息而非块使用量。
  16. df -i
  17. Filesystem Inodes IUsed IFree IUse% Mounted on
  18. /dev/sda6 1884160 261964 1622196 14% /
  19. udev 212748 560 212188 1% /dev
  20. tmpfs 216392 477 215915 1% /run
  21. none 216392 3 216389 1% /run/lock
  22. none 216392 8 216384 1% /run/shm
  23. 显示所有的信息:
  24. # df --total
  25. Filesystem 1K-blocks Used Available Use% Mounted on
  26. /dev/sda6 29640780 4320720 23814372 16% /
  27. udev 1536756 4 1536752 1% /dev
  28. tmpfs 617620 892 616728 1% /run
  29. none 5120 0 5120 0% /run/lock
  30. none 1544044 156 1543888 1% /run/shm
  31. total 33344320 4321772 27516860 14%
  32. 我们看到输出的末尾,包含一个额外的行,显示总的每一列。
  33. -h选项,通过它可以产生可读的格式df命令的输出:
  34. # df -h
  35. Filesystem Size Used Avail Use% Mounted on
  36. /dev/sda6 29G 4.2G 23G 16% /
  37. udev 1.5G 4.0K 1.5G 1% /dev
  38. tmpfs 604M 892K 603M 1% /run
  39. none 5.0M 0 5.0M 0% /run/lock
  40. none 1.5G 156K 1.5G 1% /run/shm
  41. 我们可以看到输出显示的数字形式的'G'(千兆字节),"M"(兆字节)和"K"(千字节)。
  42. 这使输出容易阅读和理解,从而使显示可读的。请注意,第二列的名称也发生了变化,为了使显示可读的"大小"

网络相关命令

netstat

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. 1. 列出所有端口 (包括监听和未监听的)
  2. 列出所有端口 netstat -a
  3. # netstat -a | more
  4. Active Internet connections (servers and established)
  5. Proto Recv-Q Send-Q Local Address Foreign Address State
  6. tcp 0 0 localhost:30037 *:* LISTEN
  7. udp 0 0 *:bootpc *:*
  8. Active UNIX domain sockets (servers and established)
  9. Proto RefCnt Flags Type State I-Node Path
  10. unix 2 [ ACC ] STREAM LISTENING 6135 /tmp/.X11-unix/X0
  11. unix 2 [ ACC ] STREAM LISTENING 5140 /var/run/acpid.socket
  12. 列出所有 tcp 端口 netstat -at
  13. # netstat -at
  14. Active Internet connections (servers and established)
  15. Proto Recv-Q Send-Q Local Address Foreign Address State
  16. tcp 0 0 localhost:30037 *:* LISTEN
  17. tcp 0 0 localhost:ipp *:* LISTEN
  18. tcp 0 0 *:smtp *:* LISTEN
  19. tcp6 0 0 localhost:ipp [::]:* LISTEN
  20. 列出所有 udp 端口 netstat -au
  21. # netstat -au
  22. Active Internet connections (servers and established)
  23. Proto Recv-Q Send-Q Local Address Foreign Address State
  24. udp 0 0 *:bootpc *:*
  25. udp 0 0 *:49119 *:*
  26. udp 0 0 *:mdns *:*
  27. 2. 列出所有处于监听状态的 Sockets
  28. 只显示监听端口 netstat -l
  29. # netstat -l
  30. Active Internet connections (only servers)
  31. Proto Recv-Q Send-Q Local Address Foreign Address State
  32. tcp 0 0 localhost:ipp *:* LISTEN
  33. tcp6 0 0 localhost:ipp [::]:* LISTEN
  34. udp 0 0 *:49119 *:*
  35. 只列出所有监听 tcp 端口 netstat -lt
  36. # netstat -lt
  37. Active Internet connections (only servers)
  38. Proto Recv-Q Send-Q Local Address Foreign Address State
  39. tcp 0 0 localhost:30037 *:* LISTEN
  40. tcp 0 0 *:smtp *:* LISTEN
  41. tcp6 0 0 localhost:ipp [::]:* LISTEN
  42. 只列出所有监听 udp 端口 netstat -lu
  43. # netstat -lu
  44. Active Internet connections (only servers)
  45. Proto Recv-Q Send-Q Local Address Foreign Address State
  46. udp 0 0 *:49119 *:*
  47. udp 0 0 *:mdns *:*
  48. 只列出所有监听 UNIX 端口 netstat -lx
  49. # netstat -lx
  50. Active UNIX domain sockets (only servers)
  51. Proto RefCnt Flags Type State I-Node Path
  52. unix 2 [ ACC ] STREAM LISTENING 6294 private/maildrop
  53. unix 2 [ ACC ] STREAM LISTENING 6203 public/cleanup
  54. unix 2 [ ACC ] STREAM LISTENING 6302 private/ifmail
  55. unix 2 [ ACC ] STREAM LISTENING 6306 private/bsmtp
  56. 3. 显示每个协议的统计信息
  57. 显示所有端口的统计信息 netstat -s
  58. # netstat -s
  59. Ip:
  60. 11150 total packets received
  61. 1 with invalid addresses
  62. 0 forwarded
  63. 0 incoming packets discarded
  64. 11149 incoming packets delivered
  65. 11635 requests sent out
  66. Icmp:
  67. 0 ICMP messages received
  68. 0 input ICMP message failed.
  69. Tcp:
  70. 582 active connections openings
  71. 2 failed connection attempts
  72. 25 connection resets received
  73. Udp:
  74. 1183 packets received
  75. 4 packets to unknown port received.
  76. .....
  77. 显示 TCP 或 UDP 端口的统计信息 netstat -st 或 -su
  78. # netstat -st
  79. # netstat -su
  80. 4. 在 netstat 输出中显示 PID 和进程名称 netstat -p
  81. netstat -p 可以与其它开关一起使用,就可以添加 “PID/进程名称” 到 netstat 输出中,这样 debugging 的时候可以很方便的发现特定端口运行的程序。
  82. # netstat -pt
  83. Active Internet connections (w/o servers)
  84. Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
  85. tcp 1 0 ramesh-laptop.loc:47212 192.168.185.75:www CLOSE_WAIT 2109/firefox
  86. tcp 0 0 ramesh-laptop.loc:52750 lax:www ESTABLISHED 2109/firefox
  87. 5. 在 netstat 输出中不显示主机,端口和用户名 (host, port or user)
  88. 当你不想让主机,端口和用户名显示,使用 netstat -n。将会使用数字代替那些名称。
  89. 同样可以加速输出,因为不用进行比对查询。
  90. # netstat -an
  91. 如果只是不想让这三个名称中的一个被显示,使用以下命令
  92. # netsat -a --numeric-ports
  93. # netsat -a --numeric-hosts
  94. # netsat -a --numeric-users
  95. 6. 持续输出 netstat 信息
  96. netstat 将每隔一秒输出网络信息。
  97. # netstat -c
  98. Active Internet connections (w/o servers)
  99. Proto Recv-Q Send-Q Local Address Foreign Address State
  100. tcp 0 0 ramesh-laptop.loc:36130 101-101-181-225.ama:www ESTABLISHED
  101. tcp 1 1 ramesh-laptop.loc:52564 101.11.169.230:www CLOSING
  102. tcp 0 0 ramesh-laptop.loc:43758 server-101-101-43-2:www ESTABLISHED
  103. tcp 1 1 ramesh-laptop.loc:42367 101.101.34.101:www CLOSING
  104. ^C
  105. 7. 显示系统不支持的地址族 (Address Families)
  106. netstat --verbose
  107. 在输出的末尾,会有如下的信息
  108. netstat: no support for `AF IPX' on this system.
  109. netstat: no support for `AF AX25' on this system.
  110. netstat: no support for `AF X25' on this system.
  111. netstat: no support for `AF NETROM' on this system.
  112. 8. 显示核心路由信息 netstat -r
  113. # netstat -r
  114. Kernel IP routing table
  115. Destination Gateway Genmask Flags MSS Window irtt Iface
  116. 192.168.1.0 * 255.255.255.0 U 0 0 0 eth2
  117. link-local * 255.255.0.0 U 0 0 0 eth2
  118. default 192.168.1.1 0.0.0.0 UG 0 0 0 eth2
  119. 注意: 使用 netstat -rn 显示数字格式,不查询主机名称。
  120. 9. 找出程序运行的端口
  121. 并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。
  122. # netstat -ap | grep ssh
  123. tcp 1 0 dev-db:ssh 101.174.100.22:39213 CLOSE_WAIT -
  124. tcp 1 0 dev-db:ssh 101.174.100.22:57643 CLOSE_WAIT -
  125. 找出运行在指定端口的进程
  126. # netstat -an | grep ':80'
  127. 10. 显示网络接口列表
  128. # netstat -i
  129. Kernel Interface table
  130. Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
  131. eth0 1500 0 0 0 0 0 0 0 0 0 BMU
  132. eth2 1500 0 26196 0 0 0 26883 6 0 0 BMRU
  133. lo 16436 0 4 0 0 0 4 0 0 0 LRU
  134. 显示详细信息,像是 ifconfig 使用 netstat -ie:
  135. # netstat -ie
  136. Kernel Interface table
  137. eth0 Link encap:Ethernet HWaddr 00:10:40:11:11:11
  138. UP BROADCAST MULTICAST MTU:1500 Metric:1
  139. RX packets:0 errors:0 dropped:0 overruns:0 frame:0
  140. TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
  141. collisions:0 txqueuelen:1000
  142. RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
  143. Memory:f6ae0000-f6b00000
  144. 11. IP和TCP分析
  145. 查看连接某服务端口最多的的IP地址
  146. wss8848@ubuntu:~$ netstat -nat | grep "192.168.1.15:22" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -20
  147. 18 221.136.168.36
  148. 3 154.74.45.242
  149. 2 78.173.31.236
  150. 2 62.183.207.98
  151. 2 192.168.1.14
  152. 2 182.48.111.215
  153. 2 124.193.219.34
  154. 2 119.145.41.2
  155. 2 114.255.41.30
  156. 1 75.102.11.99
  157. TCP各种状态列表
  158. wss8848@ubuntu:~$ netstat -nat |awk '{print $6}'
  159. established)
  160. Foreign
  161. LISTEN
  162. TIME_WAIT
  163. ESTABLISHED
  164. TIME_WAIT
  165. SYN_SENT
  166. 先把状态全都取出来,然后使用uniq -c统计,之后再进行排序。
  167. wss8848@ubuntu:~$ netstat -nat |awk '{print $6}'|sort|uniq -c
  168. 143 ESTABLISHED
  169. 1 FIN_WAIT1
  170. 1 Foreign
  171. 1 LAST_ACK
  172. 36 LISTEN
  173. 6 SYN_SENT
  174. 113 TIME_WAIT
  175. 1 established)
  176. 最后的命令如下:
  177. netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn
  178. 分析access.log获得访问前10位的ip地址
  179. awk '{print $1}' access.log |sort|uniq -c|sort -nr|head -10
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/224873
推荐阅读
相关标签
  

闽ICP备14008679号