博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux性能监控命令
阅读量:2397 次
发布时间:2019-05-10

本文共 19691 字,大约阅读时间需要 65 分钟。

Top命令详解

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。下面详细介绍它的使用方法。

top - 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60,0.48
Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0%si
Mem: 191272k total, 173656k used, 17616k free, 22052k buffers
Swap: 192772k total, 0k used, 192772k free, 123988k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1379 root 16 0 7976 2456 1980 S 0.7 1.3 0:11.03 sshd
14704 root 16 0 2128 980 796 R 0.7 0.5 0:02.72 top
1 root 16 0 1992 632 544 S 0.0 0.3 0:00.90 init
2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0

统计信息区
前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:

01:06:48 当前时间
up 1:22 系统运行时间,格式为时:分
1 user 当前登录用户数
load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。
三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。

第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:

Tasks: 29 total 进程总数
1 running 正在运行的进程数
28 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
Cpu(s): 0.3% us 用户空间占用CPU百分比
1.0% sy 内核空间占用CPU百分比
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
98.7% id 空闲CPU百分比
0.0% wa 等待输入输出的CPU时间百分比
0.0% hi
0.0% si

最后两行为内存信息。内容如下:

Mem: 191272k total 物理内存总量
173656k used 使用的物理内存总量
17616k free 空闲内存总量
22052k buffers 用作内核缓存的内存量
Swap: 192772k total 交换区总量
0k used 使用的交换区总量
192772k free 空闲交换区总量
123988k cached 缓冲的交换区总量。
内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,
该数值即为这些内容已存在于内存中的交换区的大小。
相应的内存再次被换出时可不必再对交换区写入。

进程信息区
统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。

序号 列名 含义
a PID 进程id
b PPID 父进程id
c RUSER Real user name
d UID 进程所有者的用户id
e USER 进程所有者的用户名
f GROUP 进程所有者的组名
g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
h PR 优先级
i NI nice值。负值表示高优先级,正值表示低优先级
j P 最后使用的CPU,仅在多CPU环境下有意义
k %CPU 上次更新到现在的CPU时间占用百分比
l TIME 进程使用的CPU时间总计,单位秒
m TIME+ 进程使用的CPU时间总计,单位1/100秒
n %MEM 进程使用的物理内存百分比
o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
r CODE 可执行代码占用的物理内存大小,单位kb
s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
t SHR 共享内存大小,单位kb
u nFLT 页面错误次数
v nDRT 最后一次写入到现在,被修改过的页面数。
w S 进程状态。
D=不可中断的睡眠状态
R=运行
S=睡眠
T=跟踪/停止
Z=僵尸进程
x COMMAND 命令名/命令行
y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
z Flags 任务标志,参考 sched.h

默认情况下仅显示比较重要的PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND列。可以通过下面的快捷键来更改显示内容。

更改显示内容
通过 f 键可以选择显示的内容。按 f 键之后会显示列的列表,按 a-z 即可显示或隐藏对应的列,最后按回车键确定。

按 o 键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z可以将相应的列向左移动。最后按回车键确定。

按大写的 F 或 O 键,然后按 a-z 可以将进程按照相应的列进行排序。而大写的 R 键可以将当前的排序倒转。

命令使用

1. 工具(命令)名称
top
2.工具(命令)作用
显示系统当前的进程和其他状况;top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定.
3.环境设置
在Linux下使用。
4.使用方法
4.1使用格式
top [-] [d] [p] [q] [c] [C] [S] [s] [n]
4.2参数说明
d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
p 通过指定监控进程ID来仅仅监控某个进程的状态。
q该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
S 指定累计模式
s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
i 使top不显示任何闲置或者僵死进程。
c 显示整个命令行而不只是显示命令名
4.3其他
  下面介绍在top命令执行过程中可以使用的一些交互命令。从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。
  Ctrl+L 擦除并且重写屏幕。
  h或者? 显示帮助画面,给出一些简短的命令总结说明。
  k终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
  i 忽略闲置和僵死进程。这是一个开关式命令。
  q 退出程序。
  r重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
  S 切换到累计模式。
  s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
  f或者F 从当前显示中添加或者删除项目。
  o或者O 改变显示项目的顺序。
  l 切换显示平均负载和启动时间信息。
  m 切换显示内存信息。
  t 切换显示进程和CPU状态信息。
  c 切换显示命令名称和完整命令行。
  M 根据驻留内存大小进行排序。
  P 根据CPU使用百分比大小进行排序。
  T 根据时间/累计时间进行排序。
     W将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。

 

