linux系统监控命令

ps命令

命令:ps -mp pid -o THREAD,tid,time   或者  ps -Lfp pid

结果展示:

这个命令的作用,主要是可以获取到对应一个进程下的线程的一些信息。 比如你想分析一下一个java进程的一些运行瓶颈点,可以通过该命令找到所有当前Thread的占用CPU的时间,也就是这里的最后一列。

比如这里找到了一个TID : 30834 ,所占用的TIME时间最高。

通过 printf "%x\n" 30834 首先转化成16进制, 继续通过jstack命令dump出当前的jvm进程的堆栈信息。 通过Grep命令即可以查到对应16进制的线程id信息,很快就可以找到对应最耗CPU的代码快在哪。

简单的解释下,jstack下这一串线程信息内容:

Java代码 
 

  1. "DboServiceProcessor-4-thread-295" daemon prio=10 tid=0x00002aab047a9800 nid=0x7d9b waiting on condition [0x0000000046f66000]

nid : 对应的linux操作系统下的tid,就是前面转化的16进制数字

tid: 这个应该是jvm的jmm内存规范中的唯一地址定位,如果你详细分析jvm的一些内存数据时用得上,我自己还没到那种程度,所以先放下

top命令

命令:top -Hp pid

结果显示:

和前面的效果一下,你可以实时的跟踪并获取指定进程中最耗cpu的线程。 再用前面的方法提取到对应的线程堆栈信息。

判断I/O瓶颈

mpstat命令

命令:mpstat -P ALL 1 1000

结果显示:

注意一下这里面的%iowait列,CPU等待I/O操作所花费的时间。这个值持续很高通常可能是I/O瓶颈所导致的。

通过这个参数可以比较直观的看出当前的I/O操作是否存在瓶颈

iostat命令

命令: iostat -m -x 1 1000

同样你可以观察对应的CPU中的%iowait数据,除此之外iostat还提供了一些更详细的I/O状态数据,比如比较重要的有:

avgqu-sz :  The average queue length of the requests that were issued to the device. (磁盘队列的请求长度,正常的话2,3比较好。可以和cpu的load一样的理解)

await : The average time (in milliseconds) for I/O requests issued to the device to be served. (代表一个I/O操作从wait到完成的总时间)

svctm和%util都是代表处理该I/O请求花费的时间和CPU的时间比例。 判断是否瓶颈时,这两个参数不是主要的

r/s w/s 和 rMB/s  wMB/s 都是代表当前系统处理的I/O的一些状态,前者是我们常说的tps,后者就是吞吐量。这也是评价一个系统的性能指标

pid命令

命令: pidstat -p pid -u -d -t -w -h 1 1000

结果显示:

相当实用的一个命令,可以基于当个进程分析对应的性能数据,包括CPU,I/O,IR , CS等,可以方便开发者更加精细化的观察系统的运行状态。不过pidstat貌似是在2.6内核的一些较新的版本才有,需要安装sysstat包。

ubuntu下,可以通过sudo apt-get install sysstat进行安装。

sar命令

命令:sar -x pid 1 1000

sar也可以指定对应的pid,关注固定的几个参数,没有pidstat那么强大。 看不到对应的I/O, IR等信息。

sar的功能可以覆盖mpstat , iostat的相关功能。

dstat命令

命令:dstat -y --tcp 1 1000

通过dstat --tcp可以比较方便的看到当前的tcp的各种状态,不需要每次netstat -nat去看

其他命令

netstat -natp  :  查看对应的网络链接,关注下Recv-Q , Send-Q , State。

lsof -p pid :  查找对应pid的文件句柄

lsof -i : 80  : 查找对应端口被哪个进程占用

lsof  /tmp/1.txt :查找对应文件被哪个进程占用

tcpdump / wireshark :抓包分析工具

jstat / jmap / jstack / jps 等一系列的java监控命令

iostat

iostat 命令用来显示存储子系统的详细信息,通常用它来监控磁盘 I/O 的情况。要特别注意 iostat 统计结果中的 %iowait 值,太大了表明你的系统存储子系统性能低下。

meminfo 和 free

Meminfo 可让你获取内存的详细信息,你可以使用 cat 和 grep 命令来显示 meminfo 信息:

?


1

cat/proc/meminfo

另外你可以使用 free 命令来显示动态的内存使用信息,free 只是给你大概的内存信息,而 meminfo 提供的信息更加详细。例如在 oschina 上的 free 命令执行结果:

mpstat

mpstat mpstat是MultiProcessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。

再来看看 oschina 上的 mpstat 命令执行结果:

关于 mpstat 执行结果中的参数意思请参考此贴

netstat

Netstat 和 ps 命令类似,是 Linux 管理员基本上每天都会用的工具,它显示了大量跟网络相关的信息,例如 socket 的使用、路由、接口、协议、网络等等,下面是一些常用的参数:

?


1

2

3

4

-a Show all socket information

-r Show routing information

-i Show network interface statistics

-s Show network protocol statistics

nmon

