linux下监控命令
top、uptime、free
统计相关命令
stat、dstat
ifstat、iostat
netstat、nicstat
mpstat、pidstat、vmstat
lsof、tcpdump、sar
其他
arp、arping、traceroute
strace
nethogs [eth1] 查看网络流量
nslookup、dig
top
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时,这些内容可能会超过两行。内容如下:
total 进程总数 running 正在运行的进程数 sleeping 睡眠的进程数 stopped 停止的进程数 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:硬件CPU中断占用百分比 0.0%si:软中断占用百分比 0.0%st:虚拟机占用百分比
最后两行为内存信息。内容如下:
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
uptime
04:03:58 up 10 days, 13:19, 1 user, load average: 0.54, 0.40, 0.20
- 当前时间 04:03:58
- 系统已运行的时间 10 days, 13:19
- 当前在线用户 1 user
- 平均负载:0.54, 0.40, 0.20,最近1分钟、5分钟、15分钟系统的负载
最直接查看系统平均负载的命令
cat /proc/loadavg
何为系统负载呢?
系统平均负载被定义为在特定时间间隔内运行队列中的平均进程数。如果一个进程满足以下条件则其就会位于运行队列中:
它没有在等待I/O操作的结果
它没有主动进入等待状态(也就是没有调用'wait')
没有被停止(例如:等待终止)
一般来说,每个CPU内核当前活动进程数不大于3,则系统运行表现良好!当然这里说的是每个cpu内核,也就是如果你的主机是四核cpu的话,那么只要uptime最后输出的一串字符数值小于12即表示系统负载不是很严重.当然如果达到20,那就表示当前系统负载非常严重,估计打开执行web脚本非常缓慢.
free
1 total used free shared buffers cached 2 Mem: 24677460 23276064 1401396 0 870540 12084008 3 -/+ buffers/cache: 10321516 14355944 4 Swap: 25151484 224188 24927296
第二行是物理总内存,已经使用的内存,空闲内存,shared是被几个进程共享的内存
buffers是用于存放到输出到磁盘的数据,也就是写缓冲
cached 是从磁盘上读出的数据,也就是读缓冲,这两个都是为了提高IO性能的
第三行内容(-/+ buffers/cache)中个参数如下所示:
(-buffers/cache): 真正使用的内存数,即9392M,他指的是第一部分的 used - buffers - cached
(+buffers/cache): 可用的内存数,即22715M,他指的是第一部分的 free + buffers + cached
第四行就是交换区使用的量和空闲数量
释放掉被系统cache占用的数据
echo 3>/proc/sys/vm/drop_caches
stat
stat zzz.sh File: 鈥榸zz.sh鈥? Size: 140 Blocks: 8 IO Block: 4096 regular file Device: fd01h/64769d Inode: 925359 Links: 1 Access: (0755/-rwxr-xr-x) Uid: ( 1000/ deploy) Gid: ( 1000/ deploy) Access: 2017-04-19 12:53:47.832967443 +0800 Modify: 2017-04-19 12:53:46.692917575 +0800 Change: 2017-04-19 12:53:46.704918100 +0800 Birth: -
dstat
----system---- ----total-cpu-usage---- ---load-avg--- -net/total- ------memory-usage----- -dsk/total- ---procs--- ----swap--- --io/total- ---system-- ------sockets------ --filesystem- time |usr sys idl wai hiq siq| 1m 5m 15m | recv send| used buff cach free| read writ|run blk new| used free| read writ| int csw |tot tcp udp raw frg|files inodes 09-05 15:02:33| 0 0 100 0 0 0|0.02 0.05 0.05| 0 0 |6844M 284M 2875M 6046M| 795B 18k| 0 0 0.5| 0 0 |0.04 0.86 | 562 1050 |212 105 6 0 0| 1696 51718 09-05 15:02:34| 0 0 100 0 0 0|0.02 0.05 0.05| 638B 2140B|6844M 284M 2875M 6046M| 0 28k| 0 0 0| 0 0 | 0 2.00 | 623 1221 |212 105 6 0 0| 1696 51725 09-05 15:02:35| 0 0 100 0 0 0|0.02 0.05 0.05| 562B 1878B|6844M 284M 2875M 6046M| 0 0 | 0 0 0| 0 0 | 0 0 | 619 1201 |212 105 6 0 0| 1696 51725 09-05 15:02:36| 0 0 100 0 0 0|0.02 0.05 0.05|1230B 5680B|6844M 284M 2875M 6046M| 0 0 | 0 0 0| 0 0 | 0 0 | 657 1259 |212 105 6 0 0| 1696 51725 09-05 15:02:37| 0 0 100 0 0 0|0.02 0.05 0.05| 181B 817B|6844M 284M 2875M 6046M| 0 0 | 0 0 0| 0 0 | 0 0 | 600 1171 |212 105 6 0 0| 1696 51725 09-05 15:02:38| 0 0 100 0 0 0|0.02 0.05 0.05|3500B 5296B|6844M 284M 2875M 6046M| 0 0 | 0 0 0| 0 0 | 0 0 | 701 1322 |212 105 6 0 0| 1696 51725 09-05 15:02:39| 0 0 100 0 0 0|0.02 0.05 0.05| 638B 722B|6844M 284M 2875M 6046M| 0 0 | 0 0 0| 0 0 | 0 0 | 613 1185 |212 105 6 0 0| 1696 51725 09-05 15:02:40| 0 0 100 0 0 0|0.02 0.05 0.05| 164B 1430B|6844M 284M 2875M 6046M| 0 0 | 0 0 0| 0 0 | 0 0 | 610 1187 |212 105 6 0 0| 1696 51725
cpu-usage中的 user是用户使用cpu百分比,sys是系统使用的,idl是空闲比例
wai是io等待比例,hiq是硬件终端,siq是软件终端
system中的int是中断次数(interrupt)和csw中下文切换(context switch)
procs中的run是运行的,blk是中断的,new是新创建的进程
最后两列显示了socket和文件相关的信息
ifstat
ifstat -tlaT Time lo eth0 pan0 Total HH:MM:SS KB/s in KB/s out KB/s in KB/s out KB/s in KB/s out KB/s in KB/s out 06:27:32 0.00 0.00 0.06 0.28 0.00 0.00 0.06 0.28 06:27:33 0.00 0.00 0.06 0.18 0.00 0.00 0.06 0.18 06:27:34 0.00 0.00 0.06 0.18 0.00 0.00 0.06 0.18 06:27:35 0.00 0.00 0.12 0.22 0.00 0.00 0.12 0.22
参数
-l 监测环路网络接口(lo)。缺省情况下,ifstat监测活动的所有非环路网络接口。经使用发现,加上-l参数能监测所有的网络接口的信息,而不是只监测 lo的接口信息,也就是说,加上-l参数比不加-l参数会多一个lo接口的状态信息。 -a 监测能检测到的所有网络接口的状态信息。使用发现,比加上-l参数还多一个plip0的接口信息,搜索一下发现这是并口(网络设备中有一 个叫PLIP (Parallel Line Internet Protocol). 它提供了并口...) -z 隐藏流量是无的接口,例如那些接口虽然启动了但是未用的 -i 指定要监测的接口,后面跟网络接口名 -s 等于加-d snmp:[comm@][#]host[/nn]] 参数,通过SNMP查询一个远程主机 -h 显示简短的帮助信息 -n 关闭显示周期性出现的头部信息(也就是说,不加-n参数运行ifstat时最顶部会出现网络接口的名称,当一屏显示不下时,会再一次出现接口的名称,提示我们显示的流量信息具体是哪个网络接口的。加上-n参数把周期性的显示接口名称关闭,只显示一次) -t 在每一行的开头加一个时间 戳(能告诉我们具体的时间) -T 报告所有监测接口的全部带宽(最后一列有个total,显示所有的接口的in流量和所有接口的out流量,简单的把所有接口的in流量相加,out流量相 加) -w 用指定的列宽,而不是为了适应接口名称的长度而去自动放大列宽 -W 如果内容比终端窗口的宽度还要宽就自动换行 -S 在同一行保持状态更新(不滚动不换行)注:如果不喜欢屏幕滚动则此项非常方便,与bmon的显示方式类似 -b 用kbits/s显示带宽而不是kbytes/s -q 安静模式,警告信息不出现 -v 显示版本信息 -d 指定一个驱动来收集状态信息
iostat
iostat -x Linux 3.13.0-86-generic (iZm5efk9snim7x48j1lxwsZ) 05/10/2017 _x86_64_ (4 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.27 0.00 0.11 0.01 0.00 99.61 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util vda 0.00 0.52 0.02 0.79 0.25 11.90 30.14 0.00 5.84 31.75 5.27 0.35 0.03 vdb 0.00 0.05 0.02 0.08 0.47 6.22 134.86 0.00 34.99 4.23 43.06 1.47 0.01
字段含义
rrqm/s: 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并 wrqm/s: 每秒对该设备的写请求被合并次数 r/s: 每秒完成的读次数 w/s: 每秒完成的写次数 rkB/s: 每秒读数据量(kB为单位) wkB/s: 每秒写数据量(kB为单位) avgrq-sz:平均每次IO操作的数据量(扇区数为单位) avgqu-sz: 平均等待处理的IO请求队列长度,越短越好 await: 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位) svctm: 平均每次IO请求的处理时间(毫秒为单位) %util: 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率
如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长
netstat
netstat -anpltu Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:8082 0.0.0.0:* LISTEN 6982/java tcp 0 0 0.0.0.0:9527 0.0.0.0:* LISTEN 17779/java tcp 0 0 0.0.0.0:9999 0.0.0.0:* LISTEN 17779/java tcp 0 0 1.2.3.4:56568 5.6.7.8:9042 ESTABLISHED - tcp 1 0 1.2.3.4:44910 1.2.3.4.5:8080 CLOSE_WAIT -
显示tcp和udp的相信统计信息
netstat -tus IcmpMsg: InType0: 3 InType3: 1 InType8: 1 OutType0: 1 OutType3: 1 OutType8: 3 Tcp: 32 active connections openings 1 passive connection openings 6 failed connection attempts 0 connection resets received 1 connections established 5110 segments received 3121 segments send out 0 segments retransmited 0 bad segments received. 7 resets sent Udp: 41 packets received 1 packets to unknown port received. 0 packet receive errors 42 packets sent UdpLite: TcpExt: 20 TCP sockets finished time wait in fast timer 10 delayed acks sent 4261 packets header predicted 199 acknowledgments not containing data received 459 predicted acknowledgments 0 TCP data loss events IpExt: InBcastPkts: 18 InOctets: 6136651 OutOctets: 205136 InBcastOctets: 1404
显示路由信息
netstat -r Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 192.168.186.0 * 255.255.255.0 U 0 0 0 eth0 default 192.168.186.1 0.0.0.0 UG 0 0 0 eth0
显示网络界面信息
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 5289 0 0 0 3234 0 0 0 BMRU lo 16436 0 14 0 0 0 14 0 0 0 LRU
显示组播信息
netstat -g IPv6/IPv4 Group Memberships Interface RefCnt Group --------------- ------ --------------------- lo 1 all-systems.mcast.net eth0 1 all-systems.mcast.net lo 1 ff02::1 eth0 1 ff02::1:ff9c:1fb9 eth0 1 ff02::1 pan0 1 ff02::1
参数
-a或--all:显示所有连线中的Socket; -A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址; -c或--continuous:持续列出网络状态; -C或--cache:显示路由器配置的快取信息; -e或--extend:显示网络其他相关信息; -F或--fib:显示FIB; -g或--groups:显示多重广播功能群组组员名单; -h或--help:在线帮助; -i或--interfaces:显示网络界面信息表单; -l或--listening:显示监控中的服务器的Socket; -M或--masquerade:显示伪装的网络连线; -n或--numeric:直接使用ip地址,而不通过域名服务器; -N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称; -o或--timers:显示计时器; -p或--programs:显示正在使用Socket的程序识别码和程序名称; -r或--route:显示Routing Table; -s或--statistice:显示网络工作信息统计表; -t或--tcp:显示TCP传输协议的连线状况; -u或--udp:显示UDP传输协议的连线状况; -v或--verbose:显示指令执行过程; -V或--version:显示版本信息; -w或--raw:显示RAW传输协议的连线状况; -x或--unix:此参数的效果和指定"-A unix"参数相同; --ip或--inet:此参数的效果和指定"-A inet"参数相同。
nicstat
可以打印出网卡的每秒流入流出量,每秒发送接收的数据包数量
mpstat
mpstat是Multiprocessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。mpstat最大的特点是:可以查看多核心cpu中每个计算核心的统计数据;而类似工具vmstat只能查看系统整体cpu情况。 mpstat [-P {|ALL}] [internal [count]] 参数 解释 -P {|ALL} 表示监控哪个CPU, cpu在[0,cpu个数-1]中取值 internal 相邻的两次采样的间隔时间、 count 采样的次数,count只能和delay一起使用 当没有参数时,mpstat则显示系统启动以后所有信息的平均值。有interval时,第一行的信息自系统启动以来的平均信息。从第二行开始,输出为前一个interval时间段的平均信息。
输出
mpstat -P ALL Linux 3.13.0-86-generic (iZm5efk9snim7x48j1lxwsZ) 05/10/2017 _x86_64_ (4 CPU) 12:25:49 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 12:25:49 PM all 0.27 0.00 0.11 0.01 0.00 0.00 0.00 0.00 0.00 99.61 12:25:49 PM 0 0.29 0.00 0.11 0.02 0.00 0.00 0.00 0.00 0.00 99.58 12:25:49 PM 1 0.25 0.00 0.10 0.00 0.00 0.00 0.00 0.00 0.00 99.65 12:25:49 PM 2 0.28 0.00 0.11 0.02 0.00 0.00 0.00 0.00 0.00 99.59 12:25:49 PM 3 0.27 0.00 0.11 0.00 0.00 0.00 0.00 0.00 0.00 99.62
字段含义
%user 在internal时间段里,用户态的CPU时间(%),不包含nice值为负进程 (usr/total)*100 %nice 在internal时间段里,nice值为负进程的CPU时间(%) (nice/total)*100 %sys 在internal时间段里,内核时间(%) (system/total)*100 %iowait 在internal时间段里,硬盘IO等待时间(%) (iowait/total)*100 %irq 在internal时间段里,硬中断时间(%) (irq/total)*100 %soft 在internal时间段里,软中断时间(%) (softirq/total)*100 %idle 在internal时间段里,CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间(%) (idle/total)*100
pidstat
可以用来监控单个进程,也可以监控批量进程,查看cpu时间情况,内存使用情况,磁盘使用情况
pidstat -r -u -d -v -w -l -p 17779 [可选参数每次打印间隔时间(秒)] [可选参数一共监控多少次] Linux 3.13.0-86-generic (iZm5efk9snim7x48j1lxwsZ) 05/11/2017 _x86_64_ (4 CPU) 05:48:11 PM UID PID %usr %system %guest %CPU CPU Command 05:48:11 PM 1000 17779 0.02 0.01 0.00 0.03 3 java -Xdebug -Xrunjdwp:transport=dt_socket,address=9527,server=y,suspend=n -Djetty.port=9999 -jar start.jar 05:48:11 PM UID PID minflt/s majflt/s VSZ RSS %MEM Command 05:48:11 PM 1000 17779 0.17 0.00 7953816 1535300 9.34 java -Xdebug -Xrunjdwp:transport=dt_socket,address=9527,server=y,suspend=n -Djetty.port=9999 -jar start.jar 05:48:11 PM UID PID kB_rd/s kB_wr/s kB_ccwr/s Command 05:48:11 PM 1000 17779 0.00 0.13 0.00 java -Xdebug -Xrunjdwp:transport=dt_socket,address=9527,server=y,suspend=n -Djetty.port=9999 -jar start.jar 05:48:11 PM UID PID cswch/s nvcswch/s Command 05:48:11 PM 1000 17779 0.00 0.00 java -Xdebug -Xrunjdwp:transport=dt_socket,address=9527,server=y,suspend=n -Djetty.port=9999 -jar start.jar 05:48:11 PM UID PID threads fd-nr Command 05:48:11 PM 1000 17779 32 155 java -Xdebug -Xrunjdwp:transport=dt_socket,address=9527,server=y,suspend=n -Djetty.port=9999 -jar start.jar
字段
-l 显示命令相信信息
-d 显示磁盘信息
-r 显示内存信息
-u 显示cpu信息
-v 显示内核信息
-w 显示交换区信息
cpu相关
%usr - 当在用户层执行(应用程序)时这个任务的cpu使用率,和 nice 优先级无关。注意这个字段计算的cpu时间不包括在虚拟处理器中花去的时间。
%system - 这个任务在系统层使用时的cpu使用率。
%guest - 任务花费在虚拟机上的cpu使用率(运行在虚拟处理器)。
%CPU - 任务总的cpu使用率。在SMP环境(多处理器)中,如果在命令行中输入-I参数的话,cpu使用率会除以你的cpu数量。
CPU - 正在运行这个任务的处理器编号。
Command - 这个任务的命令名称。
磁盘相关
kB_rd/s - 任务从硬盘上的读取速度(kb)
kB_wr/s - 任务向硬盘中的写入速度(kb)
kB_ccwr/s - 任务写入磁盘被取消的速率(kb)
内存相关
minflt/s - 从内存中加载数据时每秒出现的小的错误的数目,这些不要求从磁盘载入内存页面。
majflt/s - 从内存中加载数据时每秒出现的较大错误的数目,这些要求从磁盘载入内存页面。
VSZ - 虚拟容量:整个进程的虚拟内存使用(kb)
RSS - 长期内存使用:任务的不可交换物理内存的使用量(kb)
vmstat
vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况
vmstat 1 5 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 2356068 293168 4153392 0 0 0 5 1 2 0 0 100 0 0 0 0 0 2356060 293168 4153392 0 0 0 0 851 1630 0 0 100 0 0 0 0 0 2356060 293168 4153392 0 0 0 0 867 1629 1 0 99 0 0 0 0 0 2356060 293168 4153392 0 0 0 0 812 1563 0 0 100 0 0 0 0 0 2356060 293168 4153392 0 0 0 0 859 1712 0 0 100 0 0
字段
r 表示运行队列 b 表示阻塞的进程 swpd 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了 free 空闲的物理内存的大小,我的机器内存总共8G,剩余3415M。 buff 写缓冲大小 cache 读缓冲大小 si 每秒从磁盘读入交换区的大小 so 每秒从交换区存写入磁盘的大小 bi 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备 bo 块设备每秒发送的块数量 in 每秒CPU的中断次数,包括时间中断 cs 每秒上下文切换次数,这个值要越小越好,太大了,要考虑调低线程或者进程的数目 us 用户CPU时间 sy 系统CPU时间,如果太高,表示系统调用时间长如IO操作频繁。 id 空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。 wt 等待IO CPU时间。
lsof
lsof abc.txt 显示开启文件abc.txt的进程 lsof -c abc 显示abc进程现在打开的文件 lsof -c -p 1234 列出进程号为1234的进程所打开的文件 lsof -g gid 显示归属gid的进程情况 lsof +d /usr/local/ 显示目录下被进程开启的文件 lsof +D /usr/local/ 同上,但是会搜索目录下的目录,时间较长 lsof -d 4 显示使用fd为4的进程 lsof -i 用以显示符合条件的进程情况 lsof -i[46] [protocol][@hostname|hostaddr][:service|port] 46 --> IPv4 or IPv6 protocol --> TCP or UDP hostname --> Internet host name hostaddr --> IPv4地址 service --> /etc/service中的 service name (可以不止一个) port --> 端口号 (可以不止一个)
字段
COMMAND:进程的名称 PID:进程标识符 USER:进程所有者 FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等 TYPE:文件类型,如DIR、REG等 DEVICE:指定磁盘的名称 SIZE:文件的大小 NODE:索引节点(文件在磁盘上的标识) NAME:打开文件的确切名称
此外还有其他 ls 命令
lscpu
lspci
tcpdump
#监控8080端口 tcpdump -i eth0 port 8080 #监控源主机是192.168.1.33 tcpdump -i eth0 src host 192.168.1.33 #打印相信输出 tcpdump -i eth0 src port 8080 -X #监控发送端口是8080 并且目标端口是9999 或者 (源地址是192.168.186.131或者 目标 #地址是192.168.186.123) tcpdump -i eth0 src port 8080 and dst port 9999 or \( src host 192.168.186.131 and dst host 192.168.186.123 \)
ss
ss命令用于显示socket状态. 他可以显示PACKET sockets, TCP sockets, UDP sockets, DCCP sockets, RAW sockets, Unix domain sockets等等统计. 它比其他工具展示等多tcp和state信息.
它的性能比netstat好很多,服务器负载高的时候可以选择ss
ss -lptu
参数
ss -l 显示本地打开的所有端口 ss -pl 显示每个进程具体打开的socket ss -t -a 显示所有tcp socket ss -u -a 显示所有的UDP Socekt ss -o state established '( dport = :smtp or sport = :smtp )' 显示所有已建立的SMTP连接 ss -o state established '( dport = :http or sport = :http )' 显示所有已建立的HTTP连接 ss -x src /tmp/.X11-unix/* 找出所有连接X服务器的进程 ss -s 列出当前socket详细信息:
sar
参数说明
-A 等价于 -bBcdqrRuvwWy -I SUM -I XALL -n ALL -P ALL -b 显示I/O和传送速率的统计信息 -B 输出内存页面的统计信息 -c 输出进程统计信息,每秒创建的进程数 -d 输出每一个块设备的活动信息 -i interval 指定间隔时长,单位为秒 -p 显示友好设备名字,以方便查看,也可以和-d 和-n 参数结合使用,比如 -dp 或-np -q 输出进程队列长度和平均负载状态统计信息 -r 输出内存和交换空间的统计信息 -R 输出内存页面的统计信息 -t 读取 /var/log/sa/saDD 的数据时显示其中记录的原始时间,如果没有这个参数使用用户的本地时间 -u 输出CPU使用情况的统计信息 -v 输出inode、文件和其他内核表的统计信息 -V 输出版本号信息 -w 输出系统交换活动信息 -W 输出系统交换的统计信息 -y 输出TTY设备的活动信息 -n {DEV|EDEV|NFS|NFSD|SOCK|ALL} 分析输出网络设备状态统计信息。 DEV 报告网络设备的统计信息 EDEV 报告网络设备的错误统计信息 NFS 报告 NFS 客户端的活动统计信息 NFSD 报告 NFS 服务器的活动统计信息 SOCK 报告网络套接字(sockets)的使用统计信息 ALL 报告所有类型的网络活动统计信息 -x {pid|SELF|ALL} 输出指定进程的统计信息。 pid 用 pid 指定特定的进程 SELF 表示 sar 自身 ALL 表示所有进程 -X {pid|SELF|ALL} 输出指定进程的子进程的统计信息 -I {irq|SUM|ALL|XALL} 输出指定中断的统计信息。 irq 指定中断号 SUM 指定输出每秒接收到的中断总数 ALL 指定输出前16个中断 XALL 指定输出全部的中断信息 -P {cpu|ALL} 输出指定 CPU 的统计信息 -o filename 将输出信息保存到文件 filename -f filename 从文件 filename 读取数据信息。filename 是使用-o 选项时生成的文件。 -s hh:mm:ss 指定输出统计数据的起始时间 -e hh:mm:ss 指定输出统计数据的截至时间,默认为18:00:00
1.输出CPU使用情况的统计信息
sar -u Linux 2.6.18-53.el5 (cnetos5) 01/22/2008 12:00:01 AM CPU %user %nice %system %iowait %steal %idle 12:10:01 AM all 0.02 0.00 0.14 0.01 0.00 99.84 12:20:01 AM all 0.02 0.00 0.12 0.01 0.00 99.86 12:30:01 AM all 0.01 0.00 0.12 0.01 0.00 99.86 Average: all 0.03 0.00 0.13 0.01 0.00 99.84
输出项说明:
CPU | all 表示统计信息为所有 CPU 的平均值。 |
%user | 显示在用户级别(application)运行使用 CPU 总时间的百分比。 |
%nice | 显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。 |
%system | 在核心级别(kernel)运行所使用 CPU 总时间的百分比。 |
%iowait | 显示用于等待I/O操作占用 CPU 总时间的百分比。 |
%steal | 管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。 |
%idle | 显示 CPU 空闲时间占用 CPU 总时间的百分比。 |
2.显示I/O和传送速率的统计信息
sar -b Linux 2.6.18-53.el5 (cnetos5) 01/22/2008 12:00:01 AM tps rtps wtps bread/s bwrtn/s 12:10:01 AM 1.58 0.00 1.58 0.00 16.71 12:20:01 AM 1.09 0.00 1.09 0.00 10.85 12:30:01 AM 1.08 0.00 1.08 0.00 10.74 Average: 1.24 0.00 1.24 0.00 12.70
输出项说明:
tps | 每秒钟物理设备的 I/O 传输总量 |
rtps | 每秒钟从物理设备读入的数据总量 |
wtps | 每秒钟向物理设备写入的数据总量 |
bread/s | 每秒钟从物理设备读入的数据量,单位为 块/s |
bwrtn/s | 每秒钟向物理设备写入的数据量,单位为 块/s |
3.输出内存页面的统计信息
sar -B Linux 2.6.18-53.el5 (cnetos5) 01/22/2008 12:00:01 AM pgpgin/s pgpgout/s fault/s majflt/s 12:10:01 AM 0.00 4.17 9.74 0.00 12:20:01 AM 0.00 2.71 2.24 0.00 12:30:01 AM 0.00 2.69 2.25 0.00 Average: 0.00 3.17 4.07 0.00
输出项说明:
pgpgin/s | 每秒钟从磁盘读入的系统页面的 KB 总数 |
pgpgout/s | 每秒钟向磁盘写出的系统页面的 KB 总数 |
fault/s | 系统每秒产生的页面失效(major + minor)数量 |
majflt/s | 系统每秒产生的页面失效(major)数量 |
4.输出每秒创建的进程数的进程统计信息
sar -c Linux 2.6.18-53.el5 (cnetos5) 01/22/2008 12:00:01 AM proc/s 12:10:01 AM 0.05 12:20:01 AM 0.03 12:30:01 AM 0.03 Average: 0.03
输出项说明:
proc/s | 每秒钟创建的进程数 |
5.输出网络设备状态的统计信息
sar -n EDEV |egrep 'eth0|IFACE' 12:00:01 AM IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s 12:10:01 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 12:20:01 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 12:30:01 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
输出项说明:
IFACE | 网络设备名 |
rxerr/s | 每秒接收的坏包总数 |
txerr/s | 传输包时每秒发生错误的总数 |
coll/s | 传输包时每秒发生冲突(collision)的总数 |
rxdrop/s | 接收包时,由于缺乏缓存,每秒丢弃(drop)包的数量 |
txdrop/s | 传输包时,由于缺乏缓存,每秒丢弃(drop)包的数量 |
txcarr/s | 传输包时,每秒发生的传输错误(carrier-error)的数量 |
rxfram/s | 接收包时,每秒发生帧校验错误(frame alignment error)的数量 |
rxfifo/s | 接收包时,每秒发生队列(FIFO)一出错误的数量 |
txfifo/s | 传输包时,每秒发生队列(FIFO)一出错误的数量 |
6.输出进程队列长度和平均负载状态统计信息
sar -q Linux 2.6.18-53.el5 (cnetos5) 01/22/2008 12:00:01 AM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 12:10:01 AM 0 85 0.02 0.01 0.00 12:20:01 AM 0 85 0.01 0.00 0.00 12:30:01 AM 0 85 0.03 0.01 0.00 Average: 0 85 0.01 0.00 0.00
输出项说明:
runq-sz | 运行队列的长度(等待运行的进程数) |
plist-sz | 进程列表中进程(processes)和线程(threads)的数量 |
ldavg-1 | 最后1分钟的系统平均负载(System load average) |
ldavg-5 | 过去5分钟的系统平均负载 |
ldavg-15 | 过去15分钟的系统平均负载 |
7.输出内存和交换空间的统计信息
sar -r Linux 2.6.18-53.el5 (cnetos5) 01/22/2008 12:00:01 AM kbmemfree kbmemused %memused kbbuffers kbcached kbswpfree kbswpused %swpused kbswpcad 12:10:01 AM 262068 253408 49.16 43884 156456 1048568 0 0.00 0 12:20:01 AM 261572 253904 49.26 44580 156448 1048568 0 0.00 0 12:30:01 AM 260704 254772 49.42 45124 156472 1048568 0 0.00 0 Average: 259551 255925 49.65 46453 156470 1048568 0 0.00 0
输出项说明:
kbmemfree | 可用的空闲内存数量,单位为 KB |
kbmemused | 已使用的内存数量(不包含内核使用的内存),单位为 KB |
%memused | 已使用内存的百分数 |
kbbuffers | 内核缓冲区(buffer)使用的内存数量,单位为 KB |
kbcached | 内核高速缓存(cache)数据使用的内存数量,单位为 KB |
kbswpfree | 可用的空闲交换空间数量,单位为 KB |
kbswpused | 已使用的交换空间数量,单位为 KB |
%swpused | 已使用交换空间的百分数 |
kbswpcad | 交换空间的高速缓存使用的内存数量 |
8.输出内存页面的统计信息
sar -R Linux 2.6.18-53.el5 (cnetos5) 01/22/2008 12:00:01 AM frmpg/s bufpg/s campg/s 12:10:01 AM -0.10 0.23 0.01 12:20:01 AM -0.21 0.29 -0.00 12:30:01 AM -0.36 0.23 0.01 Average: -0.21 0.22 0.00
输出项说明:
frmpg/s | 每秒系统中空闲的内存页面(memory page freed)数量 |
bufpg/s | 每秒系统中用作缓冲区(buffer)的附加内存页面(additional memory page)数量 |
campg/s | 每秒系统中高速缓存的附加内存页面(additional memory pages cached)数量 |
9.输出inode、文件和其他内核表的信息
sar -v Linux 2.6.18-53.el5 (cnetos5) 01/22/2008 12:00:01 AM dentunusd file-sz inode-sz super-sz %super-sz dquot-sz %dquot-sz rtsig-sz %rtsig-sz 12:10:01 AM 7253 576 5126 0 0.00 0 0.00 0 0.00 12:20:01 AM 7253 576 5126 0 0.00 0 0.00 0 0.00 12:30:01 AM 7253 576 5126 0 0.00 0 0.00 0 0.00 Average: 7253 589 5125 0 0.00 0 0.00 0 0.00
输出项说明:
dentunusd | 目录高速缓存中未被使用的条目数量 |
file-sz | 文件句柄(file handle)的使用数量 |
inode-sz | i节点句柄(inode handle)的使用数量 |
super-sz | 由内核分配的超级块句柄(super block handle)数量 |
%super-sz | 已分配的超级块句柄占总超级块句柄的百分比 |
dquot-sz | 已经分配的磁盘限额条目数量 |
%dquot-sz | 分配的磁盘限额条目数量占总磁盘限额条目的百分比 |
rtsig-sz | 已排队的 RT 信号的数量 |
%rtsig-sz | 已排队的 RT 信号占总 RT 信号的百分比 |
10.输出系统交换活动信息
sar -w Linux 2.6.18-53.el5 (cnetos5) 01/22/2008 12:00:01 AM cswch/s 12:10:01 AM 44.74 12:20:01 AM 44.41 12:30:01 AM 44.41 Average: 44.50
输出项说明:
cswch/s | 每秒的系统上下文切换数量 |
11.输出系统交换的统计信息
sar -W Linux 2.6.18-53.el5 (cnetos5) 01/22/2008 12:00:01 AM pswpin/s pswpout/s 12:10:01 AM 0.00 0.00 12:20:01 AM 0.00 0.00 12:30:01 AM 0.00 0.00 Average: 0.00 0.00
输出项说明:
pswpin/s | 每秒系统换入的交换页面(swap page)数量 |
pswpout/s | 每秒系统换出的交换页面(swap page)数量 |
12.输出TTY设备的活动信息
sar -y Linux 2.6.18-53.el5 (cnetos5) 01/22/2008 12:00:01 AM TTY rcvin/s xmtin/s framerr/s prtyerr/s brk/s ovrun/s 12:10:01 AM 0 0.00 0.00 0.00 0.00 0.00 0.00 12:10:01 AM 1 0.00 0.00 0.00 0.00 0.00 0.00 12:20:01 AM 0 0.00 0.00 0.00 0.00 0.00 0.00 12:20:01 AM 1 0.00 0.00 0.00 0.00 0.00 0.00 12:30:01 AM 0 0.00 0.00 0.00 0.00 0.00 0.00 12:30:01 AM 1 0.00 0.00 0.00 0.00 0.00 0.00 ……………… Average: 0 0.00 0.00 0.00 0.00 0.00 0.00 Average: 1 0.00 0.00 0.00 0.00 0.00 0.00
输出项说明:
TTY | TTY 串行设备号 |
rcvin/s | 每秒接收的中断数量 |
xmtin/s | 每秒传送的中断数量 |
framerr/s | 每秒发生的帧错误数(frame error)量 |
prtyerr/s | 每秒发生的奇偶校验错误(parity error)数量 |
brk/s | 每秒发生的暂停(break)数量 |
ovrun/s | 每秒发生的溢出错误(overrun error)数量 |
13.时间段输出
#第三天7点到10点 IO和传输速率相关信息 sar -b -s 07:00:00 -e 10:00:00 -f /var/log/sa/sa03 #第三天7点到10点 eth0网卡的流量信息 sar -n DEV -s 07:00:00 -e 10:00:00 -f /var/log/sa/sa03 | egrep 'eth0|IFACE' #第三天7点到10点 进程队列长度和平级负载状态统计信息 sar -q -s 07:00:00 -e 10:00:00 -f /var/log/sa/sa03
参考
全能系统监控工具dstat
linux wa%过高,iostat查看io状况
ifstat命令
linux lsof命令详解
Linux tcpdump命令详解
几种缺页中断算法(FIFO,LRU与LFU)的实现过程
linux内存管理2:内存映射和需求分页(英文名字:demand Paging,又叫:缺页中断)
Linux设备模型——设备驱动模型和sysfs文件系统解读
Linux常用系统性能监控命令
DNS解析过程详解
linux命令大全