vmstat命令详解

 vmstat命令报告虚拟内存统计信息和CPU负荷:页面调度,交换,任务交换,CPU利用率。命令的语法是:
      vmstat[-cisS] [d1 d2 d3 d4] [interval [count]]
     当不用选项时,vmstat显示一条曲线表示自从系统启动后活动的信息。如果指定interval(时间间隔),接下来的线是重复显示最后的interval期间活动的情况,直到用户中断命令执行。当同时提供计数器时,统计信息按时间计数来显示。
     如果指定了一个磁盘名(如d1,d2,等等。),这些磁盘得到优先显示。通常,系统上的前4个磁盘设备是显示的,因为只有四个设备能在一线条上显示,这个选项允许性能分析员修改缺省显示选项。(*磁盘名通常随id,sd,xd,或xy(取决于类型和I/0界面)加一个数字,如id0,sd2,xd1等等命名而定。),vmstat 命令显示若干字段信息:
     
procs      报表下面三种状态的进程数:
         r--在运行队列中等候运行
         b--被资源阻塞(I/0,页面调度,等等.)
         w--可运行但是被换出的
memory 报告虚拟内存和实存信息:
        swap--以千字节为单位的当前可用交换空间的数量
         free--以千字节为单位的页自由表大小
page   报告每秒页面调度活动数量的信息:
         re-从自由表回收页
         mf--次要的错误;地址空间或硬件地址转换错误
         pi--页入的千字节数
         po -页出的千字节数
         fr- 释放的千字节数
         de--以千字节为单位的可接受的短期内存不足数
         sr--页由时钟算法扫描
disk          可以为四个磁盘报告每秒磁盘I/O的数量

faults      报告每秒系统软件中断和硬件中断的速率
         in-设备中断,不包括系统时钟中断
         sy-系统调用
         cs-CPU任务(上下文)交换
cpu--      CPU故障时间的百分比,在多处理器系统上,这是全部处理器的平均值:
              us-   用户时间
         sy-- 系统时间
         id-- 闲置时间

vmstat命令有四个可选标志可供使用。如果机器有虚拟地址缓存-c标志就改变输出报告缓存刷新统计数据。报告包括自从系统启动后每种缓存刷新全部总量。六个缓存类型是用户,上下文,区域,段,页,部分页。
-i标志使输出变为报告中断的数量。如果给出设备名,如d1,d2等,监控将在设备级*执行,(*注,参阅第十二章有关打开设备级监控的信息。)并报告每个给定设备的统计信息。

  修改"普通"报告来显示交换而非页面调度活动的信息。这选项改变显示的两个字段:si(换入)和so(换出)替代了re和mf字段。

值得注意是,interval 和count选项对-i或-s选项是非法的。


vmstat参数详解

procs:

r-->在运行队列中等待的进程数
b-->在等待io的进程数
w-->可以进入运行队列但被替换的进程

memoy

swap-->现时可用的交换内存(k表示)
free-->空闲的内存(k表示)


pages

re--》回收的页面
mf--》非严重错误的页面
pi--》进入页面数(k表示)
po--》出页面数(k表示)
fr--》空余的页面数(k表示)
de--》提前读入的页面中的未命中数
sr--》通过时钟算法扫描的页面

disk 显示每秒的磁盘操作。 s表示scsi盘,0表示盘号

fault 显示每秒的中断数
in--》设备中断
sy--》系统中断
cy--》cpu交换

cpu 表示cpu的使用状态

cs--》用户进程使用的时间
sy--》系统进程使用的时间
id--》cpu空闲的时间


FIELD DESCRIPTIONS
Procs
   r: The number of processeswaiting for run time.
   b: The number of processes inuninterruptable sleep.
   w: The number of processesswapped out but otherwiserunnable.  

Thisfield is calculated, but Linux never desperation swaps.
  
Memory
   swpd: the amount of virtualmemory used (kB).
   free: the amount of idlememory (kB).
   buff: the amount of memoryused as buffers (kB).
  
Swap
   si: Amount of memory swappedin from disk (kB/s). 虚拟内存的页导入(从SWAP DISK导入RAM)
   so: Amount of memory swappedto disk (kB/s). 虚拟内存的页导出.
(从RAM到SWAP DISK)
  
IO
   bi: Blocks sent to a blockdevice (blocks/s).写入
   bo: Blocks received from ablock device (blocks/s).写出
  