Nmon, 是 Nigel‘s Monitor 的缩写,是一个使用很普遍的开源工具,用以监控 Linux 系统的性能。Nmon 监控多个子系统的性能数据,例如处理器的使用率、内存使用率、队列、磁盘I/O统计、网络I/O统计、内存页处理和进程信息。Nmon 也提供了一个图形化的工具:

要运行 nmon,你可以在命令行中启动它,然后选择要监控的子系统,这些子系统都对应有一个快捷键,例如输入 c 可查看 CPU 信息,m用于查看内存,d用来查看磁盘信息等,你也可以使用 -f 命令将 nmon 的执行结果保存到一个 CSV 文件中,便于日后分析。

在每日的监控工作中,我发现 nmon 是我最常用的工具。

pmap

pmap 命令用来报告每个进程占用内存的详细情况,可用来看是否有进程超支了,该命令需要进程 id 作为参数。

ps 和 pstree

ps 和 pstree 命令是 Linux 系统管理员最好的朋友,都可以用来列表正在运行的所有进程。ps 告诉你每个进程占用的内存和 CPU 处理时间,而 pstree 显示的信息没那么详细,但它以树形结构显示进程之间的依赖关系,包括子进程信息。一旦发现某个进程有问题,你可以使用 kill 来杀掉它。

sar

sar 程序是系统监控工具里的瑞士军刀。该程序包含三个工具:sar 用来显示数据,sa1 和 sa2 用来收集数据并保存。sar 可用来显示 CPU 使用率、内存页数据、网络 I/O 和传输统计、进程创建活动和磁盘设备的活动详情。sar 和 nmon 最大的不同就是 sar 跟适合用作长期的监控,而 nmon 可以让你快速的了解系统当前状态。

strace

strace 经常被认为是程序员调试的工具,但不止如此。它可以记录进程进行系统调用的详情,因此它也是一个非常好的诊断工具,例如你可以使用它来找出某个程序正在打开某个配置文件。

Strace 也有一个缺陷,但它在跟踪某个进程时会让该进程的性能变得非常差,因此请谨慎使用。

tcpdump

Tcpdump 是一个简单、可靠的网络监控工具,用来做基本的协议分析,看看那些进程在使用网络以及如何使用网络。当然,如果你要获取跟详细的信息,你应该使用 Wireshark (下面我们会介绍).

top

top 命令显示当前的活动进程,默认它是按消耗 CPU 的厉害程度进行排序,每5秒钟刷新一次列表,你也可以选择不同的排序方式,例如 m 是按内存占用方式进行排序的快捷键。

uptime

uptime 命令告诉你这台服务器从开机启动到现在已经运行了多长时间了。同时也包含了从启动到现在服务器的平均负载情况,看看 oschina 的数据:

我已经忘了上次是为什么重启机器了,好像是换了个机柜。

vmstat

你可以使用 vmstat 来监控虚拟内存,一般 Linux 上的开发者喜欢使用虚拟内存来获得最佳的存储性能。该命令报告关于内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。由 vmstat 命令生成的报告可以用于平衡系统负载活动。系统范围内的这些统计信息(所有的处理器中)都计算出以百分比表示的平均值,或者计算其总和。

在 oschina 上执行 vmstat 的结果:

Wireshark

Wireshark, 前身是 Ethereal ,是一个网络协议检测程序,让您经由程序抓取运行的网站的相关资讯,包括每一封包流向及其内容、资讯可依操作系统语系看出,方便查看、监控TCP session动态等等.

这里罗列的是大多数最有价值的 Linux 监控程序

1、lsof 简介

lsof 是 linux 下的一个非常实用的系统级的监控、诊断工具。
它的意思是 List Open Files,很容易你就记住了它是 “ls + of”的组合~
它可以用来列出被各种进程打开的文件信息,记住:linux 下 “一切皆文件”
包括但不限于 pipes, sockets, directories, devices, 等等。
因此,使用 lsof,你可以获取任何被打开文件的各种信息。

只需输入 lsof 就可以生成大量的信息,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。

lsof 的示例输出:

?


1

2

3

4

5

6

7

[email protected]:~/lab0# lsof

COMMAND     PID   TID       USER   FD      TYPE     DEVICE SIZE/OFF      NODE NAME

systemd       1             root  cwd       DIR        8,6     4096          2 /

systemd       1             root  rtd       DIR        8,6     4096          2 /

systemd       1             root  txt       REG        8,6  2273340    1834909/usr/lib/systemd/systemd

systemd       1             root  mem       REG        8,6   210473    1700647/lib/libnss_files-2.15.s

...

2、lsof 常用用法

2.1 监控打开的文件、设备

查看文件、设备被哪些进程占用

?


1

2

3

4

5

6

7

8

9

# lsof /dev/tty1

COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFFNODE NAME

bash      1770 jian    0u   CHR    4,1      0t0 1045/dev/tty1

bash      1770 jian    1u   CHR    4,1      0t0 1045/dev/tty1

