Linux 性能监控之命令行工具
引言
对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作。这些命令行工具可以在各种Linux系统下使用,可以用于监控和查找产生性能问题的原因。这个命令行工具列表提供了足够的工具,您可以挑选适用于您的监控场景的工具。
1. lsof - 列出打开的文件
在许多Linux或者类Unix系统里都有lsof命令,它常用于以列表的形式显示所有打开的文件和进程。打开的文件包括磁盘文件、网络套接字、管道、设备和进程。使用这条命令的主要情形之一就是在无法挂载磁盘和显示正在使用或者打开某个文件的错误信息的时候。
常用的参数列表:
lsof -a 表示两个参数都必须满足时才显示结果
lsof -c string 显示COMMAND列中包含指定字符的进程所有打开的文件
lsof -u username 显示所属user进程打开的文件
lsof -g gid 显示归属gid的进程情况
lsof +d /DIR/ 显示目录下被进程打开的文件
lsof +D /DIR/ 同上,但是会搜索目录下的所有目录,时间相对较长
lsof -d FD 显示指定文件描述符的进程
lsof -n 不将IP转换为hostname,缺省是不加上-n参数
lsof -i 用以显示符合条件的进程情况
[root@CentOS7 ~]# lsof -i :
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd root 3u IPv4 0t0 TCP *:ssh (LISTEN)
sshd root 4u IPv6 0t0 TCP *:ssh (LISTEN)
sshd root 3u IPv4 0t0 TCP CentOS7.:ssh->192.168.56.1: (ESTABLISHED)
[root@CentOS7 ~]# lsof -a -u root -d txt
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd root txt REG , /usr/lib/systemd/systemd
kthreadd root txt unknown /proc//exe
ksoftirqd root txt unknown /proc//exe
migration root txt unknown /proc//exe
rcu_bh root txt unknown /proc//exe
2. top - 进程活动
常用热键
t:显示摘要信息开关
top - :: up days, :, users, load average: 0.00, 0.01, 0.05
Tasks: total, running, sleeping, stopped, zombie
%Cpu(s): 0.3/0.7 [| ]
KiB Mem : total, free, used, buff/cache
KiB Swap: total, free, used. avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
root S 0.3 0.0 :09.05 kworker/:
root R 0.3 0.4 :02.25 top
root S 0.3 7.7 :39.63 firefox
root S 0.0 0.8 :27.20 systemd
root S 0.0 0.0 :02.22 kthreadd
root S 0.0 0.0 :11.69 ksoftirqd/
root rt S 0.0 0.0 :00.00 migration/
root S 0.0 0.0 :00.00 rcu_bh
root S 0.0 0.0 :00.00 rcuob/
root S 0.0 0.0 :09.07 rcu_sched
root S 0.0 0.0 :11.36 rcuos/
root rt S 0.0 0.0 :03.03 watchdog/
root - S 0.0 0.0 :00.00 khelper
root S 0.0 0.0 :00.00 kdevtmpfs
root - S 0.0 0.0 :00.00 netns
root - S 0.0 0.0 :00.00 perf
top - :: up days, :, users, load average: 0.00, 0.01, 0.05
Tasks: total, running, sleeping, stopped, 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 : 60.0/ [|||||||||||||||||||||||||||||||||||||||||||||| ]
KiB Swap: 6.4/ [||||| ]
:Def - :: up days, :, users, load average: 0.00, 0.01, 0.05
Tasks: total, running, sleeping, stopped, zombie
%Cpu(s): 0.7 us, 0.7 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : total, free, used, buff/cache
KiB Swap: total, free, used. avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
root S 0.3 2.2 :28.34 daomonit
root R 0.3 0.4 :03.00 top
root S 0.0 0.8 :27.20 systemd
PID PPID TIME+ %CPU %MEM PR NI S VIRT RES UID COMMAND
:03.29 0.0 0.0 - S kworker/:2H
:00.04 0.0 0.3 S gvfsd-metadata
:40.25 0.0 7.7 S firefox
PID %MEM VIRT RES CODE DATA SHR nMaj nDRT %CPU COMMAND
10.7 26k 0.0 gnome-shell
7.7 46k 0.0 firefox
3.2 0.0 dhclient
PID PPID UID USER RUSER TTY TIME+ %CPU %MEM S COMMAND
rtkit rtkit ? :03.06 0.0 0.1 S rtkit-daemon
root root ? :27.20 0.0 0.8 S systemd
root root ? :02.22 0.0 0.0 S kthreadd
root root ? :11.70 0.0 0.0 S ksoftirqd/
f:添加删除所要显示栏位
Fields Management for window :Def, whose current sort field is PPID
Navigate with Up/Dn, Right selects for move then <Enter> or Left commits,
'd' or <Space> toggles display, 's' sets sort. Use 'q' or <Esc> to end! * PID = Process Id GROUP = Group Name TGID = Thread Group Id
* USER = Effective User Name PGRP = Process Group Id ENVIRON = Environment vars* PR = Priority TTY = Controlling Tty vMj = Major Faults delta
* NI = Nice Value TPGID = Tty Process Grp Id vMn = Minor Faults delta
* VIRT = Virtual Image (KiB) SID = Session Id USED = Res+Swap Size (KiB)
* RES = Resident Size (KiB) nTH = Number of Threads nsIPC=IPC namespace Inode
* SHR = Shared Memory (KiB) P = Last Used Cpu (SMP) nsMNT = MNT namespace Inode
* S = Process Status TIME = CPU Time nsNET = NET namespace Inode
* %MEM = Memory Usage (RES) SWAP = Swapped Size (KiB) nsPID=PID namespace Inode
* TIME+ = CPU Time, hundredths CODE = Code Size (KiB) nsUSER=USER namespace Inode
* COMMAND = Command Name/Line DATA = Data+Stack (KiB) nsUTS= UTS namespace Inode
* %CPU = CPU Usage nMaj = Major Page Faults
PPID = Parent Process pid nMin = Minor Page Faults
UID = Effective User Id nDRT = Dirty Pages Count
RUID = Real User Id WCHAN = Sleeping in Function
RUSER = Real User Name Flags = Task Flags <sched.h>
SUID = Saved User Id CGROUPS = Control Groups
SUSER = Saved User Name SUPGIDS = Supp Groups IDs
GID = Group Id SUPGRPS = Supp Groups Names
PID to renice [default pid = ]
k:结束一个正在运行的进程
PID to signal/kill [default pid = ]
z:彩色/黑白显示开关
3. vmstat -系统活动、硬件及系统信息
swpd:虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。free:空闲的物理内存的大小,我的机器内存总共8G,剩余3415M。
buff:Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用300多M
bi:块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到140000/s,磁盘写入速度差不多140M每秒。
cs:每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。
id:空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。
[root@CentOS7 ~]# vmstat -m
Cache Num Total Size Pages
fuse_inode
nf_conntrack_ffff88001a2d8000
nf_conntrack_ffffffff81a25e00
kcopyd_job
dm_uevent
dm_rq_target_io
[root@CentOS7 ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
4. w - 显示谁已登录
[root@CentOS7 ~]# w root
:: up days, :, users, load average: 0.05, 0.12, 0.13
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root : : Sat23 ?xdm? :08m .65s gdm-session-worker [pam/gdm-password]
root pts/ 192.168.56.1 Sun22 :35m .61s .00s lsof
root pts/ 192.168.56.1 : .00s .20s .01s w root
5. uptime - 告诉系统已经运行了多久
[root@CentOS7 ~]# uptime
:: up days, :, users, load average: 0.06, 0.08, 0.12
系统平均负载被定义为在特定时间间隔内运行队列中的平均进程树。如果一个进程满足以下条件则其就会位于运行队列中:
它没有在等待I/O操作的结果
它没有主动进入等待状态(也就是没有调用'wait')
没有被停止(例如:等待终止)
一般来说,每个CPU内核当前活动进程数不大于3,则系统运行表现良好!当然这里说的是每个cpu内核,也就是如果你的主机是四核cpu的话,那么只要uptime最后输出的一串字符数值小于12即表示系统负载不是很严重。当然如果达到20,那就表示当前系统负载非常严重。
6. ps - 显示进程
要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而 ps 命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。
ps为我们提供了进程的一次性的查看,它所提供的查看结果并不动态连续的;如果想对进程时间监控,应该用 top 工具。
2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)
D 不可中断 uninterruptible sleep (usually IO)
R 运行 runnable (on run queue) S 中断 sleeping T 停止 traced or stopped Z 僵死 a defunct (”zombie”) process
[root@CentOS7 ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
S - wait pts/ :: bash
R - - pts/ :: ps
[root@CentOS7 ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 0.0 0.8 ? Ss May20 : /usr/lib/systemd/systemd
root 0.0 0.0 ? S May20 : [kthreadd]
root 0.1 0.0 ? S May20 : [ksoftirqd/]
root 0.0 0.0 ? S May20 : [migration/]
root 0.0 0.0 ? S May20 : [rcu_bh]
root 0.0 0.0 ? S May20 : [rcuob/]
root 0.1 0.0 ? S May20 : [rcu_sched]
root 0.3 0.0 ? S May20 : [rcuos/]
root 0.0 0.0 ? S May20 : [watchdog/]
root 0.0 0.0 ? S< May20 : [khelper]
root 0.0 0.0 ? S May20 : [kdevtmpfs]
root 0.0 0.0 ? S< May20 : [netns]
root 0.0 0.0 ? S< May20 : [perf]
[root@CentOS7 ~]# ps -lA
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
S - ep_pol ? :: systemd
S - kthrea ? :: kthreadd
S - smpboo ? :: ksoftirqd/
S - - - smpboo ? :: migration/
S - rcu_gp ? :: rcu_bh
S - rcu_no ? :: rcuob/
S - rcu_gp ? :: rcu_sched
S - rcu_no ? :: rcuos/
S - - - smpboo ? :: watchdog/
S - - rescue ? :: khelper
[root@CentOS7 ~]# ps -axjf
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
? - S : [kthreadd]
? - S : \_ [ksoftirqd/]
? - S : \_ [migration/]
? - S : \_ [rcu_bh]
? - S : \_ [rcuob/]
? - S : \_ [rcu_sched]
? - S : \_ [rcuos/]
[root@CentOS7 ~]# ps aux | egrep '(crypto|bash)'
root 0.0 0.0 ? S< May20 : [crypto]
root 0.0 0.1 ? S May20 : /bin/bash /usr/sbin/ksmtuned
root 0.0 0.6 pts/ Ss : : -bash
root 0.0 0.0 ? Ss May21 : /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "env GNOME_SHELL_SESSION_MODE=classic gnome-session --session gnome-classic"
root 0.0 0.1 pts/ S+ : : grep -E --color=auto (crypto|bash)
7. free - 内存使用情况
[root@CentOS7 ~]# free total used free shared buffers cached
Mem:
-/+ buffers/cache:
Swap:
free输出地第二行和第三行是比较让人迷惑的。这两行都是说明内存使用情况的。第一列是总量(total),第二列是使用量(used),第三列是可用量(free)。
FO[2][4]表示被几个进程共享的内存的,现在已经deprecated,其值总是0(当然在一些系统上也可能不是0,主要取决于free命令是怎么实现的)。FO[2][5]表示被OS buffer住的内存。FO[2][6]表示被OS cache的内存。在有些时候buffer和cache这两个词经常混用。不过在一些比较低层的软件里是要区分这两个词的,看老外的洋文:
free输出的第二行是从一个应用程序的角度看系统内存的使用情况。
因为被系统cache和buffer占用的内存可以被快速回收,所以通常FO[3][3]比FO[2][3]会大很多。
这里还用两个等式:也就是说buffer是用于存放要输出到disk(块设备)的数据的,而cache是存放从disk上读出的数据。这二者是为了提高IO性能的,并由OS管理。
8. iostat - CPU平均负载,硬盘活动
[root@CentOS7 ~]# iostat
Linux 3.10.-.el7.x86_64 (CentOS7.) // _x86_64_ ( CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
5.20 0.00 3.53 3.54 0.00 87.73
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 197.17 6120.99 371.74
[root@CentOS7 ~]# iostat -p sda
Linux 3.10.-.el7.x86_64 (CentOS7.) // _x86_64_ ( CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
5.19 0.00 3.52 3.54 0.00 87.75
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 196.83 6110.31 371.21
sda1 0.01 0.02 0.01
sda2 43.56 438.87 217.75
sda3 152.42 5671.42 153.45
9. mpstat - 多处理器使用率
[root@CentOS7 ~]# mpstat -P ALL
Linux 3.10.-.el7.x86_64 (CentOS7.) // _x86_64_ ( CPU)
:: PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
:: PM all 5.19 0.00 2.70 3.54 0.00 0.81 0.00 0.00 0.00 87.76
:: PM 5.19 0.00 2.70 3.54 0.00 0.81 0.00 0.00 0.00 87.76
10. pmap - 进程的内存使用
[root@CentOS7 ~]# pmap -d
: -bash
Address Kbytes Mode Offset Device Mapping
r-x-- : bash
00000000006dc000 r---- 00000000000dc000 : bash
00000000006dd000 rw--- 00000000000dd000 : bash
00000000006e6000 rw--- : [ anon ]
000000000221d000 rw--- : [ anon ]
00007f7d3fc3d000 r---- : locale-archive
00007f7d46164000 r-x-- : libnss_files-2.17.so
00007f7d4616f000 ----- 000000000000b000 : libnss_files-2.17.so
00007f7d4636e000 r---- 000000000000a000 : libnss_files-2.17.so
00007f7d4636f000 rw--- 000000000000b000 : libnss_files-2.17.so
00007f7d46370000 rw--- : [ anon ]
00007f7d46376000 r-x-- : libc-2.17.so
00007f7d4652c000 ----- 00000000001b6000 : libc-2.17.so
00007f7d4672c000 r---- 00000000001b6000 : libc-2.17.so
00007f7d46730000 rw--- 00000000001ba000 : libc-2.17.so
00007f7d46732000 rw--- : [ anon ]
00007f7d46737000 r-x-- : libdl-2.17.so
00007f7d4673a000 ----- : libdl-2.17.so
00007f7d46939000 r---- : libdl-2.17.so
00007f7d4693a000 rw--- : libdl-2.17.so
00007f7d4693b000 r-x-- : libtinfo.so.5.9
00007f7d46960000 ----- : libtinfo.so.5.9
00007f7d46b60000 r---- : libtinfo.so.5.9
00007f7d46b64000 rw--- : libtinfo.so.5.9
00007f7d46b65000 r-x-- : ld-2.17.so
00007f7d46d6d000 rw--- : [ anon ]
00007f7d46d7c000 rw--- : [ anon ]
00007f7d46d7d000 r--s- : gconv-modules.cache
00007f7d46d84000 rw--- : [ anon ]
00007f7d46d86000 r---- : ld-2.17.so
00007f7d46d87000 rw--- : ld-2.17.so
00007f7d46d88000 rw--- : [ anon ]
00007fffc4354000 rw--- : [ stack ]
00007fffc43e0000 r-x-- : [ anon ]
ffffffffff600000 r-x-- : [ anon ]
mapped: 116688K writeable/private: 1864K shared: 28K
11. netstat和ss - 网络相关信息
[root@CentOS7 ~]# netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 10.0.2.15: ec2----:https ESTABLISHED
tcp 10.0.2.15: 123.59.42.81:https ESTABLISHED
tcp CentOS7.:ssh 192.168.56.1: ESTABLISHED
tcp 10.0.2.15: 123.59.42.81:https ESTABLISHED
tcp 10.0.2.15: 123.59.42.81:https ESTABLISHED
tcp 10.0.2.15: 123.59.42.81:https ESTABLISHED
tcp 10.0.2.15: 123.59.138.92:https ESTABLISHED
tcp 10.0.2.15: 123.59.42.81:https ESTABLISHED
tcp 10.0.2.15: 123.59.42.81:https ESTABLISHED
tcp 10.0.2.15: 123.59.42.81:https ESTABLISHED
tcp 10.0.2.15: 123.59.42.81:https ESTABLISHED
tcp 10.0.2.15: 123.59.42.81:https ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix [ ] DGRAM /run/systemd/notify
unix [ ] DGRAM /run/systemd/journal/socket
unix [ ] DGRAM /dev/log
unix [ ] DGRAM /run/systemd/shutdownd
unix [ ] DGRAM
unix [ ] DGRAM
unix [ ] STREAM CONNECTED
[root@CentOS7 ~]# netstat -at 列出所有 tcp 端口
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 192.168.122.1:domain 0.0.0.0:* LISTEN
tcp 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp localhost:ipp 0.0.0.0:* LISTEN
tcp localhos:x11-ssh-offset 0.0.0.0:* LISTEN
tcp 10.0.2.15: ec2----:https ESTABLISHED
tcp 10.0.2.15: 123.59.42.81:https ESTABLISHED
tcp CentOS7.:ssh 192.168.56.1: ESTABLISHED
tcp 10.0.2.15: 123.59.42.81:https ESTABLISHED
tcp 10.0.2.15: 123.59.42.81:https ESTABLISHED
tcp 10.0.2.15: 123.59.87.202:https ESTABLISHED
tcp 10.0.2.15: 123.59.42.81:https ESTABLISHED
tcp 10.0.2.15: 123.59.42.81:https ESTABLISHED
tcp 10.0.2.15: 123.59.42.81:https ESTABLISHED
tcp 10.0.2.15: 123.59.42.81:https ESTABLISHED
tcp 10.0.2.15: 123.59.42.81:https ESTABLISHED
tcp 10.0.2.15: 123.59.42.81:https ESTABLISHED
tcp6 [::]:ssh [::]:* LISTEN
tcp6 localhost:ipp [::]:* LISTEN
tcp6 localhos:x11-ssh-offset [::]:* LISTEN
[root@CentOS7 ~]# netstat -au 列出所有 udp 端口
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0.0.0.0:mdns 0.0.0.0:*
udp 0.0.0.0: 0.0.0.0:*
udp 0.0.0.0: 0.0.0.0:*
udp 192.168.122.1:domain 0.0.0.0:*
udp 0.0.0.0:bootps 0.0.0.0:*
udp localhost: 0.0.0.0:*
udp 0.0.0.0:bootpc 0.0.0.0:*
udp 0.0.0.0:bootpc 0.0.0.0:*
udp 0.0.0.0: 0.0.0.0:*
udp6 [::]: [::]:*
udp6 localhost: [::]:*
udp6 [::]: [::]:*
[root@CentOS7 ~]# netstat -lt 只列出所有监听 tcp 端口
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 192.168.122.1:domain 0.0.0.0:* LISTEN
tcp 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp localhost:ipp 0.0.0.0:* LISTEN
tcp localhos:x11-ssh-offset 0.0.0.0:* LISTEN
tcp6 [::]:ssh [::]:* LISTEN
tcp6 localhost:ipp [::]:* LISTEN
tcp6 localhos:x11-ssh-offset [::]:* LISTEN
[root@CentOS7 ~]# netstat -lu 只列出所有监听 udp 端口
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0.0.0.0:mdns 0.0.0.0:*
udp 0.0.0.0: 0.0.0.0:*
udp 0.0.0.0: 0.0.0.0:*
udp 192.168.122.1:domain 0.0.0.0:*
udp 0.0.0.0:bootps 0.0.0.0:*
udp localhost: 0.0.0.0:*
udp 0.0.0.0:bootpc 0.0.0.0:*
udp 0.0.0.0:bootpc 0.0.0.0:*
udp 0.0.0.0: 0.0.0.0:*
udp6 [::]: [::]:*
udp6 localhost: [::]:*
udp6 [::]: [::]:*
[root@CentOS7 ~]# netstat -lu 只列出所有监听 udp 端口
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0.0.0.0:mdns 0.0.0.0:*
udp 0.0.0.0: 0.0.0.0:*
udp 0.0.0.0: 0.0.0.0:*
udp 192.168.122.1:domain 0.0.0.0:*
udp 0.0.0.0:bootps 0.0.0.0:*
udp localhost: 0.0.0.0:*
udp 0.0.0.0:bootpc 0.0.0.0:*
udp 0.0.0.0:bootpc 0.0.0.0:*
udp 0.0.0.0: 0.0.0.0:*
udp6 [::]: [::]:*
udp6 localhost: [::]:*
udp6 [::]: [::]:*
[root@CentOS7 ~]# netstat -lx 只列出所有监听 UNIX 端口
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node Path
unix [ ACC ] STREAM LISTENING /run/user//pulse/native
unix [ ACC ] STREAM LISTENING /run/lvm/lvmpolld.socket
unix [ ACC ] STREAM LISTENING /run/user//keyring/pkcs11
unix [ ACC ] STREAM LISTENING /run/user//keyring/ssh
unix [ ACC ] STREAM LISTENING /run/user//keyring/control
unix [ ACC ] STREAM LISTENING @/tmp/.X11-unix/X0
显示 TCP 或 UDP 端口的统计信息 netstat -st 或 -su
[root@CentOS7 ~]# netstat -st
IcmpMsg:
InType3:
InType11:
OutType3:
Tcp:
active connections openings
passive connection openings
failed connection attempts
connection resets received
connections established
segments received
segments send out
segments retransmited
bad segments received.
resets sent
UdpLite:
TcpExt:
TCP sockets finished time wait in fast timer
delayed acks sent
delayed acks further delayed because of locked socket
Quick ack mode was activated times
packets directly queued to recvmsg prequeue.
bytes directly in process context from backlog
bytes directly received in process context from prequeue
packet headers predicted
packets header predicted and directly queued to user
acknowledgments not containing data payload received
predicted acknowledgments
congestion windows recovered without slow start after partial ack
retransmits in slow start
other TCP timeouts
TCPLossProbes:
TCPLossProbeRecovery:
DSACKs sent for old packets
DSACKs received
connections reset due to unexpected data
connections reset due to early user close
connections aborted due to timeout
TCPDSACKIgnoredNoUndo:
TCPSpuriousRTOs:
IPReversePathFilter:
TCPRetransFail:
TCPRcvCoalesce:
TCPChallengeACK:
TCPSpuriousRtxHostQueues:
TCPAutoCorking:
TCPSynRetrans:
TCPOrigDataSent:
TCPHystartTrainDetect:
TCPHystartTrainCwnd:
IpExt:
InNoRoutes:
InMcastPkts:
OutMcastPkts:
InBcastPkts:
InOctets:
OutOctets:
InMcastOctets:
OutMcastOctets:
InBcastOctets:
InNoECTPkts:
[root@CentOS7 ~]# netstat -su
IcmpMsg:
InType3:
InType11:
OutType3:
Udp:
packets received
packets to unknown port received.
packet receive errors
packets sent
receive buffer errors
send buffer errors
UdpLite:
IpExt:
InNoRoutes:
InMcastPkts:
OutMcastPkts:
InBcastPkts:
InOctets:
OutOctets:
InMcastOctets:
OutMcastOctets:
InBcastOctets:
InNoECTPkts:
[root@CentOS7 ~]# netstat -pt
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 10.0.2.15: ec2----:https ESTABLISHED /firefox
tcp 10.0.2.15: 123.59.42.81:https ESTABLISHED /daotunnel
tcp CentOS7.:ssh 192.168.56.1: ESTABLISHED /sshd: root@pt
tcp 10.0.2.15: 123.59.42.81:https ESTABLISHED /daotunnel
tcp 10.0.2.15: 123.59.42.81:https ESTABLISHED /daotunnel
tcp 10.0.2.15: 123.59.42.81:https ESTABLISHED /daotunnel
tcp 10.0.2.15: 123.59.87.200:https ESTABLISHED /daomonit
[root@CentOS7 ~]# netstat -c
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 10.0.2.15: ec2----:https ESTABLISHED
tcp 10.0.2.15: 123.59.42.81:https ESTABLISHED
tcp CentOS7.:ssh 192.168.56.1: ESTABLISHED
[root@CentOS7 ~]# 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.
[root@CentOS7 ~]# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default 10.0.2.2 0.0.0.0 UG eth0
10.0.2.0 0.0.0.0 255.255.255.0 U eth0
172.17.0.0 0.0.0.0 255.255.0.0 U docker0
192.168.56.0 0.0.0.0 255.255.255.0 U eth1
192.168.122.0 0.0.0.0 255.255.255.0 U virbr0
[root@CentOS7 ~]# netstat -ap | grep ssh
tcp 0.0.0.0:ssh 0.0.0.0:* LISTEN /sshd
tcp localhos:x11-ssh-offset 0.0.0.0:* LISTEN /sshd: root@pt
tcp CentOS7.:ssh 192.168.56.1: ESTABLISHED /sshd: root@pt
[root@CentOS7 ~]# netstat -i
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
docker0 BMU
eth0 BMRU
eth1 BMRU
lo LRU
virbr0 BMU
-h, --help 帮助信息
-V, --version 程序版本信息
-n, --numeric 不解析服务名称
-r, --resolve 解析主机名
-a, --all 显示所有套接字(sockets)
-l, --listening 显示监听状态的套接字(sockets)
-o, --options 显示计时器信息
-e, --extended 显示详细的套接字(sockets)信息
-m, --memory 显示套接字(socket)的内存使用情况
-p, --processes 显示使用套接字(socket)的进程
-i, --info 显示 TCP内部信息
-s, --summary 显示套接字(socket)使用概况
-4, --ipv4 仅显示IPv4的套接字(sockets)
-6, --ipv6 仅显示IPv6的套接字(sockets)
-0, --packet 显示 PACKET 套接字(socket)
-t, --tcp 仅显示 TCP套接字(sockets)
-u, --udp 仅显示 UCP套接字(sockets)
-d, --dccp 仅显示 DCCP套接字(sockets)
-w, --raw 仅显示 RAW套接字(sockets)
-x, --unix 仅显示 Unix套接字(sockets)
-f, --family=FAMILY 显示 FAMILY类型的套接字(sockets),FAMILY可选,支持 unix, inet, inet6, link, netlink
-A, --query=QUERY, --socket=QUERY
QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]
-D, --diag=FILE 将原始TCP套接字(sockets)信息转储到文件
-F, --filter=FILE 从文件中都去过滤器信息
FILTER := [ state TCP-STATE ] [ EXPRESSION ]
显示TCP连接
[root@CentOS7 ~]# ss -t -a
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 192.168.122.1:domain *:*
LISTEN *:ssh *:*
LISTEN 127.0.0.1:ipp *:*
LISTEN 127.0.0.1:x11-ssh-offset *:*
ESTAB 10.0.2.15: 54.191.11.118:https
[root@CentOS7 ~]# ss -s
Total: (kernel )
TCP: (estab , closed , orphaned , synrecv , timewait /), ports Transport Total IP IPv6
* - -
RAW
UDP
TCP
INET
FRAG
[root@CentOS7 ~]# ss -l
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
nl UNCONN rtnl: *
nl UNCONN rtnl: *
nl UNCONN rtnl:geoclue/ *
[root@CentOS7 ~]# ss -pl
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
nl UNCONN rtnl: *
nl UNCONN rtnl: *
[root@CentOS7 ~]# ss -u -a
State Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN *:mdns *:*
UNCONN *: *:*
ESTAB 10.0.2.15: 120.25.108.11:ntp
UNCONN *: *:*
UNCONN 192.168.122.1:domain *:*
UNCONN *%virbr0:bootps *:*
UNCONN 127.0.0.1: *:*
UNCONN *:bootpc *:*
UNCONN *:bootpc *:*
UNCONN *: *:*
ESTAB 10.0.2.15: 202.118.1.81:ntp
12. tcpdump:详细的网络流量分析
-nn,直接以 IP 及 Port Number 显示,而非主机名与服务名称。
-i,后面接要「监听」的网络接口,例如 eth0, lo, ppp0 等等的接口。
-w,如果你要将监听所得的数据包数据储存下来,用这个参数就对了。后面接文件名。
-c,监听的数据包数,如果没有这个参数, tcpdump 会持续不断的监听,直到用户输入 [ctrl]-c 为止。
-e,使用资料连接层 (OSI 第二层) 的 MAC 数据包数据来显示。
-q,仅列出较为简短的数据包信息,每一行的内容比较精简。
-X,可以列出十六进制 (hex) 以及 ASCII 的数据包内容,对于监听数据包内容很有用。
-r,从后面接的文件将数据包数据读出来。那个「文件」是已经存在的文件,并且这个「文件」是由 -w 所制作出来的。
所欲捕获的数据内容:我们可以专门针对某些通信协议或者是 IP 来源进行数据包捕获。那就可以简化输出的结果,并取得最有用的信息。
常见的表示方法有:
'host foo', 'host 127.0.0.1' :针对单台主机来进行数据包捕获。
'net 192.168' :针对某个网段来进行数据包的捕获。
'src host 127.0.0.1' 'dst net 192.168':同时加上来源(src)或目标(dst)限制。
'tcp port 21':还可以针对通信协议检测,如tcp、udp、arp、ether 等。
除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'or' ,'||'。
[root@CentOS7 ~]# tcpdump -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size bytes
::12.453576 IP 10.0.2.15. > 123.59.138.93.https: Flags [F.], seq , ack , win , length
::12.453863 IP 123.59.138.93.https > 10.0.2.15.: Flags [.], ack , win , length
::12.454352 IP 10.0.2.15. > 112.54.207.8.domain: + PTR? 93.138.59.123.in-addr.arpa. ()
::12.484893 IP 123.59.138.93.https > 10.0.2.15.: Flags [P.], seq :, ack , win , length
::12.484932 IP 10.0.2.15. > 123.59.138.93.https: Flags [R], seq , win , length
::12.485000 IP 123.59.138.93.https > 10.0.2.15.: Flags [F.], seq , ack , win , length
packets captured
packets received by filter
packets dropped by kernel
Linux 性能监控之命令行工具的更多相关文章
- 【No.2】监控Linux性能25个命令行工具
接着上一篇博文继续 [No.1]监控Linux性能25个命令行工具 10:mpstat -- 显示每个CPU的占用情况 该命令可以显示每个CPU的占用情况,如果有一个CPU占用率特别高,那么有可能是一 ...
- 【No.1】监控Linux性能25个命令行工具
如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?通过以下命令或者工具可以快速定位 top vmstat lsof tcpdump netsta ...
- 显示器 Linux 性能 18 (一个命令行工具传递)
对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一名Linux系统的管理员工作5年后,我逐渐认识到监控和保持系统启动并执行是多么的不easy.基于此原因. ...
- [Linux] tmux 终端复用命令行工具
tmux 终端复用命令行工具 tmux 是一款终端复用命令行工具,通常用于 Terminal 的窗口管理.可以在终端软件重启后通过命令行恢复上次的 session. 安装运行 macOS 上使用 Ho ...
- Linux性能监控分析命令(四)—top命令介绍
性能监控分析的命令包括如下: 1.vmstat 2.sar 3.iostat 4.top 5.free 6.uptime 7.netstat 8.ps 9.strace 10.lsof ======= ...
- linux性能监控常用命令
概述 我们在linux下,如果想要监控服务器性能.我们必须掌握以下常用的指标查看命令. ps pstree top free vmstat sar ps ps命令能给出当前系统中进程的快照.下面我们列 ...
- Linux性能监控的几个工具(转)
转载于:http://blog.csdn.net/tianlesoftware/article/details/6198780 Linux系能监控主要涉及系统4个方面资源的监控: CPU Memory ...
- Linux性能监控分析命令(五)—free命令介绍
性能监控分析的命令包括如下:1.vmstat2.sar3.iostat4.top5.free6.uptime7.netstat8.ps9.strace10.lsof 命令介绍:free命令是监控Lin ...
- linux性能监控基础命令
压力测试监控下系统性能方法之一 #top 该命令监控的是进程的信息 看图逐行意义 top:执行命令的之间 up:已经执行了277天 2users:目前有两个使用者,使用#who可以查看具体的使用者详情 ...
随机推荐
- Bash Shell内建命令和保留字
Bash Shell内建命令和保留字命令含义!保留字,逻辑非:不做任何事,只做参数展开.读取文件并在shell中执行它alias设置命令或命令行别名bg将作业置于后台运行bind将关键字序列与read ...
- php $_SERVER中的SERVER_NAME 和HTTP_HOST的区别
关于这个问题,搜索引擎上搜到一大片的文章,有很多问题,在这找到一篇正确的说法:http://mimiz.cn/index.php/php/php-http_host-server_name-diffe ...
- 微信在IOS7下无法分享图片
家里老大的iphone5在WWDC后第一时间升级了IOS7. 整体的UI风格和功能都很喜欢, 偶尔的crash还能接受. 但是最常用的软件之一微信,在IOS7下无法分享图片这点一直让她耿耿于怀. 从用 ...
- 在chrome 总调试cordova出现Detached from the target. Remote debugging has been terminated with reason: Connection lost. Please re-attach to the new target
在chrome 总调试cordova出现如下错误: "Detached from the target. Remote debugging has been terminated with ...
- .NET 框架(转自wiki)
.NET Framework (pronounced dot net) is a software framework developed by Microsoft that runs primari ...
- word使用技巧-批量删除图片技巧
通过查找替换方法:ctrl+h,查找输入^g,替换输入空,然后替换即可. 今天看到一同事写的文档,发现里面很多word基础功能都不会用,比如同一级的标题居然有好几个样式,并且会级别搞错:列表里的数字居 ...
- HYPER V 文件共享 复制文件 共享硬盘 来宾服务
虚拟机的设置 --> 集成服务 –> 来宾服务 勾选 文件就可以在本地机器和虚拟机上来回复制了. 他可让 Hyper-V 管理员在运行虚拟机的同时将文件复制到虚拟机,且无需使 ...
- XML组成结构以及C#通过DTD验证规范性
XML 文档包含元素和属性等,它们提供一种灵活且功能强大的方法,为应用程序和组织之间交换数据.所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成: 1.元素 元素是XML的主要构建 ...
- 【新手】python爬虫遍历贴吧用户
想法是遍历学校贴吧的用户,获取用户的数据用来分析,因为是初学python,就一点一点的写,变量命名也不规范,见谅 系统:windows 版本:python 3.5 #获取河北大学工商学院吧1000页以 ...
- select 触发事件
需求:现在需要获取用户选择的选项,同时获取里面自定义的字段. 因为option没法设置事件 <select class="form-control js-example-basic-s ...