System
   in: The number of interruptsper second, including the clock.
   cs: The number of contextswitches per second.
: CPU
   These are percentages of totalCPU time.
   us: user time
   sy: system time
   id: idle time


如果 r经常大于 4 ,且id经常少于40,表示cpu的负荷很重。
如果pi,po 长期不等于0,表示内存不足。
如果disk 经常不等于0, 且在 b中的队列 大于3, 表示 io性能不好。


由vmstat看服务器


说明:由于STATSPACK并不能获取全面分析性能问题所需要的所有信息,所以需要扩展其收集服务器的统计信息。
  
VMSTAT介绍

通过STATSPACK收集服务器信息,主要通过收集VMSTAT的信息来展现服务器状况。VMSTAT工具是最常见的UNIX监控工具,可以展现给定时间间隔的服务器的状态值。

一般VMSTAT工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数。如:
[oracle@brucelau oracle]$ vmstat 1 2
procs              memory swap    io   system       CPU
   w swpd freebuff  cache   si   so bi bo incs  us  sy   id
   0   0 271844 186052 255852 0 0    2     102 10 0 0 100
   0   0 271844 186052 255852 0 0    0     104 11 0 0 100
  
(注:目前系统几乎空闲,并且不同操作系统VMSTAT输出内容有所不同)
  
目前说来,对于服务器监控有用处的度量主要有:

r(运行队列)
pi(页导入)
us(用户CPU)
sy(系统CPU)
id(空闲)
  
通过VMSTAT识别CPU瓶颈

r(运行队列)展示了正在执行和等待CPU资源的任务个数。当这个值超过了CPU数目,就会出现CPU瓶颈了。
获得CPU个数的命令(LINUX环境):
cat /proc/cpuinfo|grep processor|wc –l
当r值超过了CPU个数,就会出现CPU瓶颈,解决办法大体几种:
1. 最简单的就是增加CPU个数
2. 通过调整任务执行时间,如大任务放到系统不繁忙的情况下进行执行,进尔平衡系统任务
3.  调整已有任务的优先级  

通过VMSTAT识别CPU满负荷

首先需要声明一点的是,vmstat中CPU的度量是百分比的。当us+sy的值接近100的时候,表示CPU正在接近满负荷工作。但要注意的是,CPU满负荷工作并不能说明什么,UNIX总是试图要CPU尽可能的繁忙,使得任务的吞吐量最大化。唯一能够确定CPU瓶颈的还是r(运行队列)的值。
  
通过VMSTAT识别RAM瓶颈

数据库服务器都只有有限的RAM,出现内存争用现象是Oracle的常见问题。
首先察看RAM的数量,命令如下(LINUX环境):
[root@brucelau root]#free
        total     used     free      shared   buffers    cached
Mem:    1027348    873312    154036    185736    187496    293964
-/+ buffers/cache:    391852   635496
Swap:    2096440     0   2096440
  
当然可以使用top等其他命令来显示RAM。

当内存的需求大于RAM的数量,服务器启动了虚拟内存机制,通过虚拟内存,可以将RAM段移到SWAPDISK的特殊磁盘段上,这样会出现虚拟内存的页导出和页导入现象,页导出并不能说明RAM瓶颈,虚拟内存系统经常会对内存段进行页导出,但页导入操作就表明了服务器需要更多的内存了,页导入需要从SWAPDISK上将内存段复制回RAM,导致服务器速度变慢。
  
解决的办法有几种:
1.    最简单的,加大RAM
2.    改小SGA,使得对RAM需求减少
3.    减少RAM的需求(如:减少PGA)
  
我们基本的了解了VMSTAT工作,下面是STATSPACK通过vmstat统计收集服务器性能数据。
  
STATSPACK通过vmstat收集服务器信息
首先在perfstat用户下建一个存储服务器信息的表:如
建表:
create table stats$vmstat
(
start_date date,   --系统时间
duration date,   --时间间隔
server_name varchar2(20), --服务器名称
runque_waits number, --运行队列数据
page_in   number, --页导入数据
page_out number, --页导出数据
user_cpu number, --用户cpu数据
system_cpu number, --系统cpu数据
idle_cpu number, --空闲cpu数据
wait_cpu number –等待cpu数据(只是aix存在)
)
tablespace perfstat;
然后,通过UNIX/LINUX的shell变成,利用vmstat的结果来获取相应的服务器信息,并且存放到表中。

Iostat 命令详解(转载)