bash      1770 jian    2u   CHR    4,1      0t0 1045/dev/tty1

bash      1770 jian  255u   CHR    4,1      0t0 1045/dev/tty1

startx     1845 jian    0u   CHR    4,1      0t0 1045/dev/tty1

startx     1845 jian    1u   CHR    4,1      0t0 1045/dev/tty1

...

2.2 监控文件系统

指定目录、挂载点,可以看到有哪些进程打开了其下的文件:

?


1

2

3

4

# lsof /data/

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFFNODE NAME

bash   15983 jian  cwd    DIR    8,5     4096 8252/data/backup

...

这在 umount 某个文件系统失败时非常有用(通常会报该 FS is busy)。

列出某个目录(挂载点 如 /home 也行)下被打开的文件:

?


1

2

3

4

5

6

# lsof +D /var/log/

COMMAND   PID   USER  FD   TYPE DEVICE SIZE/OFF  NODE NAME

rsyslogd  488 syslog   1w   REG    8,1     1151 268940/var/log/syslog

rsyslogd  488 syslog   2w   REG    8,1     2405 269616/var/log/auth.log

console-k 144   root   9w   REG    8,1    10871 269369/var/log/ConsoleKit/history

列出被指定进程名打开的文件:

?


1

2

3

4

5

6

7

8

9

10

# lsof -c ssh -c init

COMMAND    PID   USER   FD   TYPE DEVICE SIZE/OFF  NODE NAME

init         1       root  txt    REG        8,1   124704  917562/sbin/init

init         1       root  mem    REG        8,1  1434180 1442625/lib/i386-linux-gnu/libc-2.13.so

init         1       root  mem    REG        8,1    30684 1442694/lib/i386-linux-gnu/librt-2.13.so

...

ssh-agent 1528 lakshmanan    1u   CHR        1,3      0t0    4369/dev/null

ssh-agent 1528 lakshmanan    2u   CHR        1,3      0t0    4369/dev/null

ssh-agent 1528 lakshmanan    3u  unix 0xdf70e240      0t0   10464/tmp/ssh-sUymKXxw1495/agent.1495

2.3 监控进程

指定进程号,可以查看该进程打开的文件:

?


1

2

3

4

5

6

7

8

9

10

# lsof -p 2064

COMMAND  PID USER   FD   TYPE     DEVICE SIZE/OFF   NODE NAME

firefox 2064 jian  cwd    DIR        8,6     4096 1571780/home/jian

firefox 2064 jian  rtd    DIR        8,6     4096       2 /

firefox 2064 jian  txt    REG        8,6    44224 1985670/usr/lib/firefox-12.0/firefox

firefox 2064 jian  mem    REG        8,6 14707012  925361/usr/share/fonts/chinese/msyhbd.ttf

firefox 2064 jian  mem    REG        8,6 15067744  925362/usr/share/fonts/chinese/msyh.ttf

firefox 2064 jian  mem    REG        8,6 16791251 1701681/usr/share/fonts/wenquanyi/wqy-zenhei.ttc

firefox 2064 jian  mem    REG       0,16 67108904   10203/dev/shm/pulse-shm-3021850167

...

当你想要杀掉某个用户所有打开的文件、设备,你可以这样:

?


1

kill-9 `lsof-t -u lakshmanan`

此处 -t 的作用是单独的列出 进程 id 这一列。

关于杀死进程的 4 种方式,请参考:

http://www.thegeekstuff.com/2009/12/4-ways-to-kill-a-process-kill-killall-pkill-xkill/

2.4 监控网络

查看指定端口有哪些进程在使用(lsof -i 列出所有的打开的网络连接):

?


1

2

3

4

5

# lsof -i:22

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFFNODE NAME

sshd    1569 root    3u  IPv4  10303      0t0  TCP *:ssh(LISTEN)

sshd    1569 root    4u  IPv6  10305      0t0  TCP *:ssh(LISTEN)

...

列出被某个进程打开所有的网络文件:

?


1

lsof-i -a -p 234

或者

?


1

lsof-i -a -cssh

列出所有 tcp、udp 连接:

?


1

2

lsof-i tcp;

lsof-i udp;

列出所有 NFS 文件:

?


1

lsof-N -u lakshmanan -a

查看指定网口有哪些进程在使用:

?


1

2

3

4

5

6

# lsof [email protected]

COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFFNODE NAME

skype      1909 jian   54u  IPv4   9116      0t0  TCP 192.168.1.91:40640->64.4.23.153:40047 (ESTABLISHED)

pidgin     1973 jian    7u  IPv4   6599      0t0  TCP 192.168.1.91:59311->hx-in-f125.1e100.net:https (ESTABLISHED)

pidgin     1973 jian   13u  IPv4   9260      0t0  TCP 192.168.1.91:54447->by2msg3010511.phx.gbl:msnp (ESTABLISHED)

...

3、更多使用技巧

3.1 监控用戶

查看指定用戶打开的文件(lsof -u ^lakshmanan 可以排除某用户):

?


1

2

3

4

5

6

7

8

9

# lsof -u messagebus

COMMAND    PID       USER   FD   TYPE     DEVICE SIZE/OFF   NODE NAME

dbus-daem 1805 messagebus  cwd    DIR        8,6     4096       2 /

dbus-daem 1805 messagebus  rtd    DIR        8,6     4096       2 /

dbus-daem 1805 messagebus  txt    REG        8,6  1235361 1834948/usr/bin/dbus-daemon

dbus-daem 1805 messagebus  mem    REG        8,6   210473 1700647/lib/libnss_files-2.15.so

dbus-daem 1805 messagebus  mem    REG        8,6   190145 1700642/lib/libnss_nis-2.15.so

dbus-daem 1805 messagebus  mem    REG        8,6   490366 1700636/lib/libnsl-2.15.so

...

3.2 监控应用程序

查看指定程序打开的文件:

?


1

2

3

4

5

6

7

8

9

# lsof -c firefox

COMMAND  PID USER   FD   TYPE     DEVICE SIZE/OFF   NODE NAME

firefox 2064 jian  cwd    DIR        8,6     4096 1571780/home/jian

firefox 2064 jian  rtd    DIR        8,6     4096       2 /

firefox 2064 jian  txt    REG        8,6    44224 1985670/usr/lib/firefox-12.0/firefox

firefox 2064 jian  mem    REG        8,6 14707012  925361/usr/share/fonts/chinese/msyhbd.ttf

firefox 2064 jian  mem    REG        8,6 15067744  925362/usr/share/fonts/chinese/msyh.ttf

firefox 2064 jian  mem    REG        8,6 16791251 1701681/usr/share/fonts/wenquanyi/wqy-zenhei.ttc

...

4、命令模式技巧

4.1 组合逻辑查询条件

只有多个查询条件都满足, 用 "-a" 参数,默认是 -o 。

?


1

2

3

4

5

6

7

# lsof -a -c bash -u root

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME

bash   1986 root  cwd    DIR    8,6     4096 1701593/root/lab

bash   1986 root  rtd    DIR    8,6     4096       2 /

bash   1986 root  txt    REG    8,6  1994157 1700632/bin/bash

bash   1986 root  mem    REG    8,6  9690800  405214/usr/lib/locale/locale-archive

bash   1986 root  mem    REG    8,6   210473 1700647/lib/libnss_files-2.15.so

4.2 lsof 命令的重复执行模式:

基于给定的参数延时多少秒重复执行 lsof

+r 表示 当没有文件被打开的时候,repeat mode 将自行结束。

-r 表示 不管文件是否存在或者被打开,它都将执行,直到你中断它。

每个循环的输出使用 ‘=======’ 做分隔符,你也可以用 ‘-r’ | ‘+r’ 指定延时时间。

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

# lsof -u lakshmanan -c init -a -r5

=======

=======

COMMAND   PID       USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME

inita.sh 2971 lakshmanan  cwd    DIR    8,1     4096  393218/home/lakshmanan

inita.sh 2971 lakshmanan  rtd    DIR    8,1     4096       2 /

inita.sh 2971 lakshmanan  txt    REG    8,1    83848  524315/bin/dash

inita.sh 2971 lakshmanan  mem    REG    8,1  1434180 1442625/lib/i386-linux-gnu/libc-2.13.so

inita.sh 2971 lakshmanan  mem    REG    8,1   117960 1442612/lib/i386-linux-gnu/ld-2.13.so

inita.sh 2971 lakshmanan    0u   CHR  136,4      0t0       7/dev/pts/4

inita.sh 2971 lakshmanan    1u   CHR  136,4      0t0       7/dev/pts/4

inita.sh 2971 lakshmanan    2u   CHR  136,4      0t0       7/dev/pts/4

inita.sh 2971 lakshmanan   10r   REG    8,1       20  393578/home/lakshmanan/inita.sh

=======

以上输出是前 5 秒没有输出,然后 “inita.sh” 启动后,开始有了输出。

5、最后的技巧

关于磁盘空间告警 df -h --max=1 与 du -hx --max=1 显示不一致的问题,

最常见的的还是下面这种情况:

lsof|grep -i delete

看看被删除的文件:有些删了文件,但是进程没 reload,那些空间还是占用的,你可以理解为类似 windows 下的进程句柄没释放的概念吧~ 只是 windows 下如果有文件被进程使用,你一般是删不掉的,而 linux 虽然不做删除限制,但却要等到进程使用完文件才能完全释放,以防止进程奔溃,这是操作系统对资源的管理差异吧~
例如 nginx 会有很多临时文件占用了 /tmp 目录,删掉后,依然占用着空间,

此时你可以:

pkill -9 nginx && /etc/init.d/nginx restart

1.找出瓶颈

2.硬盘(存储)瓶颈

3.CPU及内存瓶颈

4.网络瓶颈

#1: top - 进程活动

top提供一个当前运行系统实时动态的视图,也就是正在运行进程。在默认情况下,显示系统中CPU使用率最高的任务,并每5秒钟刷新一次。