[root@20081006-1724 ~]# iostat -x
Linux 2.6.9-78.ELsmp(20081006-1724)   11/20/2009

avg-cpu: %user  %nice    %sys%iowait   %idle
          0.19   0.00   0.04   0.03   99.73

Device:   rrqm/s wrqm/s  r/s   w/s rsec/s wsec/s   rkB/s    wkB/savgrq-sz avgqu-sz  await  svctm  %util
sda         0.05  17.60 1.46  7.72  80.69 202.57   40.34  101.29   30.87    0.01   1.06  0.37   0.34
sda1        0.00   0.00 0.00 0.00   0.00   0.00    0.00    0.00   29.90    0.00   3.14  3.14   0.00
sda2        0.00   0.00 0.00 0.00   0.00   0.00    0.00    0.00   16.25    0.00   1.51  1.30   0.00
sda3        0.05  17.60 1.46  7.72  80.69 202.57   40.34  101.29   30.87    0.01   1.06  0.37   0.34
dm-0        0.00   0.00 1.46 25.28  80.32 202.26   40.16  101.13   10.57    0.36  13.56  0.13   0.34
dm-1        0.00   0.00 0.05 0.04   0.37   0.32    0.18    0.16    8.00    0.00   6.84  1.30   0.01

rrqm/s: 每秒进行 merge 的读操作数目。即 delta(rmerge)/s
wrqm/s: 每秒进行 merge 的写操作数目。即 delta(wmerge)/s
r/s: 每秒完成的读 I/O 设备次数。即 delta(rio)/s
w/s: 每秒完成的写 I/O 设备次数。即 delta(wio)/s
rsec/s: 每秒读扇区数。即 delta(rsect)/s
wsec/s: 每秒写扇区数。即 delta(wsect)/s
rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。
wkB/s: 每秒写K字节数。是 wsect/s 的一半。
avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。即delta(rsect+wsect)/delta(rio+wio)
avgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。
await: 平均每次设备I/O操作的等待时间 (毫秒)。即delta(ruse+wuse)/delta(rio+wio)
svctm: 平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)
%util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。
即 delta(use)/s/1000 (因为use的单位为毫秒)

如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘
可能存在瓶颈。

比较重要的参数
%util:     一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的
svctm:   平均每次设备I/O操作的服务时间
await:   平均每次设备I/O操作的等待时间
avgqu-sz: 平均I/O队列长度

如果%util接近100%,表明i/o请求太多,i/o系统已经满负荷,磁盘可能存在瓶颈,一般%util大于70%,i/o压力就比较大,读取速度有较多的wait.同时可以结合vmstat查看查看b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比,高过30%时IO压力高)。
await 的大小一般取决于服务时间(svctm) 以及 I/O 队列的长度和 I/O 请求的发出模式。如果 svctm 比较接近await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O队列太长,应用得到的响应时间变慢。

形象的比喻
r/s+w/s 类似于交款人的总数
平均队列长度(avgqu-sz)类似于单位时间里平均排队人的个数
平均服务时间(svctm)类似于收银员的收款速度
平均等待时间(await)类似于平均每人的等待时间
平均I/O数据(avgrq-sz)类似于平均每人所买的东西多少
I/O 操作率 (%util)类似于收款台前有人排队的时间比例

设备IO操作:总IO(io)/s = r/s(读) +w/s(写) =1.46 + 25.28=26.74
平均每次设备I/O操作只需要0.36毫秒完成,现在却需要10.57毫秒完成,因为发出的请求太多(每秒26.74个),假如请求时同时发出的,可以这样计算平均等待时间:
平均等待时间=单个I/O服务器时间*(1+2+...+请求总数-1)/请求总数
每秒发出的I/0请求很多,但是平均队列就4,表示这些请求比较均匀,大部分处理还是比较及时


svctm 一般要小于 await (因为同时等待的请求的等待时间被重复计算了),
svctm 的大小一般和磁盘性能有关,CPU/内存的负荷也会对其有影响,请求过多
也会间接导致 svctm 的增加。await 的大小一般取决于服务时间(svctm) 以及
I/O 队列的长度和 I/O 请求的发出模式。如果 svctm 比较接近 await,说明
I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用
得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑
更换更快的磁盘,调整内核 elevator 算法,优化应用,或者升级 CPU。

队列长度(avgqu-sz)也可作为衡量系统 I/O 负荷的指标,但由于 avgqu-sz 是
按照单位时间的平均值,所以不能反映瞬间的 I/O 洪水。

 