图01.Linux top命令

常用热键

热键 用途
t 显示摘要信息开关.
m 显示内存信息开关.
A 分类显示系统不同资源的使用大户。有助于快速识别系统中资源消耗多的任务。
f 添加删除所要显示栏位.
o 调整所要显示栏位的顺序.
r 调整一个正在运行的进程Nice值.
k 结束一个正在运行的进程.
z 彩色/黑白显示开关

#2:vmstat -系统活动、硬件及系统信息

使用vmstat命令可以得到关于进程、内存、内存分页、堵塞IO、traps及CPU活动的信息。

# 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      0 2540988 522188 5130400    0    0     2    32    4    2  4  1 96  0  0

1  0      0 2540988 522188 5130400    0    0     0   720 1199  665  1  0 99  0  0

0  0      0 2540956 522188 5130400    0    0     0     0 1151 1569  4  1 95  0  0

0  0      0 2540956 522188 5130500    0    0     0     6 1117  439  1  0 99  0  0

0  0      0 2540940 522188 5130512    0    0     0   536 1189  932  1  0 98  0  0

0  0      0 2538444 522188 5130588    0    0     0     0 1187 1417  4  1 96  0  0

0  0      0 2490060 522188 5130640    0    0     0    18 1253 1123  5  1 94  0  0

显示内存使用详细信息

# vmstat -m

显示内存活动/不活动的信息

# vmstat -a

#3: w - 显示谁已登录,他们正在做什么?

w命令显示系统当前用户及其运行进程的信息。

# w username

# w vivek

输出样例:

17:58:47 up 5 days, 20:28,  2 users,  load average: 0.36, 0.26, 0.24

USER     TTY      FROM              [email protected]   IDLE   JCPU   PCPU WHAT

root     pts/0    10.1.3.145       14:55    5.00s  0.04s  0.02s vim /etc/resolv.conf

root     pts/1    10.1.3.145       17:43    0.00s  0.03s  0.00s w

#4:uptime - 告诉系统已经运行了多久?

uptime命令过去只显示系统运行多久。现在,可以显示系统运行多久、当前有多少的用户登录、在过去的1,5,15分钟里平均负载时多少。

# uptime

输入样例:

18:02:41 up 41 days, 23:42,  1 user,  load average: 0.00, 0.00, 0.00

1可以被认为是最优的负载值。负载是会随着系统不同改变得。单CPU系统1-3和SMP系统6-10都是可能接受的。

#5:ps - 显示进程

ps命令显示当前运行进程的快照。使用-A或-e显示所有进程。

# ps -A

输出样例:

PID TTY          TIME CMD

1 ?        00:00:02 init

2 ?        00:00:02 migration/0

3 ?        00:00:01 ksoftirqd/0

4 ?        00:00:00 watchdog/0

5 ?        00:00:00 migration/1

6 ?        00:00:15 ksoftirqd/1

....

.....

4881 ?        00:53:28 java

4885 tty1     00:00:00 mingetty

4886 tty2     00:00:00 mingetty

4887 tty3     00:00:00 mingetty

4888 tty4     00:00:00 mingetty

4891 tty5     00:00:00 mingetty

4892 tty6     00:00:00 mingetty

4893 ttyS1    00:00:00 agetty

12853 ?        00:00:00 cifsoplockd

12854 ?        00:00:00 cifsdnotifyd

14231 ?        00:10:34 lighttpd

14232 ?        00:00:00 php-cgi

54981 pts/0    00:00:00 vim

55465 ?        00:00:00 php-cgi

55546 ?        00:00:00 bind9-snmp-stat

55704 pts/1    00:00:00 ps

ps与top非常相似,但ps提供更多的信息。

输出长格式

# ps -Al

输出附加全格式(显示进程在执行时传入的参数)

# ps -AlF

显示进程结构

# ps -AlFH

在进程后显示线程

# ps -AlLm

打印服务器上所有进程

# ps ax

# ps axu

打印进程树

# ps -ejH

# ps axjf

# pstree

打印安全信息

# ps -eo euser,ruser,suser,fuser,f,comm,label

# ps axZ

# ps -eM

查看使用Vivek用户名运行的进程

# ps -U vivek -u vivek u

设置自定义输出格式

# ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm

# ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm

# ps -eopid,tt,user,fname,tmout,f,wchan

只显示Lighttpd的进程ID

# ps -C lighttpd -o pid=

或者

# pgrep lighttpd

或者

# pgrep -u vivek php-cgi

显示PID为55977的进程名称

# ps -p 55977 -o comm=

找出消耗内存最多的前10名进程

# ps -auxf | sort -nr -k 4 | head -10

找出使用CPU最多的前10名进程

# ps -auxf | sort -nr -k 3 | head -10

#6:free - 内存使用情况

free命令显示系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。

# free

输出样例:

total       used       free     shared    buffers     cached

Mem:      12302896    9739664    2563232          0     523124    5154740

-/+ buffers/cache:    4061800    8241096

Swap:      1052248          0    1052248

#7:iostat - CPU平均负载,硬盘活动

iostat命令可报告中央处理器(CPU)的统计信息,各种设备、分区及网络文件系统输入/输出的统计信息。

# iostat

输出样例:

Linux 2.6.18-128.1.14.el5 (www03.nixcraft.in)  06/26/2009

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

3.50    0.09    0.51    0.03    0.00   95.86

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn

sda              22.04        31.88       512.03   16193351  260102868

sda1              0.00         0.00         0.00       2166        180

sda2             22.04        31.87       512.03   16189010  260102688

sda3              0.00         0.00         0.00       1615          0

#8:sar - 搜集和报告系统活动

sar命令用来搜集、报告和储存系统活动信息。查看网路计数器,输入:

# sar -n DEV | more

显示最近24小时网络计数器

# sar -n DEV -f /var/log/sa/sa24 | more

你亦可以用sar显示实时情况

# sar 4 5

输出样例:

Linux 2.6.18-128.1.14.el5 (www03.nixcraft.in)   06/26/2009

06:45:12 PM       CPU     %user     %nice   %system   %iowait    %steal     %idle

06:45:16 PM       all      2.00      0.00      0.22      0.00      0.00     97.78

06:45:20 PM       all      2.07      0.00      0.38      0.03      0.00     97.52

06:45:24 PM       all      0.94      0.00      0.28      0.00      0.00     98.78

06:45:28 PM       all      1.56      0.00      0.22      0.00      0.00     98.22

06:45:32 PM       all      3.53      0.00      0.25      0.03      0.00     96.19

Average:          all      2.02      0.00      0.27      0.01      0.00     97.70

#9:mpstat - 多处理器使用率

mpstat命令可以显示所有可用处理器的使用情况,处理器编号从0开始。mpstat -P ALL显示每个处理器的平均使用率。

# mpstat -P ALL

输出样例:


Linux 2.6.18-128.1.14.el5 (www03.nixcraft.in)   06/26/2009

06:48:11 PM CPU   %user   %nice    %sys %iowait    %irq   %soft %steal   %idle    intr/s

06:48:11 PM all    3.50    0.09    0.34    0.03    0.01    0.17    0.00   95.86   1218.04

06:48:11 PM    0    3.44    0.08    0.31    0.02    0.00    0.12    0.00   96.04   1000.31

06:48:11 PM    1    3.10    0.08    0.32    0.09    0.02    0.11    0.00   96.28     34.93

06:48:11 PM    2    4.16    0.11    0.36    0.02    0.00    0.11    0.00   95.25      0.00

06:48:11 PM    3    3.77    0.11    0.38    0.03    0.01    0.24    0.00   95.46     44.80

06:48:11 PM    4    2.96    0.07    0.29    0.04    0.02    0.10    0.00   96.52     25.91

06:48:11 PM    5    3.26    0.08    0.28    0.03    0.01    0.10    0.00   96.23     14.98

06:48:11 PM    6    4.00    0.10    0.34    0.01    0.00    0.13    0.00   95.42      3.75

06:48:11 PM    7    3.30    0.11    0.39    0.03    0.01    0.46    0.00   95.69     76.89

#10: pmap - 进程的内存使用

pmap命令可以显示进程的内存映射,使用这个命令可以找出造成内存瓶颈的原因。

# pmap -d PID

显示PID为47394进程的内存信息。

# pmap -d 47394

输出样例:

47394:   /usr/bin/php-cgi

Address           Kbytes Mode Offset           Device    Mapping

0000000000400000    2584 r-x-- 0000000000000000 008:00002 php-cgi

0000000000886000     140 rw--- 0000000000286000 008:00002 php-cgi

00000000008a9000      52 rw--- 00000000008a9000 000:00000   [ anon ]

0000000000aa8000      76 rw--- 00000000002a8000 008:00002 php-cgi

000000000f678000    1980 rw--- 000000000f678000 000:00000   [ anon ]

000000314a600000     112 r-x-- 0000000000000000 008:00002 ld-2.5.so

000000314a81b000       4 r---- 000000000001b000 008:00002 ld-2.5.so

000000314a81c000       4 rw--- 000000000001c000 008:00002 ld-2.5.so

000000314aa00000    1328 r-x-- 0000000000000000 008:00002 libc-2.5.so

000000314ab4c000    2048 ----- 000000000014c000 008:00002 libc-2.5.so

.....

......

..

00002af8d48fd000       4 rw--- 0000000000006000 008:00002 xsl.so

00002af8d490c000      40 r-x-- 0000000000000000 008:00002 libnss_files-2.5.so

00002af8d4916000    2044 ----- 000000000000a000 008:00002 libnss_files-2.5.so

00002af8d4b15000       4 r---- 0000000000009000 008:00002 libnss_files-2.5.so

00002af8d4b16000       4 rw--- 000000000000a000 008:00002 libnss_files-2.5.so