Netstat命令详解

Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。

    
如果你的计算机有时候接收到的数据报导致出错数据或故障,你不必感到奇怪,TCP/IP
可以容许这些类型的错误,并能够自动重发数据报。但如果累计的出错情况数目占到所接收的IP数据报相当大的百分比,或者它的数目正迅速增加,那么你就应该使用Netstat查一查为什么会出现这些情况了。

 
Netstat 详细参数列表
C:/>netstat/?
显示协议统计信息和当前 TCP/IP 网络连接。
NETSTAT [-a] [-b] [-e] [-n][-o] [-p proto] [-r] [-s] [-v] [interval]
 -a           显示所有连接和监听端口。

 -b           
显示包含于创建每个连接或监听端口的可执行组件。在某些情况下已知可执行组件

               
拥有多个独立组件,并且在这些情况下包含于创建连接或监听端口的组件序列被显示。

               
这种情况下,可执行组件名在底部的 [] 中,顶部是其调用的组件,等等,直到 
TCP/IP
    
        
 
 
部分。注意此选项可能需要很长时间,如果没有足够权限可能失败。

 -e           
显示以太网统计信息。此选项可以与 
-s
               
选项组合使用。

 -n           
以数字形式显示地址和端口号。

 -o           
显示与每个连接相关的所属进程 ID

  -pproto     
显示 proto 指定的协议的连接;proto 可以是

               
下列协议之一: TCP、UDP、TCPv6或 UDPv6。

               
如果与 -s 选项一起使用以显示按协议统计信息,proto 可以是下列协议之一
:
               IP
、IPv6
、ICMP、ICMPv6、TCP、TCPv6、UDP或 UDPv6。

 -r           
显示路由表。

 -s           
显示按协议统计信息。默认地,显示 IP

               IPv6
、ICMP、ICMPv6、TCP、TCPv6、UDP和 UDPv6的统计信息;

               -p 
选项用于指定默认情况的子集。

 -v           
与 -b 选项一起使用时将显示包含于

               
为所有可执行组件创建连接或监听端口的

               
组件。

 interval     
重新显示选定统计信息,每次显示之间

               
暂停时间间隔(以秒计)。按CTRL+C停止重新

               
显示统计信息。如果省略,netstat 显示当前

               
配置信息(只显示一次)
(Win2000
C:/>netstat/?
Displays protocol statisticsand current TCP/IP network connections.
NETSTAT [-a] [-e] [-n] [-s][-p proto] [-r] [interval]
 -a           Displays all connections and listening ports.
 -e           Displays Ethernet statistics. This may be combined with the-s
               option.
 -n           Displays addresses and port numbers in numerical form.
  -pproto     Shows connections for the protocol specified by proto; proto
               may be TCP or UDP.  If used with the -s option todisplay
               per-protocol statistics, proto may be TCP, UDP, or IP.
 -r           Displays the routing table.
 -s           Displays per-protocol statistics.  By default,statistics are
               shown for TCP, UDP and IP; the -p option may be used tospecify
               a subset of the default.
 interval     Redisplays selected statistics, pausing interval seconds
               between each display.  Press CTRL+C to stopredisplaying
               statistics.  If omitted, netstat will print thecurrent
               configuration information once.

Netstat
的一些常用选项
 
netstat-s
——本选项能够按照各个协议分别显示其统计数据。如果你的应用程序(如Web浏览器)运行速度比较慢,或者不能显示Web页之类的数据,那么你就可以用本选项来查看一下所显示的信息。你需要仔细查看统计数据的各行,找到出错的关键字,进而确定问题所在。


netstat-e
——本选项用于显示关于以太网的统计数据。它列出的项目包括传送的数据报的总字节数、错误数、删除数、数据报的数量和广播的数量。这些统计数据既有发送的数据报数量,也有接收的数据报数量。这个选项可以用来统计一些基本的网络流量。


netstat-r
——本选项可以显示关于路由表的信息,类似于后面所讲使用route print命令时看到的信息。除了显示有效路由外,还显示当前有效的连接。 


netstat-a
——本选项显示一个所有的有效连接信息列表,包括已建立的连接(ESTABLISHED),也包括监听连接请求(LISTENING)的那些连接,断开连接(CLOSE_WAIT)或者处于联机等待状态的(TIME_WAIT)等


netstat-n
——显示所有已建立的有效连接。
 
   微软公司故意将这个功能强大的命令隐藏起来是因为它对于普通用户来说有些复杂。我们已经知道:Netstat它可以用来获得你的系统网络连接的信息(使用的端口,在使用的协议等),收到和发出的数据,被连接的远程系统的端口,Netstat在内存中读取所有的网络信息。
   在InternetRFC标准中,Netstat的定义是: Netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。
   对于好奇心极强的人来说,紧紧有上面的理论是远远不够的,接下来我们来详细的解释一下各个参数的使用,看看执行之后会发生什么,显示的信息又是什么意思,好了,废话不说了,让我们一起来实践一下吧:)
C:/>netstat-a
ActiveConnections
 Proto  LocalAddress         ForeignAddress       State
 TCP   Eagle:ftp             Eagle:0               LISTENING
 TCP   Eagle:telnet          Eagle:0               LISTENING
 TCP   Eagle:smtp            Eagle:0               LISTENING
 TCP   Eagle:http            Eagle:0               LISTENING
 TCP   Eagle:epmap           Eagle:0               LISTENING
 TCP   Eagle:https           Eagle:0               LISTENING
 TCP   Eagle:microsoft-ds    Eagle:0               LISTENING
 TCP   Eagle:1030            Eagle:0               LISTENING
 TCP   Eagle:6059            Eagle:0               LISTENING
  TCP   Eagle:2443            219.133.63.142:https  CLOSE_WAIT
 TCP   Eagle:2907            192.168.1.101:2774    CLOSE_WAIT
 TCP   Eagle:2916            192.168.1.101:telnet  ESTABLISHED
 TCP   Eagle:2927            219.137.227.10:4899   TIME_WAIT
 TCP   Eagle:3455            218.85.139.65:9002    ESTABLISHED
 TCP   Eagle:netbios-ssn     Eagle:0               LISTENING
 UDP   Eagle:microsoft-ds    *:*
 UDP   Eagle:1046            *:*

 
我们拿其中一行来解释吧:
Proto  LocalAddress         ForeignAddress       State
TCP   Eagle:2929            219.137.227.10:4899   ESTABLISHED
 
协议(Proto):TCP,指是传输层通讯协议(什么?不懂?请用baidu搜索"TCP",OSI七层和TCP/IP四层可是基础^_^)

本地机器名(Local  Address):Eagle,俗称计算机名了,安装系统时设置的,可以在“我的电脑”属性中修改,本地打开并用于连接的端口:2929)
  
远程机器名(Foreign  Address
):
219.137.227.10
远程端口:
4899 
状态:ESTABLISHED  
 
状态列表
LISTEN  :在监听状态中。
  
ESTABLISHED
:已建立联机的联机情况。
 

TIME_WAIT
:该联机在目前已经是等待的状态。 
 
-a参数常用于获得你的本地系统开放的端口,用它您可以自己检查你的系统上有没有被安装木马(ps:有很多好程序用来检测木马,但你的目的是想成为真正的hacker,手工检测要比只按一下“scan”按钮好些----仅个人观点)。如果您Netstat你自己的话,发现下面的信息: 

  

Port12345(TCP) Netbus
  
Port 31337(UDP) Back Orifice
  

  祝贺!您中了最常见的木马(^_^,上面4899是我连别人的,而且这个radmin是商业软件,目前我最喜欢的远程控制软件) 

  如果你需要木马及其端口列表的话,去国内的H
站找找,或者baidu,google吧 

  

*****************************************************************
  

  #一些原理:也许你有这样的问题:“在机器名后的端口号代表什么? 

  例子:
Eagle:2929
  小于1024
的端口通常运行一些网络服务,大于1024的端口用来与远程机器建立连接。  

  *****************************************************************
 
继续我们的探讨,使用-n参数。(
Netstat -n)
  Netstat -n
基本上是-a参数的数字形式:
 
C:/>netstat-n
ActiveConnections
 Proto  LocalAddress         ForeignAddress       State
 TCP   127.0.0.1:445         127.0.0.1:1031        ESTABLISHED
 TCP   127.0.0.1:1031        127.0.0.1:445         ESTABLISHED
 TCP   192.168.1.180:1213    218.85.139.65:9002    CLOSE_WAIT
 TCP   192.168.1.180:2416    219.133.63.142:443    CLOSE_WAIT
 TCP   192.168.1.180:2443    219.133.63.142:443    CLOSE_WAIT
 TCP   192.168.1.180:2907    192.168.1.101:2774    CLOSE_WAIT
 TCP   192.168.1.180:2916    192.168.1.101:23      ESTABLISHED
 TCP   192.168.1.180:2929    219.137.227.10:4899   ESTABLISHED
 TCP   192.168.1.180:3048    192.168.1.1:8004      SYN_SENT
 TCP   192.168.1.180:3455    218.85.139.65:9002    ESTABLISHED
 