00002af8d4b17000 768000 rw-s- 0000000000000000 000:00009 zero (deleted)

00007fffc95fe000      84 rw--- 00007ffffffea000 000:00000   [ stack ]

ffffffffff600000    8192 ----- 0000000000000000 000:00000   [ anon ]

mapped: 933712K    writeable/private: 4304K    shared: 768000K

最后一行非常重要:

* mapped: 933712K 内存映射所占空间大小

* writeable/private: 4304K 私有地址空间大小

* shared: 768000K 共享地址空间大小

#11和#12: netstat和ss - 网络相关信息

netstat可以显示网络链接、路由表信息、接口统计信息、伪装链接和多播成员(multicast memberships),ss命令用来显示网络套接字信息,它允许显示类似netstat一样的信息。关于ss和netstat使用,可参考下列资源。

#13: iptraf - 网络实时信息

iptraf是一个可交互式的IP网络监控工具。它可以生成多种网络统计信息包括:TCP信息、UDP数量、ICMP和OSPF信息、以太网负载信息、节点状态、IP校验错误等。有下面几种信息格式:

  • 不同网络TCP链接传输量
  • 不同网络接口IP传输量
  • 不同协议网络传输量
  • 不同TCP/UDP端口和不同包大小网络传输量
  • 不同第二层地址网络传输量


图02:一般接口信息:不同网络接口IP传输量


图03:不同网络TCP链接传输量

#14:tcpdump:详细的网络流量分析

tcpdump是一个简单网络流量转储工具,然而要使用好需要对TCP/IP协议非常熟悉。例如要显示关于DNS的网络流量,输入:

# tcpdump -i eth1 ‘udp port 53‘

显示所有进出80端口IPv4 HTTP包,也就是只打印包含数据的包。例如:SYN、FIN包和ACK-only包输入:

# tcpdump ‘tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)‘

显示所有到的FTP会话,输入:

# tcpdump -i eth1 ‘dst 202.54.1.5 and (port 21 or 20‘

显示所有到192.168.1.5的HTTP会话

# tcpdump -ni eth0 ‘dst 192.168.1.5 and tcp and port http‘

用wireshark浏览转储文件中的详细信息,输入:

# tcpdump -n -i eth1 -s 0 -w output.txt src or dst port 80

#15:strace - 系统调用

追踪系统调用和型号,这对于调试Web服务器和其他服务器非常有用。了解怎样追踪进程和他功能。

#16:/proc文件系统 - 各种内核信息

/proc目录下文件提供了很多不同硬件设备和内核的详细信息。更多详情参见Linux kernel /proc。一般/proc例如:

# cat /proc/cpuinfo

# cat /proc/meminfo

# cat /proc/zoneinfo

# cat /proc/mounts

#17:Nagios - 服务器及网络监控

Nagios 是一款非常流行的系统及网络监控软件。你可以轻松监控所有的主机、网络设备及服务。它能在发生故障和重新恢复后发送警讯。FAN是"Fully Automated Nagios"的缩写。FAN的目标就是由Nagios社群提供Nagios的安装。为了使安装Nagios服务器更加容易,FAN提供一个标准ISO格式的光盘镜像。此发行版中还会包含一组增强用户使用体验的工具。

#18:Cacti - 基于Web的监控工具

Cacti是一套完成的网络图形化解决方案,基于RRDTool的资料存储和图形化功能。Cacti提供一个快速的轮询器、进阶的图形化模板、多种数据采集方法和用户管理功能。这些功能都拥有非常友好易用的界面,确保可以部署在一个包含数百台设备的复杂网络中。它提供关于网络、CPU、内存、已登录用户、Apache、DNS等信息。

#19:KDE System Guard

KSysguard是在KDE桌面下一个网络化的系统监控工具。这个工具可以通过SSH会话运行。它提供很多功能,例如可以监控本机和远程主机的客户端/服务器架构,前端图形界面使用所谓传感器得到信息并展现出来。传感器返回的可以是一个简单的数值或是一组表格的信息。针对不同的信息类型,提供一个或多个显示。这些显示被组织多个工作表中,可以工作表可以独体储存和加载。所以,KSysguard不只是一个简单的任务管理器,还是一个可以控制多台服务器的强大工具。


图05:KDE System Guard

#20:Gnome System Monitor

System Monitor可以显示系统基本信息、监控系统进程、系统资源及文件系统使用率。你也可以使用System Monitor监控和修改系统行为。尽管没有KDE System Guard功能强大,但其提供的基本信息对于入门用户还是非常有用的。

* 显示关于计算机硬件和软件的各种基本信息。

* Linux内核版本

* GNOME版本

* 硬件

* 安装的内存

* 处理器及其速度

* 系统状态

* 当前可用的硬盘空间

* 进程

* 内存及交换空间

* 网络使用率

* 文件系统

* 所有挂载的文件系统及其基本信息


图06:The Gnome System Monitor application

时间: 2024-10-11 22:26:13

linux系统监控命令的相关文章

常用的linux系统监控命令