-a 和 -n 是最常用的两个,据我不完全测试得出以下结果:
1. -n 显示用数字化主机名,即IP地址,而不是compute_name【eagle】
2. -n 只显示TCP连接(没有在哪里见过微软的相关文档,有哪个朋友见到的话,记得告诉我喔^_^)
    得到IP等于得到一切,它是最容易使机器受到攻击的东东,所以隐藏自己IP,获得别人的IP对hacker来说非常重要,现在隐藏IP技术很流行,但那些隐藏工具或服务真的让你隐身吗?我看不见得,呵呵,代理,跳板不属于今天讨论,一个获取对方IP的简单例子请参考我前面的文章【 】

 
-a 和 -n 是最常用的命令,如果要显示一些协议的更详细信息,就要用-p这个参数了,它其实是-a 
和 
-n的一个变种,我们来看一个实例,你就明白了:【netstat -p @@@ 其中@@@为TCP或者UDP】
C:/>netstat -ptcp
ActiveConnections
 Proto  LocalAddress         ForeignAddress       State
 TCP   Eagle:microsoft-ds    localhost:1031        ESTABLISHED
 TCP   Eagle:1031            localhost:microsoft-ds  ESTABLISHED
 TCP   Eagle:1213            218.85.139.65:9002    CLOSE_WAIT
 TCP   Eagle:2416            219.133.63.142:https  CLOSE_WAIT
 TCP   Eagle:2443            219.133.63.142:https  CLOSE_WAIT
 TCP   Eagle:2907            192.168.1.101:2774    CLOSE_WAIT
 TCP   Eagle:2916            192.168.1.101:telnet  ESTABLISHED
 TCP   Eagle:2929            219.137.227.10:4899   ESTABLISHED
 TCP   Eagle:3455            218.85.139.65:9002    ESTABLISHED
  
 继续我们的参数讲解 -e
   含义:本选项用于显示关于以太网的统计数据。它列出的项目包括传送的数据报的总字节数、错误数、删除数、数据报的数量和广播的数量。这些统计数据既有发送的数据报数量,也有接收的数据报数量。这个选项可以用来统计一些基本的网络流量。
C:/>netstat-e
Interface Statistics
                          Received           Sent
Bytes                    143090206       44998789
Unicastpackets             691805         363603
Non-unicastpackets         886526           2386
Discards                                      0
Errors                                        0
Unknownprotocols             4449
   若接收错和发送错接近为零或全为零,网络的接口无问题。但当这两个字段有100个以上的出错分组时就可以认为是高出错率了。高的发送错表示本地网络饱和或在主机与网络之间有不良的物理连接; 
 
高的接收错表示整体网络饱和、本地主机过载或物理连接有问题,可以用Ping命令统计误码率,进一步确定故障的程度。netstat -e 
和ping结合使用能解决一大部分网络故障。
 
   接下来我们开始讲解两个比较复杂的参数 -r 和 
-s,也正因为如此,笔者把他放到最后讲解,这里面可能会涉及到其他方面的知识,以后在我的博客中将会继续写出来,呵呵,最近比较忙
   
-r是用来显示路由表信息,我们来看例子:
C:/>netstat-r
Route Table(路由表)

===========================================================================
Interface List
(网络接口列表)

0x1 ........................... MS TCPLoopback interface
0x10003 ...00 0c f1 02 76 81 ...... Intel(R) PRO/Wireless LAN 21003B Mini PCI
dapter
0x10004 ...00 02 3f 00 05 cb ...... Realtek RTL8139/810x FamilyFast Ethernet
C
===========================================================================
===========================================================================
Active Routes:
(动态路由)