常用的linux系统监控命令 博客分类: linux 服务器 记录一下自己常用的linux系统命令,方便以后查阅,发觉记忆越来越不行了 找到最耗CPU的java线程 ps命令 命令:ps -mp pid -o THREAD,tid,time   或者  ps -Lfp pid 结果展示: 这个命令的作用,主要是可以获取到对应一个进程下的线程的一些信息. 比如你想分析一下一个java进程的一些运行瓶颈点,可以通过该命令找到所有当前Thread的占用CPU的时间,也就是这里的最后一列. 比如这里找到

总结:常用的Linux系统监控命令

记录一下自己常用的linux系统命令,方便以后查阅,发觉记忆越来越不行了 找到最耗CPU的java线程 ps命令 命令: ps -mp pid -o THREAD,tid,time 或者 ps -Lfp pid 结果展示: 这个命令的作用,主要是可以获取到对应一个进程下的线程的一些信息. 比如你想分析一下一个java进程的一些运行瓶颈点,可以通过该命令找到所有当前Thread的占用CPU的时间,也就是这里的最后一列. 比如这里找到了一个TID : 30834 ,所占用的TIME时间最高. 通过

linux系统监控命令 top

进程监控命令 top 先来个截图 第一行:运行到23:21:41 共运行了30天16小时43分钟,当前1个用户,1分钟,5分钟,15分钟的平均负载分别为1.08,1.39,1.10.(超过5就高了) 第二行:共有24个进程,1个正在运行,23个休息,没有停止的,也没有僵尸进程. 第三行:用户态进程占CPU14.5%,内核态0.2%,改变过优先级的进程0.0%,空闲85.2,等待输入输出的0.0%,硬中断占0.0%,si软中断, 第四行:总内存,使用的内存,空闲内存,缓存的内存. 第五行:交换区总

linux 系统监控命令 vmstat

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况.这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样). 一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,

Linux 系统监控、诊断工具-top,vmstat,iostat,iotop

1.问题: 最近在做日志的实时同步,上线之前是做过单份线上日志压力测试的,消息队列和客户端.本机都没问题,但是没想到上了第二份日志之后,问题来了: 集群中的某台机器 top 看到负载巨高,集群中的机器硬件配置一样,部署的软件都一样,却单单这一台负载有问题,初步猜测可能硬件有问题了. 同时,我们还需要把负载有异常的罪魁祸首揪出来,到时候从软件.硬件层面分别寻找解决方案. 2.排查: 从 top 中可以看到 load average 偏高,%wa 很高,%us 偏低: 从上图我们大致可以推断 IO

linux系统监控、诊断工具摘录top IO wait lsof

linux 系统监控.诊断工具之 top 详解 http://my.oschina.net/leejun2005/blog/157910 linux系统监控.诊断工具之 IO wait http://my.oschina.net/leejun2005/blog/355915 linux 系统监控.诊断工具之 lsof 用法简介 http://my.oschina.net/leejun2005/blog/153584 CPU Load过高问题分析和解决方案 http://yikebocai.com

[转载]你需要知道的 16 个 Linux 服务器监控命令

转载自: 你需要知道的 16 个 Linux 服务器监控命令 如果你想知道你的服务器正在做干什么,你就需要了解一些基本的命令,一旦你精通了这些命令,那你就是一个 专业的 Linux 系统管理员. 有些 Linux 发行版会提供 GUI 程序来进行系统的监控,例如 SUSE Linux 就有一个非常棒而且专业的工具 YaST,KDE 的 KDE System Guard 同样很出色.当然,要使用这些工具,你必须在服务器跟前进行操作,而且这些 GUI 的程序占用了很多系统资源,所以说,尽管 GUI

linux 系统监控、诊断工具之 IO wait

1.问题: 最近在做日志的实时同步,上线之前是做过单份线上日志压力测试的,消息队列和客户端.本机都没问题,但是没想到上了第二份日志之后,问题来了: 集群中的某台机器 top 看到负载巨高,集群中的机器硬件配置一样,部署的软件都一样,却单单这一台负载有问题,初步猜测可能硬件有问题了. 同时,我们还需要把负载有异常的罪魁祸首揪出来,到时候从软件.硬件层面分别寻找解决方案. 2.排查: 从 top 中可以看到 load average 偏高,%wa 偏高,%us 很低: 充分说明这个问题是由于 IO

[转]linux 系统监控、诊断工具之 IO wait

1.问题: 最近在做日志的实时同步,上线之前是做过单份线上日志压力测试的,消息队列和客户端.本机都没问题,但是没想到上了第二份日志之后,问题来了: 集群中的某台机器 top 看到负载巨高,集群中的机器硬件配置一样,部署的软件都一样,却单单这一台负载有问题,初步猜测可能硬件有问题了. 同时,我们还需要把负载有异常的罪魁祸首揪出来,到时候从软件.硬件层面分别寻找解决方案. 2.排查: 从 top 中可以看到 load average 偏高,%wa 很高,%us 偏低: 从上图我们大致可以推断 IO