NetworkDestination       Netmask         Gateway      Interface  Metric
         0.0.0.0         0.0.0.0   192.168.1.254  192.168.1.181      30
         0.0.0.0         0.0.0.0   192.168.1.254  192.168.1.180      20
       127.0.0.0       255.0.0.0       127.0.0.1      127.0.0.1      1
     192.168.1.0   255.255.255.0   192.168.1.180  192.168.1.180      20
     192.168.1.0   255.255.255.0   192.168.1.181  192.168.1.181      30
   192.168.1.180 255.255.255.255       127.0.0.1      127.0.0.1      20
   192.168.1.181 255.255.255.255       127.0.0.1      127.0.0.1      30
   192.168.1.255 255.255.255.255   192.168.1.180  192.168.1.180      20
   192.168.1.255 255.255.255.255   192.168.1.181  192.168.1.181      30
       224.0.0.0       240.0.0.0   192.168.1.180  192.168.1.180      20
       224.0.0.0       240.0.0.0   192.168.1.181  192.168.1.181      30
  255.255.255.255 255.255.255.255   192.168.1.180  192.168.1.180      1
  255.255.255.255 255.255.255.255   192.168.1.181  192.168.1.181      1
DefaultGateway:    192.168.1.254
(默认网关)

===========================================================================
Persistent Routes:
(静态路由)

 None
C:/>
 
-s 参数的作用前面有详细的说明,来看例子
C:/>netstat-s
IPv4Statistics       (IP统计结果) 
 
 
 
  PacketsReceived                  = 369492(接收包数)

  Received HeaderErrors            = 0
(接收头错误数)

  Received AddressErrors           = 2
(接收地址错误数)

  DatagramsForwarded               = 0
(数据报递送数)

  Unknown ProtocolsReceived        = 0
(未知协议接收数)

  Received PacketsDiscarded        = 4203
(接收后丢弃的包数)

  Received PacketsDelivered        = 365287
(接收后转交的包数)

  OutputRequests                   = 369066
(请求数)

  RoutingDiscards                  = 0
(路由丢弃数)

  Discarded OutputPackets          = 2172
(包丢弃数)

  Output Packet NoRoute            = 0
(不路由的请求包)

  ReassemblyRequired               = 0
(重组的请求数

  ReassemblySuccessful             = 0
(重组成功数)

  ReassemblyFailures               = 0
(重组失败数)

  DatagramsSuccessfully Fragmented  =0
(分片成功的数据报数

  Datagrams FailingFragmentation   = 0
(分片失败的数据报数

  FragmentsCreated                 = 0
(分片建立数)
ICMPv4 Statistics (ICMP统计结果)包括Received和Sent两种状态
                           Received   Sent
 Messages                 285        784
(消息数

 Errors                            0
(错误数)

  DestinationUnreachable  53         548
(无法到达主机数目)

  TimeExceeded                     0
(超时数目)

  ParameterProblems                0
(参数错误)

  SourceQuenches                   0
(源夭折数

 Redirects                         0
(重定向数)

 Echos                    25         211
(回应数)

  EchoReplies             207        25
(回复回应数)

 Timestamps                        0
(时间戳数)

  TimestampReplies                 0
(时间戳回复数)

  AddressMasks                     0
(地址掩码数

  Address MaskReplies              0
(地址掩码回复数)
TCP Statistics for IPv4(TCP统计结果)
  ActiveOpens                       = 5217(主动打开数

  PassiveOpens                      = 80
(被动打开数

  Failed ConnectionAttempts         = 2944
(连接失败尝试数

  ResetConnections                  = 529
(复位连接数

  CurrentConnections                = 9
(当前连接数目)

  SegmentsReceived                  = 350143
(当前已接收的报文数)

  SegmentsSent               
你可能感兴趣的文章
非科班的Java学习路线
查看>>
Android Scroller简单用法
查看>>
DirectFB代码导读
查看>>
Cocos2dx3.2从零开始【四】继续。
查看>>
《云计算架构技术与实践》序言(李德毅院士)
查看>>
SANS FOR572 Logstash
查看>>
FreeBSD kernel NFS client local vulnerabilities
查看>>
OpenGL坐标系
查看>>
VS2008快捷键大全
查看>>
HDU 3308 线段树+区间合并
查看>>
阿里开源限流组件 Sentinel 集群流控全解析
查看>>
人工智能资料库:第3辑(20170107)
查看>>
人工智能资料库:第22辑(20170131)
查看>>
MongoDB-初体验
查看>>
标记问题:介绍
查看>>
利用-TensorFlow-构建卷积神经网络
查看>>
利用TensorFlow实现卷积神经网络做文本分类
查看>>
Ubuntu 安装 pylucene 踩坑还原记,并安装 SmartChineseAnalyzer
查看>>
Java编程思想学习笔记(10)
查看>>
Java编程思想学习笔记(11)
查看>>